TUNモードとは?仮想NICで全通信を取り込む仕組みと設定方法

システムプロキシとTUNの違い、コマンドラインやゲームにTUNが必要な理由、v2rayNでの有効化と管理者権限の設定手順を解説します。

この記事の概要

まずノードが使えることを確認し、v2rayNを管理者として起動してTUNを有効にしたら、ルーティングとDNSを確認します。「ブラウザーは使えるのに、ターミナルやゲームはつながらない」という場合に役立つ内容です。システムプロキシ、仮想NICによる通信の取り込み、全通信に対するルールの違いを理解し、チェックリストに沿ってネットワークの問題を解決できます。

1. システムプロキシ・TUN・全通信プロキシの違い

システムプロキシは、OSがアプリに提供するプロキシ設定です。アプリがその設定を参照する場合に、ローカルのプロキシポートへ通信を渡します。ブラウザーは通常システムプロキシを利用できますが、一部のコマンドラインツールやゲーム、独自にネットワーク接続を行うプログラムは設定を参照しません。ブラウザーは使えてもほかのアプリがつながらない場合は、ノードをすぐ変更するのではなく、まず対象アプリがプロキシに対応しているか確認しましょう。

TUNはネットワーク層で動作する仮想ネットワークインターフェースで、IPパケットを送受信します。クライアントが仮想NICを作成してルートを設定すると、該当する通信をプロキシ処理に渡せます。アプリごとにHTTPやSOCKSプロキシへの対応を求めないのが特徴です。HTTPはWeb通信で一般的なプロトコル、SOCKSはアプリの通信を中継するプロキシプロトコルです。

比較項目システムプロキシTUNモード
通信を取り込む場所アプリがプロキシ設定を使ってリクエストを転送仮想NICとシステムルートでIPパケットを受信
アプリ側の要件システムプロキシへの対応、または手動でのプロキシ設定が必要通常、アプリ側にプロキシ設定は不要
UDP通信システムのHTTPプロキシでは通常カバーできない取り込み可能。ただしカーネル、ルール、ノードの対応状況による
起動時の権限通常は管理者権限不要NICの作成やルート変更には通常、管理者権限が必要
実際の通信経路クライアントのルーティングルールで決まる同じくクライアントのルーティングルールで決まる

要点:取り込み方式を選んでからルーティングルールを設定

TUNを有効にしても、すべての通信がリモートノード経由になるわけではありません。プロキシ設定を参照しないアプリの通信を取り込みたい場合にTUNを使い、どの宛先をプロキシ経由にするかはルーティングルールで調整します。設定を分けて確認すると、問題の切り分けが容易です。

2. 仮想NICからノードへ通信が渡る仕組み

アプリの接続システムルート仮想NICルール判定外向き接続

アプリが接続を開始すると、まずシステムがルートテーブルを参照します。TUNのルートに該当する通信は仮想NICに入り、処理カーネルが読み取ってルールと照合します。ルールに応じて、直接接続、プロキシ経由、またはブロックに振り分けられます。つまり「全通信を取り込む」とは対象範囲を表すもので、すべての通信がプロキシサーバーを経由するという意味ではありません。

v2rayNは設定を管理し、カーネルを呼び出すクライアントの画面です。V2RayやXrayのカーネルそのものではありません。TUNの実装はクライアントのバージョンと使用するカーネルによって異なり、バージョンによってはsing-boxがTUN処理を担います。ノードのプロトコルがVMessやVLESSであることだけでは、ローカルのTUN実装方式は判断できません。

3. 設定を保存し、ローカルの接続先を確認する

ここではWindows版v2rayN 7.xのデスクトップ画面を例に説明します。細かなバージョンによってボタンの位置や設定項目の分類が異なる場合があります。実際の画面にある「TUNを有効にする」とTUN関連の項目名を確認し、別バージョンの画面と同じ配置を探さないでください。開始前に、使用中のバージョン、選択中のノード、ルーティングモード、ローカルの待ち受けポートを記録します。

通常プロキシの確認用設定

使用中の設定
インポート済みで接続可能なノードを選択
システムプロキシ
まずブラウザーの接続確認に使用
ローカル接続先
実際のSOCKSまたは混合待ち受けポートを記録
バックアップ対象
サブスクリプション、ルーティング、DNSの設定

まずノードが使えることを確認し、その後で仮想NICを追加します。

TUNの起動条件

