ルーター・バイパスルーターでのXray導入ガイド|必要なハードウェア・透過プロキシ・ルーティング

Xrayをルーターやバイパスルーターで動かせば、各端末にクライアントを入れずに利用できます。必要な機器や透過プロキシの仕組み、設定ファイルの配置、導入時の注意点を解説します。

この記事の要点

まず1台の端末でXrayのアウトバウンド接続を確認し、次にバイパスルーターのゲートウェイ、DNS、透過制御を設定してから、対象をほかの端末へ広げます。OpenWrtとLinuxのネットワークスタックを例に、機器の予算、Xrayの設定、ファイアウォールルールを分けて解説します。利用可能なノードがあり、端末単体のプロキシ環境をLAN全体へ移行したい方に向けた内容です。記載するアドレスとポートは構成例であり、すべてのファームウェアでの初期値ではありません。

1. ハードウェア選び:CPUアーキテクチャと空きメモリを確認

Xrayは接続、プロトコル、ルーティングを処理するコアであり、ルーター用ファームウェアでも、汎用のルーター管理画面でもありません。Linuxが動作する機器でも、任意のXrayバイナリをそのまま実行できるとは限りません。CPUアーキテクチャ、命令セット、システム環境、書き込み可能なストレージが一致している必要があります。ダウンロード前にuname -mでアーキテクチャを、free -mとdf -hでメモリとストレージの空きを確認してください。

以下は導入時の予算目安であり、動作に必要な最低条件やスループットを保証するものではありません。同時接続数、ルールの規模、暗号化処理、ログ量によって必要なリソースは変わります。製品パッケージに記載された無線速度も、プロキシ転送性能の目安にはなりません。

既存のメインルーター

まず、ファームウェアが機器のアーキテクチャに合ったパッケージに対応しているか確認します。メモリが128 MBしかなく、無線、PPPoE接続、ほかのサービスも同時に担う場合は、空きリソースを先に確認してください。ルールの読み込みや更新時は、アイドル時よりメモリ使用量が大きくなることがあります。

向いている環境:接続端末が少なく、対応ファームウェアを使用しており、メンテナンス時にネットワークが一時停止しても問題ない場合。

専用のバイパスルーター

おすすめ

初めて導入するなら、64ビットのデュアルコアCPU、メモリ1 GB、書き込み可能なストレージ1 GB以上を備えた機器が目安です。専用機なら元の構成に戻しやすく、プロキシサービスの調整時にメインルーターの無線やPPPoE接続まで再起動する必要がありません。

向いている環境:まず1台の端末で試し、段階的に対象を広げたい家庭内ネットワーク。

常時稼働のLinuxホスト

小型PCや仮想マシンがすでにある場合は、まず独立してXrayを動かせます。仮想マシンを使う場合は、仮想NICのブリッジ方式、ホスト側のファイアウォール、起動順序も確認してください。仮想マシン内の設定だけを見ても不十分です。

向いているユーザー:Linuxサービスの管理に慣れており、ログを残しながらネットワーク経路を段階的に調べたい方。

まとめ:独立した復旧経路を確保する

初回はバイパスルーターを使い、端末をメインルーターへ直接接続する方法も残しておきましょう。問題が起きたとき、テスト端末のゲートウェイとDNSをメインルーターに戻すほうが、ネットワーク全体が切断されてからファイアウォールを復旧するより安全です。

2. メインルーターとバイパスルーター:通信経路を整理する

メインルーターは通常、PPPoE接続、NAT、DHCP、デフォルトゲートウェイを担当します。バイパスルーターはLANに追加する転送機器で、ケーブルを接続しただけで家庭内の通信を自動的に取り込むわけではありません。Xrayで接続を処理するには、対象の通信を端末からバイパスルーターへ送るか、メインルーターのポリシールーティングで転送する必要があります。

同一サブネット方式では、バイパスルーターを通らない直接通信の戻り経路や、ICMPリダイレクトによって端末の経路が変わらないかも確認します。送信元アドレス変換を有効にするかは、実際の構成とコネクション追跡の要件で決まります。「バイパスルーターでは必ずNATが必要」と一律には言えません。最初は端末1台だけを変更し、ip routeやOSのルーティング確認ツールでデフォルトゲートウェイを確認してください。

3. 透過プロキシ:通信の取り込み方とプロキシプロトコルは別

透過プロキシは通信を取り込む方法を指し、VLESSやVMessに代わるプロトコルではありません。端末側でアプリのプロキシアドレスを指定せず、ゲートウェイのリダイレクトやポリシールーティングで通信をXrayに渡します。TCP、UDP、IPv6を制御できるかどうかは、Linuxのネットワーク設定、インバウンド設定、プロキシのアウトバウンド、サーバー側の対応状況によって異なります。

