ルーターと旁路ルーターでV2Rayコアを直接動かす:OpenWrt導入の要点とトラフィック制御

OpenWrtのメインルーターや旁路ルーターでV2Rayコアを直接動かす方法を整理。設定ファイルの配置、透過プロキシによるトラフィック制御、DNS処理とよくある問題を解説し、家庭内ネットワークに適した構成か判断できます。

この記事の概要

この記事は、OpenWrtを運用でき、テレビやゲーム機などLAN内の機器に共通のプロキシルールを適用したいユーザー向けです。メインルーターと旁路ルーターの選び方、V2Rayプロセスの導入、REDIRECTとTPROXY、DNS転送、ループ回避、障害切り分けを扱います。読み終える頃には、手元の機器が適しているか判断でき、段階的に検証できる導入手順も把握できます。

まずメインルーターか旁路ルーターかを判断する

ルーターでV2Rayを動かす際の要点は、実行ファイルをコピーすることではなく、LAN機器のデフォルトゲートウェイ、DNS、ファイアウォールを誰が担当するかを決めることです。メインルーター構成では、1台のOpenWrtが接続、NAT、DHCP、DNS、透過プロキシをまとめて担います。経路は短い一方、設定ミスが家庭内ネットワーク全体に影響します。旁路ルーター構成では既存のメインルーターを残し、指定した機器だけゲートウェイとDNSをOpenWrtへ向けます。変更範囲が小さく、初回検証に向いています。

旁路ルーターだからといって、自動的に「経路外で監視できる」わけではありません。端末のデフォルトゲートウェイが元のメインルーターのままで、OpenWrtが実際の転送経路に入っていなければ、制御対象のパケットは見えません。最も明確な方法は、テスト端末で旁路ルーターのアドレスを手動設定することです。たとえばメインルーターが192.168.1.1、旁路ルーターが192.168.1.2なら、テスト端末のゲートウェイとDNSをともに192.168.1.2へ設定します。検証後は、メインルーターのDHCPで機器ごとに配布できます。

OpenWrtメインルーター

すべての転送トラフィックが自然に本機を通過し、DHCP、DNS、ファイアウォールルールを一元管理できます。設定を更新する前に、管理画面またはコンソールへ直接入れる復旧経路を確保してください。

適するケース:ファイアウォールに慣れており、ネットワーク全体に統一ポリシーが必要

OpenWrt旁路ルーター

おすすめ

まず1台のパソコンまたは一部の機器だけを旁路ルーターのゲートウェイに変更します。問題が全端末へ直ちに広がらないため、TCP、UDP、DNSを段階的に検証できます。

適するケース:初回導入、機器単位での移行が必要

端末ごとのクライアント

Windowsではv2rayN、Androidでは必要なコアに応じてv2rayNGまたはv2flyNGを選べます。家庭内ネットワークのゲートウェイ構成は変わりません。

適するケース:機器が少なく、テレビなどの端末をプロキシ対象にしない

ハードウェア、システム、ディレクトリの準備

コアはルーターのCPUアーキテクチャに一致している必要があります。代表的なアーキテクチャにはarm64armv7mipsx86_64があります。機器のブランドだけで判断しないでください。ubus call system boardでシステム情報を確認し、uname -mでカーネルが報告するアーキテクチャを確かめます。ファイルのアップロード後にnot foundと表示される場合、実際にファイルが存在していても、まずアーキテクチャと動的リンクの依存関係を確認します。

プログラム、設定、実行データは分けて管理するのがおすすめです。実行ファイルは/usr/bin/v2ray、メイン設定は/etc/v2ray/config.jsonに置き、ログは必要に応じてシステムログまたは容量に余裕のある永続ディレクトリへ出力します。容量の限られたフラッシュへ詳細なアクセスログを継続的に書き込まないでください。トラブルシューティング時だけログレベルを上げ、安定後はwarningまたはerrorに戻します。