実行権限
管理者として起動
処理カーネル
クライアントが必要とするカーネルファイルがそろっていること
ほかのトンネル
テスト中は競合する可能性のある接続を一時停止
ルーティングとDNS
まずクライアントの既定設定を維持

管理権限のあるデバイスで操作し、組織のネットワークポリシーを回避しないでください。

以下の3つの数値はトラブルシューティングでよく使われるポート番号です。通信速度の測定値でも、すべてのバージョンに共通する既定値でもありません。特にローカルプロキシのポートは「設定」→「パラメータ設定」で待ち受け設定を確認してください。古い解説記事の数値をそのまま入力しないようにしましょう。

53
従来型DNSでよく使われるポート
443
HTTPSでよく使われるポート
10808
以下のSOCKS接続例で使うポート

4. v2rayNを管理者権限で起動してTUNを有効にする

  1. 現在のノードを確認する。使用する設定を選び、まずシステムプロキシを使って、接続できることが分かっているHTTPSページにアクセスします。通常のプロキシでも接続できない場合は、サブスクリプション、サーバーアドレス、認証情報、ネットワークの問題を先に解決してください。
  2. クライアントを完全に終了する。通知領域のメニューからv2rayNを終了します。メインウィンドウを閉じるだけでは不十分です。古いプロセスが通知領域で動作したままだと、再起動後も以前の権限で実行されることがあります。
  3. 管理者として実行する。v2rayNのプログラムまたはショートカットを右クリックし、「管理者として実行」を選択して、システムの許可確認に応じます。サービスモードに対応するバージョンでは、サービス経由で必要な権限を取得できる場合もあります。最初の切り分けでは、明確な方法を一つ選んで管理者権限で起動してください。
  4. TUNの設定を確認する。「設定」→「パラメータ設定」を開き、使用中のバージョンのTUN設定を探します。初回はプロトコルスタックとMTUを既定値のままにし、DNS、NIC名、ルーティングを同時に変更しないでください。MTUは1つのネットワークパケットで転送できる最大サイズです。
  5. 「TUNを有効にする」をオンにする。メイン画面に戻り、該当するスイッチをオンにします。ログでカーネルの起動、NICの作成、ルート設定が完了したことを確認してください。カーネルファイルが見つからない場合は、完全版の配布パッケージを使うか、クライアントの更新機能から不足分を取得します。
  6. システムプロキシの影響を切り分ける。TUN単独で動作するか確認するため、システムプロキシを「システムプロキシをクリア」に設定します。クライアントとTUNは起動したまま、ブラウザーと対象アプリをテストしてください。

有効化後は、Windowsの「設定」→「ネットワークとインターネット」→「ネットワークの詳細設定」でネットワークアダプターを確認できます。以下のコマンドでも確認できます。仮想NICが表示されるのはインターフェースが作成されたことを示すだけで、ノード、名前解決、対象アプリが正常に動作する保証にはなりません。

5. スイッチを見るだけでなく、コマンドで通信の取り込みを確認する

同じターミナルウィンドウで、まず比較テストを行います。1つ目はローカルのSOCKS接続先を明示し、通常のプロキシ経路を確認します。2つ目はアプリ側のプロキシを使わずに接続し、TUN有効時の通信を確認します。例ではポート10808と一般公開のサンプルドメインを使います。実行前にポート番号と現在のノードのルールを確認してください。

curl.exe --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com
curl.exe --noproxy "*" --connect-timeout 10 --max-time 20 -I https://example.com

socks5hは、ドメイン名の名前解決をSOCKSプロキシ側で行う指定です。--noproxy "*"を指定すると、このcurlリクエストではアプリ層のプロキシ設定が無視されますが、システムルートやTUNは迂回しません。Windowsではcurl.exeを使うと、ターミナル環境によってcurlが別のコマンドとして解釈されるのを避けられます。

Get-NetAdapter
Get-NetRoute -AddressFamily IPv4
Get-NetRoute -AddressFamily IPv6
Get-DnsClientServerAddress

要点:「リクエストの成功」と「該当する外向き接続ログ」の両方で経路を確認

2つ目のコマンドが成功したら、ログで想定したプロキシ経由の接続に一致しているか確認します。直接接続が成功しただけなら、テスト先またはルーティングルールを見直してください。それだけで、すべてのアプリがプロキシ経由になったとは判断できません。

6. DNS・LAN・UDPの注意点