方式通信を取り込む場所主な制約
明示的なSOCKSプロキシアプリからローカルのプロキシポートへ接続Xrayの動作確認に便利ですが、家庭内のすべてのアプリが自動的に対象になるわけではありません
REDIRECTファイアウォールで接続をローカルのインバウンドへリダイレクト主にTCPで使用します。TCP用ルールをそのままUDPに適用することはできません
TPROXY透過ソケットとポリシールーティングの併用カーネルモジュール、パケットマーク、ローカルルーティングを連携させる必要があります
TUN方式仮想ネットワークインターフェースでIPパケットを受信実装やルーティング設定によって異なり、デスクトップ版のスイッチ名をそのまま当てはめることはできません

Xrayで一般的なLinux透過接続方式では、dokodemo-doorインバウンドを使い、followRedirectで元の宛先を取得します。TPROXY方式では、対応するstreamSettings.sockopt.tproxyの設定も必要です。これらのJSON項目を追加しただけでは、ファイアウォールルールやポリシールーティングは作成されず、システムの転送機能も有効になりません。

OpenWrt 22.03以降では、通常firewall4とnftablesが使われます。firewall3を前提とした古いiptablesの解説は、そのまま適用できません。実際のファームウェア、モジュール、互換レイヤーを確認してください。デスクトップ版v2rayNのTUNスイッチも、ルーター上のXray設定にそのままコピーできる単一の項目ではありません。詳しくはTUN設定の解説をご覧ください。

4. 設定ファイルとサービス:まず明示的なプロキシで動作確認

設定ファイルのパスは起動コマンドで決まり、ファイル名だけでは決まりません。/etc/xray/config.jsonはよく使われる配置例です。パッケージや管理画面によって別のディレクトリが使われたり、/var以下に実行時ファイルが生成されたりする場合もあります。生成されたファイルを直接編集すると、次回の保存や再起動で上書きされることがあるため、まず設定の保存元を確認してください。

  1. ネットワーク情報を記録する

    OpenWrt LuCIの「ネットワーク」→「インターフェース」で、LANアドレス、上流ゲートウェイ、インターフェース名を記録します。「システム」→「バックアップ/更新」から設定のバックアップも取得してください。全端末に配布するDHCP設定は、まだ変更しないでください。

  2. 起動設定を確認する

    xray versionを実行して、Xrayが起動できることを確認します。systemdを使う環境では、systemctl cat xrayに表示されるExecStartを確認してください。OpenWrtでは/etc/init.d/xrayと、そこから読み込まれる設定を調べ、実際のファイルパスを確認します。

  3. 設定ファイルを検証する

    実際の設定ファイルがこの一般的なパスにある場合は、xray run -test -config /etc/xray/config.jsonを実行します。構文エラー、認識されない項目、ルールファイルの読み込みエラーを先に修正してからサービスを起動してください。設定テストの成功は、リモートノードへの接続を保証するものではありません。

  4. ローカルで動作確認する

    まずSOCKSインバウンドを127.0.0.1:10808だけで待ち受けるようにします。curl --proxy socks5h://127.0.0.1:10808 https://example.com/で接続を確認し、ログで選択されたアウトバウンドも確認してください。ウェブページが開いただけでプロキシ経由と判断しないでください。

  5. 1台の端末で通信を取り込む

    明示的なプロキシと実際のノードを確認してから、テスト端末1台に透過ルールを適用します。DNS、TCP、UDP、IPv6を個別にテストし、管理画面に引き続きアクセスできることを確認してから、送信元アドレスの範囲を広げてください。

以下は設定の構造を理解するための、ローカル直接接続の基本例です。接続可能なプロキシノードを含む完成済み設定ではありません。リモートサーバーのパラメーターも透過インバウンドもなく、SOCKSで受け付けた通信はすべてfreedomで直接接続します。現在のサービスで使っている設定がある場合は、そのまま上書きしないでください。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "local-socks",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true
      }
    }
  ],
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    }
  ]
}

サブスクリプションURLもXrayの起動引数ではありません。クライアント用サブスクリプションにはBase64エンコードされた共有リンクが含まれる場合や、特定の管理ツール向けの形式が使われる場合があります。設定ファイルとして読み込めるのは、Xrayの設定構造に準拠したJSONだけです。サブスクリプション管理ツールを使う場合は、生成されるアウトバウンド、タグ、ルールファイルを確認し、手動編集した内容が更新処理で上書きされないようにしてください。

5. DNSとルーティング:2つの経路をあわせて確認

適切なルーティングには、「接続先」と「ドメイン名の名前解決方法」の両方を把握する必要があります。Xrayのrouting.rulesは上から順に評価され、ルール内のoutboundTagは実在するアウトバウンドのタグを指定しなければなりません。一致するルールがない場合、通常は最初のアウトバウンドが使われます。ドメインルール、IPルール、デフォルトのアウトバウンドの順番は、期待する動作を先に明確にしてから設定に反映してください。