23.05+
この記事のfw4構成に適したOpenWrtシリーズ
256 MB
単一コアの軽量構成で推奨されるメモリの目安
12345
この記事の透過プロキシ例で使用するポート
1053
この記事のローカルDNS転送例で使用するポート
確認項目 最低限の確認方法 満たさない場合の症状
CPUアーキテクチャ uname -m プログラムが起動できない、または形式エラーが表示される
使用可能メモリ free -m ルールの読み込みに失敗する、プロセスがシステムによって終了される
システム時刻 date 証明書の有効期間と合わずTLS接続に失敗する
ポートの競合 ss -lntup インバウンド待受に失敗する、DNSをバインドできない
永続ストレージ df -h アップグレードやログ出力後に空き容量が不足する

結論:まずリソースに余裕を確保し、その後で全体を制御する

コアを1つ起動できるだけで、ハードウェアがネットワーク全体の転送に十分とは限りません。使用可能メモリが常に十数MBしか残らない、または通常のダウンロード時にCPU使用率が高止まりする機器では、既存のメインルーターを残し、1台の端末から旁路ルーター経由で検証してください。DHCPクライアント全体をいきなり移行するのは避けます。

設定ファイル、サービス、起動順序

設定はまずコア内蔵のテストコマンドで検証し、その後サービスマネージャーから起動します。V2Ray 5系のビルドによってコマンド引数が少し異なる場合がありますが、一般的な確認方法はv2ray test -c /etc/v2ray/config.jsonです。現在のビルドがこの引数を認識しない場合は、先にv2ray helpを実行して実際のコマンドを確認してください。構文エラーのままサービスを繰り返し再起動しないでください。

透過プロキシのインバウンドには通常dokodemo-doorを使用し、LANから転送されたTCPとUDPを待ち受けます。以下ではインバウンドの重要部分だけを示します。アウトバウンドのサーバーアドレス、ユーザー識別子、トランスポート層、TLSパラメータは実際のノードに合わせて設定してください。例示のポート12345は、ファイアウォールルールとも一致させる必要があります。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "transparent-in",
      "listen": "0.0.0.0",
      "port": 12345,
      "protocol": "dokodemo-door",
      "settings": {
        "network": "tcp,udp",
        "followRedirect": true
      },
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      },
      "streamSettings": {
        "sockopt": {
          "tproxy": "tproxy"
        }
      }
    }
  ]
}
  1. アーキテクチャを確認

    端末でuname -mを実行し、アーキテクチャに一致するV2Rayコアをダウンロードします。OpenWrtに十分な永続ストレージと使用可能メモリがあることも確認してください。

  2. ファイルを配置

    プログラムを/usr/bin/v2rayに、設定を/etc/v2ray/config.jsonに置き、続けてchmod 755 /usr/bin/v2rayを実行します。

  3. 設定を確認

    まず設定テストコマンドを実行し、次にフォアグラウンドで一度起動してログを確認します。ノードのアウトバウンド接続が成功したことを確認してから、起動時サービスと異常時の再起動ポリシーを設定します。

  4. 転送を許可

    OpenWrtの「ネットワーク」→「ファイアウォール」でLANゾーンの転送を確認します。旁路ルーターでは、カーネルの転送パラメータが有効になっていることも確認してください。

  5. 1台で試す

    テスト用パソコン1台だけのゲートウェイとDNSを旁路ルーターのアドレスに変更し、ウェブページ、動画、ソフトウェアのダウンロード、UDPを必要とするアプリを個別に検証します。

  6. 段階的に移行

    安定して動作してから、「ネットワーク」→「インターフェース」→「LAN」→「DHCPサーバー」でゲートウェイとDNSの配布を調整します。一度に全機器へ影響を与えないようにしてください。

REDIRECTとTPROXYによる2つの制御方式

REDIRECTは、ルーターを通過するTCP接続を本機の待受ポートへリダイレクトする方式です。理解しやすく、ウェブ閲覧や一般的なTCPアプリの初期検証に適していますが、UDPの透過プロキシを完全には処理できません。家庭内機器でリアルタイム通信、一部のDNS通信、UDP依存アプリを扱う場合、最終的には通常TPROXYが必要です。