ルーティングを調整する前に、まず名前解決を直しましょう。従来型DNSは通常、UDPまたはTCPのポート53を使います。暗号化DNSはHTTPSのポート443で通信する場合もあります。ポート53だけを取り込んでも、アプリ内蔵の暗号化DNSまでカバーできるとは限りません。ブラウザーで独自のセキュアDNSを有効にしている場合は、クライアント側の設定と併せて確認し、設定同士の競合を避けてください。

症状まず確認する項目対処方法
ドメイン名では失敗するが、IPアドレスへの接続は成功するDNSの上流サーバーと名前解決時の外向き接続DNSを既定設定に戻し、名前解決のタイムアウトログを確認してから、上流サーバーを1つずつ変更する
プリンターやストレージなど、LAN内の機器に接続できないLAN内の宛先が誤ってプロキシ経由になっていないか192.168.0.0/16、10.0.0.0/8など、実際に使っているネットワーク範囲の直接接続ルールを確認する
Webは使えるが、ゲームへのログインやボイスチャットが失敗するUDPへの対応とルールノード側のサービスがUDPに対応していることを確認し、ゲーム関連の通信がブロックされていないか調べる
一部のページが読み込み中のままになる、またはアップロードが中断するMTUと経路の問題元の値を記録してから1項目ずつテストする。1400を試す方法もありますが、万能の最適値とは限りません

LANのアドレス範囲は表にある2種類だけではありません。実際の環境に応じて、172.16.0.0/12、IPv6のローカルアドレス、組織専用のルートも確認してください。組織内ネットワーク全体を安易にプロキシ経由にしたり、用途不明の公開IPアドレス範囲全体を直接接続に追加したりしないでください。

コマンドラインツールに必ずTUNが必要なわけではありません。プロキシに対応するツールなら、環境変数を設定するかSOCKS接続先を明示できます。ゲームに使えるプロキシ設定がある場合は、別の方法も選べます。TUNの利点は、プロキシ設定を参照しない通信をまとめて取り込めることです。ゲームの遅延を必ず改善するものではなく、サーバー側にないUDP機能を補うこともできません。

7. よくある質問とネットワークの復旧手順

有効化すると権限不足と表示される。管理者として実行したのに?

まず通知領域から完全に終了し、古いプロセスが残っていないか確認します。プログラムを右クリックして「管理者として実行」を選び、もう一度起動してください。それでも失敗する場合は、ログに記録された失敗操作を確認し、NICの作成失敗かファイルへのアクセス失敗かを切り分けます。スイッチを何度も切り替えるだけでは解決しません。

ブラウザーは使えるのに、ターミナルから接続できない場合は?

まずシステムプロキシをクリアし、上記の--noproxy "*"を付けたテストを実行します。失敗する場合はTUNのルートと外向き接続ログを確認してください。成功する場合は、ターミナルツール独自のプロキシ環境変数、証明書設定、接続先を確認します。

TUNを有効にしたら、ほかのトンネルや社内ネットワークにつながらなくなった?

まずTUNを無効にして社内ネットワークを復旧し、両方のルートを比較します。許可を得てテストする場合は、一度に有効にするトンネルを1つにしてください。複数のトンネルを同時に使う必要がある場合は、社内ネットワークの範囲、DNS、通信出口の優先順位をネットワーク管理者に確認します。ほかのトンネルのルートをそのまま削除しないでください。

クライアントを終了した後もインターネットにつながらない場合、どうすれば復旧できる?

クライアントを再起動してTUNを無効にし、システムプロキシをクリアしてから通常の方法で終了します。システムDNSが応答しないローカルサービスを参照したままになっていないか確認してください。ネットワークが自動取得だった場合は、自動取得に戻します。改善しない場合はネットワークを再接続するか端末を再起動し、設定が残っていないか確認してください。

Android版v2rayNGでも同じように管理者権限が必要?

Windows版の手順をそのまま使う必要はありません。v2rayNGはXrayカーネルを使用し、起動時にAndroidのVPN権限を取得して通信を取り込みます。通常、root権限は不要です。システムの許可設定を確認し、アプリごとのプロキシ設定も確認してください。除外リストにあるアプリには同じ経路が適用されません。

トラブルシューティングが終わったら、最終的に使えるノード、ルーティングモード、DNS設定、クライアントのバージョンを記録します。設定は一度に1つだけ変更し、失敗したら元に戻してください。直接接続とプロキシ経由の外向き接続がどのように判定されるか詳しく知りたい場合は、サイト内の設定項目の解説をご覧ください。サブスクリプションを初めてインポートする場合は、入門ガイドから始められます。

クライアントをダウンロード