53
一般的なDNS通信で使用するTCPまたはUDPポート
10808
この記事のローカルSOCKSテスト用ポート
12345
透過インバウンド用に設定できるポート例

それぞれ用途が異なるため、これらのポートは相互に置き換えられません。12345は設定例として使いやすい値であり、自動的に有効になるシステムのデフォルトポートではありません。ファイアウォールの転送先とXrayの待ち受けポートを一致させてください。認証のないSOCKSポートをインターネットに公開しないでください。LANからアクセスさせる場合も、待ち受けアドレスとファイアウォールで接続元を制限してください。

まとめ:同じドメインでDNSとアウトバウンドのログを照合

まずテスト用ドメインに対してnslookup example.com 192.168.10.2を実行します。バイパスルーターがDNSサービスを提供していることが前提です。その後、そのドメインへアクセスし、選択されたアウトバウンドを確認してください。名前解決の成功で確認できるのはDNS経路だけです。意図した経路で振り分けられたかどうかは、アウトバウンドのログで確認します。

VLESSノードを使う場合、接続先アドレス、ポート、ユーザーID、トランスポート方式、安全性の設定はサーバー側と一致させる必要があります。ルーターへ導入しても条件は変わりません。VMessとVLESSはプロキシプロトコル、TCPやWebSocketなどはトランスポート関連の設定です。プロトコル名だけから機器のスループットを判断することはできません。各項目の意味はルーティング設定リファレンスと用語集をご覧ください。

6. よくあるトラブル:症状から原因を絞り込む

トラブル対応時は、バイパスルーターを経由しない管理用端末を1台確保してください。まず元のゲートウェイとバイパスルーターのゲートウェイで結果を比較し、DNS、Xrayのログ、ファイアウォールのカウンターを確認します。MTU、プロトコル、DNS、ルーティングルールを同時に変更すると、原因を特定しにくくなります。

ゲートウェイをバイパスルーターに変えたら、すべてのサイトに接続できない

転送設定と上流経路を確認する

まず端末からバイパスルーターの管理アドレスへアクセスし、次にバイパスルーター上でip routeを実行してデフォルトルートを確認します。sysctl net.ipv4.ip_forwardでIPv4転送の有効状態を調べ、ファイアウォールの転送チェーンも確認してください。デフォルトルートや転送設定に誤りがある場合、ノードを変更しても解決しません。接続を復旧するには、まず端末のゲートウェイをメインルーターに戻してください。

ウェブは見られるのに、音声通話やゲームがつながらない

UDPの経路を段階的に確認する

通信を取り込むルールがTCPだけを対象にしていないか確認し、透過インバウンド、プロキシのアウトバウンド、サーバーが必要なUDP転送に対応しているかも調べてください。HTTPリクエストの成功だけではUDPが正常とは判断できません。TCPをREDIRECTで取り込んでいる場合も、同じルールでUDPが処理されると思わないでください。適切な方式を選び、個別にテストする必要があります。

サービスは起動中なのに、通信を取り込んだ記録がない

待ち受けポートとルールの適用状況を確認する

ss -lnptuで実際の待ち受けポートを調べ、nft list rulesetで送信元サブネット、インターフェース、ポートの設定が一致しているか確認します。ルールにカウンターを設定している場合は、テスト接続で値が増えるか見てください。サービスが稼働中でも、端末の通信がその機器を経由していることや、ポリシールーティングでパケットが透過インバウンドへ渡されたことの証明にはなりません。

再起動後に動かない、または速度測定のたびにログが増え続ける

設定の永続化とログの保存先を確認する

サービスが起動時に自動起動すること、ファイアウォールとポリシールーティングがファームウェアの対応する方法で永続化されていることを確認してください。端末で一時的に実行しただけでは不十分です。トラブル対応後は詳細ログを適切なレベルに戻し、ログローテーションを設定します。容量の小さいフラッシュストレージにアクセスログを長期間、大量に保存するのは避けてください。ルールの更新に失敗した場合は、先に既存のデータを消さず、前回の利用可能なデータを残してください。

7. 導入後の確認:1台からネットワーク全体へ広げる

各端末にクライアントを入れずに利用するには、対象端末の通信が設定したゲートウェイを通り、DNS、IPv4、IPv6の方針も一致している必要があります。独立したネットワーク、手動ルーティング、独自の暗号化DNSを使う端末は同じ経路を通らない場合があるため、端末の種類ごとに確認してください。

ノードの利用可否をまだ確認できていない場合は、先にデスクトップ版v2rayNまたはAndroid版v2rayNGで端末単体の動作を確認すると、ノードの問題とゲートウェイの問題を切り分けやすくなります。v2rayNGはXrayコア、v2flyNGはV2Flyコアを使用するため、各コアの機能や設定形式を別々に確認してください。端末単体での確認後、接続パラメーターとルーティング方針をルーター環境へ移行します。クライアントのデータディレクトリ全体をそのままコピーしないでください。

プラットフォーム別クライアントのダウンロード