TPROXYは元の宛先アドレスを直接書き換えず、パケットにマークを付け、ポリシールーティングでマーク済みの通信を本機の透過プロキシポートへ送ります。典型的な組み合わせは、ファイアウォールマーク0x1、ポリシールーティングテーブル100、待受ポート12345です。V2Rayのアウトバウンドソケットにも独立したマークを設定し、制御チェーンから除外する必要があります。そうしないと、コアが発信した接続が再び自身へ入り、ループが発生します。

方式 TCP UDP 導入の複雑さ 推奨用途
REDIRECT 対応 完全な構成には不向き 低い まずTCP経路と振り分けルールを検証
TPROXY 対応 対応 高い LAN内のTCPとUDPを長期的に制御

OpenWrt 23.05以降のシリーズでは、標準でfw4とnftablesが使われます。古い解説にあるiptablesコマンドをnftablesのルールへそのまま混在させると、コマンドは成功してもパケットが想定したチェーンに入らないことがあります。導入時は「ネットワーク」→「ファイアウォール」で現在のバックエンドを確認し、nft list rulesetで実際に読み込まれた結果を確認してください。

ポリシールーティングの基本関係は以下のとおりです。コマンドはマークとルーティングテーブルの対応を示すためのものです。実運用ではインターフェース再接続後も復元できるスクリプトに組み込み、同名のルールがすでに存在しないか確認してください。

ip rule add fwmark 0x1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
ip rule show
ip route show table 100

結論:まずREDIRECTで検証し、その後TPROXYへ切り替える

第1段階ではテスト端末1台のTCPだけを制御し、ノード、ルーティング、ループ除外が正しいかをすばやく確認します。第2段階でUDP、ポリシールーティング、DNSを追加すれば、すべてのルールを一度に読み込むより切り分け範囲を大幅に抑えられます。

DNSは通信経路と一緒に設計する

透過プロキシが動作しても、DNSが正しいとは限りません。端末がメインルーターや通信事業者のDNSへ直接問い合わせ続けると、ドメインの振り分けと実際の接続経路が一致しない場合があります。旁路ルーターの検証で、ゲートウェイは192.168.1.2に変更したのにDNSが192.168.1.1のままという状態は、最も一般的な部分的制御です。

V2Ray設定のdnsオブジェクトは、コア内部の名前解決や関連するルーティング処理に使われます。ただし、設定に記述しただけでLAN向けDNSサービスになるわけではありません。LAN内機器に利用させるには、DNSインバウンドを用意するか、dnsmasqからローカルポートへルール転送します。この記事の例では、dnsmasqがLANの53ポートを待ち受け、コアで処理する必要がある問い合わせを127.0.0.1:1053へ転送します。

  1. 入口を統一

    dnsmasqのLAN向けUDP/TCP53待受を維持し、端末のDNSにはOpenWrtのLANアドレスを統一して指定します。機器が旁路ルーターを迂回して問い合わせないようにしてください。

  2. 転送を設定

    V2RayにローカルDNSインバウンドを設定します。たとえば127.0.0.1:1053で待ち受け、他の名前解決サービスがこのポートを使用していないことを確認します。

  3. 経路を分ける

    ローカルドメインとLANホスト名は引き続きdnsmasqで処理し、プロキシ経由の名前解決が必要な問い合わせだけをコアへ転送します。家庭内機器の名前解決が機能しなくなるのを防げます。

  4. ループを遮断

    ファイアウォールルールで、ルーターから上流DNSへ向かう接続を除外します。53ポートの問い合わせが透過プロキシルールに繰り返し捕捉されるのを防ぎます。

  5. 項目ごとに検証

    まずルーター上で名前解決を実行し、次にテスト端末から同じドメインを問い合わせます。最後に、コアのログとnftablesのカウンターが同時に変化しているか確認します。

よくある障害は経路を区切って調べる

