Xrayを1台の端末から家庭内ネットワークのゲートウェイへ移行したい方に向けて、メインルーターで動かす構成と独立したバイパスルーターを使う構成を解説します。ネットワークのアドレスを例に、ゲートウェイ、DNS、透過プロキシの入口、戻りの通信経路を整理。1台の端末で試運用を始める手順や、追加で必要になる転送ルールを把握し、メインルーター経由に戻す方法も確認できます。
1. Xrayコアとルーターの役割
Xrayはプロキシプロトコル、インバウンド、アウトバウンド、ルーティングルールを処理するコアであり、ルーターシステムそのものではありません。実行ファイルを機器に置けば解決するのは、プログラムを起動できるかどうかだけです。パケット転送、DNSサービス、ファイアウォールの制御、自動起動はOSと構成に依存します。v2rayNはデスクトップクライアント、v2rayNGはXrayコアを使用するAndroidクライアントです。これらのインストーラーをルーター用サービスとして直接使うことはできません。
導入前にCPUアーキテクチャ、システムのバージョン、使用可能なメモリ、空きストレージを確認してください。ファームウェアのパッケージ管理ツールで提供されるソフトウェアは、特定のシステムライブラリに依存する場合があります。ファイル名にARMとあるだけで互換性があるとは判断できません。ここではOpenWrtのネットワーク管理を例に説明します。各機能が使えるかどうかは、機器のファームウェアとインストールパッケージで確認してください。
- システム層:ネットワークインターフェースのアドレス、デフォルトルート、IPフォワーディング、IPv6ルーティング、ファイアウォール。
- トラフィック制御層:対象のTCPまたはUDP通信を透過プロキシの待ち受けポートへ転送します。
- コア層:
inboundsで接続を受け付け、routing.rulesで条件を判定し、outboundsでプロキシまたは直接接続の出口を定義します。 - 名前解決層:端末が使用するDNS、問い合わせの振り分け方法、上流DNSへの問い合わせが再び自身の制御対象になるかを確認します。
2. メインルーターとバイパスルーターの構成
メインルーターは通常、PPPoE接続、DHCP、NAT、ファイアウォールを担っています。この機器でXrayを動かすと通信の入口を集約できますが、ルールの設定ミスがLAN全体に影響するおそれがあります。独立したバイパスルーターなら、テスト端末1台だけを対象にしやすい一方、通信経路が増え、戻りの通信の非対称性、DHCPの重複、ゲートウェイ設定ミスなどのリスクも生じます。
2つの構成:端末のデフォルトゲートウェイを確認
メインルーターでXrayを動かす
- 端末のデフォルトゲートウェイはメインルーターのアドレスのままです。
- 転送経路の入口で、対象端末または対象の通信を制御します。
- PPPoE接続、Wi-Fi、プロキシが消費するリソースを確認します。
- ファイアウォールを変更する前に、ローカルの管理接続を確保してください。
独立したバイパスルーターでXrayを動かす
- まずテスト端末1台のゲートウェイをバイパスルーターのアドレスに変更します。
- バイパスルーターのデフォルトルートはメインルーターを向くようにします。
- 同じネットワークに単一のLANポートで接続する構成では、戻りの通信経路を個別に確認します。
- 計画なしに2台目のDHCPサーバーを有効にしないでください。
初回の導入ではメインルーターの設定を変えず、1台の端末だけをバイパスルーター経由にします。動作を確認してから、対象範囲を広げてください。
バイパスルーターに2つのネットワークポートが必須とは限りません。単一ポートでも同じLAN内の通信を送受信できますが、転送ルールが不要になるわけではありません。2ポート構成でも自動的にネットワークが分離されるわけではなく、両方のインターフェースを同じブリッジに接続すれば、実際には同一のレイヤー2ネットワークになる場合があります。
3. 固定アドレスでゲートウェイと戻りの経路を確認
次の表は説明用のIPv4ネットワーク構成であり、機器の初期設定や性能測定の結果ではありません。まず各アドレスが未使用であることを確認し、DHCPの動的割り当て範囲から固定アドレスを除外してください。テスト端末の設定だけを変更し、他の端末は引き続きメインルーターを使用します。
| 機器 | IPv4アドレス | デフォルトゲートウェイ | DNS |
|---|---|---|---|
| メインルーター | 192.168.10.1/24 | プロバイダー側の上位回線 | 現在のネットワーク設定に従う |
| バイパスルーター | 192.168.10.2/24 | 192.168.10.1 | 明示的に設定したDNSサーバー |
| テスト端末 | 192.168.10.100/24 | 192.168.10.2 | 192.168.10.2 |
端末のDNSに192.168.10.2を指定するには、バイパスルーターがそのアドレスの53番ポートでDNSサービスを提供し、LANからの問い合わせを受け付けている必要があります。XrayをインストールしただけではDNSサービスは使えません。メインルーターとバイパスルーターが同一サブネットにある場合、メインルーターの管理アドレスへの通信は通常レイヤー2で直接届くため、デフォルトゲートウェイを経由しません。
シングルアーム構成のバイパスルーターでは、直接通信の戻りが「端末からバイパスルーターを通って送信され、メインルーターから端末へ直接返る」経路になることがあります。これにより、ステートフルファイアウォールやコネクショントラッキングに影響する場合があります。送信元アドレス変換を使えば応答をバイパスルーターに戻せますが、上流側から見える送信元アドレスが変わるため、すべての構成で使える万能策ではありません。ICMPリダイレクトによって端末がメインルーター経由に切り替わらないか、同一インターフェース間の転送がファイアウォールで許可されているかも確認してください。
- バイパスルーターのデフォルトルートが
192.168.10.1を向いていることを確認します。 - IPv4フォワーディングが有効か、転送チェーンでテスト端末の通信が許可されているか確認します。
- プロキシ経由の通信と直接接続の通信を個別に確認します。Webページを1つ開いただけで、すべての通信経路を判断しないでください。
- IPv6が引き続きメインルーターから通知されたデフォルトルートを使う場合、IPv4のゲートウェイを変更してもIPv6は自動的に制御されません。
4. 透過プロキシの入口とXrayのルーティングは別の層
明示的なプロキシではアプリがSOCKSまたはHTTPの入口に接続します。透過プロキシではネットワークルールによって接続がコアへ転送されます。Xrayに待ち受けポートを追加しただけでは、LAN内の端末が自動的にそのポートを使うことはありません。この記事の例で使う12345は選択したポート番号です。実際の透過プロキシの入口とファイアウォールの転送先を一致させてください。
端末1台で明示的なプロキシを検証
おすすめまずLANから接続できるSOCKSまたはHTTPのインバウンドを使って、ノード、証明書、アウトバウンドの設定を確認します。接続元のアドレスを制限し、検証後は不要な入口を閉じてください。このテストに成功しても、透過プロキシが使えるとは限りません。
向いているケース:初回導入時にノードやコアの設定を切り分けたい場合。
REDIRECTによる制御
一般的にはTCP通信に使われ、対象のインバウンドが元の宛先アドレスを取得できる必要があります。TCP用のリダイレクトルールをすべてのUDP通信に適用することはできません。また、NATチェーンを設定しただけで全プロトコルを処理できるわけではありません。
向いているケース:TCPのみを対象とし、ファームウェアに対応する設定が用意されている環境。
TPROXYによる制御
TCPとUDPの両方に使用できますが、カーネルの対応、ポリシールーティング、パケットマーク、対応する透過ソケットの設定が必要です。マーク値、ルーティングテーブル、インバウンド設定をセットで確認してください。
向いているケース:UDPも制御対象で、ポリシールーティングを管理できる環境。
OpenWrt 22.03以降では、標準でfirewall4とnftablesが使われます。旧構成を引き継ぐ場合は、まず実際に使用されているルールのバックエンドを確認してください。旧式のiptablesスクリプトを新しいファームウェアにそのまま追加し、コマンドの終了コードだけで導入の成否を判断しないでください。透過プロキシの入口では、Xray自身が発信するプロキシ接続、管理用アドレス、必要なローカルサービスを除外し、通信が再び自身に取り込まれないようにします。
5. DNSの振り分けと通信経路を合わせる
端末からDNSサーバーへ問い合わせる経路と、端末が接続先のIPアドレスへ通信する経路は別です。ゲートウェイをバイパスルーターに変更しても、ブラウザー内蔵の暗号化DNSまで自動的に制御されるわけではありません。DNSをバイパスルーターに向けても、デフォルトゲートウェイは変わりません。試運用では、システムのDNSを使う端末と、アプリが独自に名前解決する端末を明確にしてください。
- 入口:
192.168.10.2:53でDNSサービスが待ち受けており、TCPとUDPの両方で問い合わせが届くことを確認します。 - 上流:ローカルのDNSリゾルバーが問い合わせをどこへ転送するかを確認します。上流へのアクセスにプロキシを使う場合、プロキシ自体が未設定の同じDNS経路に依存しないようにしてください。
- ルール:
domainStrategyはルーティング判定で名前解決の結果をどう使うかを指定する設定で、LAN内のDNS通信を制御するための全体設定ではありません。 - ドメイン情報:透過通信にはルール判定に使えるドメイン名が含まれない場合があります。スニッフィングを使っても、暗号化された接続のドメイン名を必ず特定できるとは限りません。
- キャッシュ:名前解決の経路を変更したら、新しい接続で再確認してください。古い記録の影響を避けるため、必要に応じて端末とローカルDNSリゾルバーのキャッシュを消去します。
必要なツールがシステムにインストールされていれば、テスト端末で次の2つのコマンドを実行し、一般的なUDP問い合わせとTCP問い合わせをそれぞれ確認できます。応答があっても、DNSの入口が使えることしか分かりません。想定どおりの上流を経由しているかは、DNSサービスのログで確認してください。
dig @192.168.10.2 example.com A
dig +tcp @192.168.10.2 example.com A
IPv6もあわせて計画してください。端末はルーター広告からIPv6のデフォルトゲートウェイやDNSを取得することがあり、アプリがAAAAレコードを優先する場合もあります。IPv6の通信を制御できていない間は、テスト端末でIPv6の経路を明示的に管理し、設定を記録してください。IPv4で接続できたという理由だけで、ネットワーク全体への適用が完了したと判断しないでください。
6. 端末1台から運用を開始
以下ではOpenWrt 23.05系列の標準LuCI日本語インターフェースを例に説明します。カスタムファームウェアではメニュー名が異なる場合があります。ネットワークアドレスの変更で管理接続が切れるため、作業前に有線接続を用意し、メインルーターのアドレス、現在のDHCP設定、設定バックアップを記録してください。
-
現在の設定を記録
「システム」→「バックアップ/更新」を開き、現在の設定をバックアップします。テスト端末の元のゲートウェイとDNSを控え、メインルーターの
192.168.10.1に直接アクセスできることを確認してください。 -
バイパスルーターのアドレスを固定
「ネットワーク」→「インターフェース」→「LAN」→「編集」→「基本設定」を開き、例に従って固定アドレス
192.168.10.2/24を設定します。IPv4ゲートウェイには192.168.10.1を指定してください。変更を保存して適用したら、新しいアドレスで再ログインします。 -
DHCPの重複割り当てを防ぐ
バイパスルーターの「ネットワーク」→「インターフェース」→「LAN」→「編集」→「DHCPサーバー」→「全般設定」で「このインターフェースを無視する」を確認します。同一サブネットでテストする間は、メインルーターだけをDHCPサーバーとして使ってください。
-
Xrayの入口を確認
まずXrayの設定とノードへの接続を確認してから、計画した透過プロキシのルールを有効にします。待ち受けポート、転送ポリシー、DNSサービス、プロセス自身が発信する通信の除外を確認してください。他の機器向けのファイアウォールコマンド一式をそのままコピーしないでください。
-
テスト端末だけを変更
テスト端末のゲートウェイを
192.168.10.2に変更します。DNSサービスが利用できることを確認してから、DNSも同じアドレスに設定してください。Webサイト、UDPを使うアプリ、LAN共有、ルーターの管理画面をそれぞれテストします。 -
検証してから対象を拡大
バイパスルーターを再起動して再テストします。サービスの起動順、ルールの復元、DNSの準備完了を確認してから、DHCPオプション3でゲートウェイ、オプション6でDNSを配布することを検討してください。リース済みの端末はリースを更新し、実際に取得した値を確認します。
7. 症状ごとに切り分け、複数の設定を同時に変えない
確認する順序は、端末のアドレスとルーティング、バイパスルーターの転送、DNS、コアの入口、プロキシのアウトバウンドに固定してください。一度に変更するのは1項目だけとし、変更前後のログを記録します。次のコマンドはLinuxゲートウェイの状態を読み取り専用で確認するためのものです。軽量版ファームウェアでは、必要なツールの追加インストールが必要な場合があります。
ip -4 route
ip -6 route
ip rule show
sysctl net.ipv4.ip_forward
ss -lntup
nft list ruleset
ゲートウェイを変更したら、どのWebサイトも開けなくなった
まずテスト端末のゲートウェイを192.168.10.1に戻し、元のネットワークが使えることを確認します。次にバイパスルーターのデフォルトルート、IPフォワーディング、ファイアウォールの転送カウンターを確認してください。先にノードを変更しないでください。DNSをバイパスルーターに向けている場合は、53番ポートでDNSサービスが動作していることも確認します。
Webサイトは開けるのに、音声通話やゲームがつながらない
TCPだけを制御する構成になっていないか確認し、UDPインバウンド、ポリシールーティング、アウトバウンドの対応状況を調べます。アプリのログで失敗したプロトコルを確認してください。TCPでWebページを表示できても、UDPやDNSの転送が正常とは限りません。
一部の端末だけバイパスルーターを経由するのはなぜ
DHCPの管理画面だけで判断せず、端末ごとに実際のゲートウェイとDNSを確認してください。固定IP、古いリース情報、アプリ独自の名前解決、IPv6のデフォルトルートが原因で差が生じる場合があります。まず同じ端末でIPv4とIPv6の経路をそれぞれ確認します。
再起動後は動かないのに、手動で起動すると正常
サービスの起動ログを確認し、プロキシ接続より先にネットワーク、時刻同期、DNSが使える状態になっているか確認します。ファイアウォールの再読み込み後も制御用チェーンが残っているかも調べてください。まず依存関係の順序を直してから、上限を設けた再試行を設定します。設定の問題を隠すために再起動を繰り返さないでください。
運用開始前に、次の3つの復旧手段を確認してください。端末のゲートウェイを元に戻せること、メインルーターの管理画面にアクセスできること、バイパスルーターのサービスを停止しても、存在しないポートへ転送するルールが残らないことです。CPUアーキテクチャ、ノードのプロトコル、回線の条件は機器ごとに大きく異なります。製品の公称速度からプロキシの実効速度を推定せず、実際の通信テスト、リソース使用量、接続ログを基準に対象範囲を広げてください。