ルーターの透過プロキシには、端末、ゲートウェイ、ファイアウォール、ポリシールーティング、V2Rayインバウンド、V2Rayアウトバウンド、DNSなど複数の要素があります。最も効果的な切り分けは、ノードを頻繁に変更することではなく、端末からアウトバウンドまでを順に確認することです。まず端末からOpenWrtの管理アドレスへアクセスできるか、次にデフォルトゲートウェイとDNSを確認し、その後12345が待ち受けているか、ルールカウンターが増えているか、コアのログに該当する接続が出ているかを確認します。

ルールカウンターが常にゼロなら、問題は通常、端末のゲートウェイ設定またはファイアウォールの制御範囲にあります。カウンターは増えるのにコアのログが出ない場合は、ポリシールーティングと待受アドレスを確認します。コアがリクエストを受け取っても外部へ接続できない場合は、システム時刻、ノードパラメータ、ルーティングルール、プロキシサーバーIPの除外設定を確認してください。問題の区間を特定してから変更すれば、複数の変数が同時に変わるのを避けられます。

旁路ルーター経由でインターネットには接続できるのに、プロキシ効果がまったくない?

まず端末でデフォルトゲートウェイを確認し、旁路ルーターのアドレスになっていることを確かめます。次にnft list rulesetを実行して制御チェーンのカウンターを確認します。カウントがゼロならV2Ray設定を先に変更せず、DHCP配布、固定ゲートウェイ、LAN転送を確認してください。

ウェブページは開くのに、一部のアプリだけ接続に失敗し続ける?

まず、失敗するアプリがUDPに依存しているかを確認します。REDIRECTだけを設定した場合、TCPのウェブページが正常でもUDPが制御されているとは限りません。TPROXYへ切り替える前に、fwmark 0x1、ルーティングテーブル10012345でのUDP待受を確認してください。

ルールを有効にすると、ルーター自身がインターネットに接続できなくなる?

透過プロキシチェーンを一時停止し、ネットワークが復旧してからループ除外を確認します。プロキシサーバーの実IP、ルーターのLANアドレス、ループバックセグメント、コアのアウトバウンドマークが、再び透過プロキシへ入らないようにしてください。

ドメインは開けないのに、IPアドレスへ直接アクセスすると正常?

端末のDNSがまだ元のメインルーターを向いていないか確認し、ss -lntup531053の待受プロセスを確認します。続いてdnsmasqの転送先を確認し、同じ問い合わせが2つのサービス間を循環しないようにします。

再起動するとまた使えなくなる。どこを確認すべき?

V2Rayサービス、nftablesの制御ルール、ip rule、ルーティングテーブル100がそれぞれ復元されているか確認します。ネットワークインターフェースの再接続で一時的なポリシールートが消えることもあるため、ルールはシステムサービスまたはホットプラグ処理で再構築できるようにします。

公開前に行う最小限の受け入れチェックリスト

家庭内ネットワークの受け入れ確認では、復旧できること、問題を特定できること、対象範囲を段階的に広げられることが重要です。設定を変更する前にOpenWrt設定とV2Ray設定をバックアップし、旁路ルーターを通らない管理用機器を1台残し、透過プロキシルールを無効化するコマンドを記録します。これにより、振り分けやDNS設定を誤っても管理画面から復旧できます。

長期運用では必要なログだけを残します。コアをアップグレードする前に、別ポートで新しいプログラムと既存設定の互換性をテストし、その後サービスファイルを置き換えます。設定ファイル、地理ルールデータ、プログラムのバージョンは一組として管理し、プログラム更新後に互換性のない古いフィールドを読み込まないようにしてください。

最終判断:導入する価値は対象機器の範囲で決まる

テレビ、ゲーム機、複数の家庭内機器をまとめて制御したい場合、OpenWrtの透過プロキシなら1台ずつ設定する手間を減らせます。WindowsやAndroidの機器が少数だけなら、v2rayN、v2rayNG、v2flyNGを使うほうが通常は直接的で、個別の切り分けも簡単です。

V2Rayクライアントをダウンロード Windows、macOS、Android、Linux