設定リファレンス

V2Ray 設定ファイルの構造とパラメータ解説

JSONのトップレベル構造から、inboundsoutboundsroutingdnspolicyを順に分解します。各項目で通信の流れを説明し、パラメータの入力方法と組み合わせて使える設定例を紹介します。

JSON構造 入出力 ルーティング DNSとポリシー

クライアントのインストール、サブスクリプションのインポート、初回接続だけが目的なら、まずクイックスタートガイドを読むのが近道です。本ページは、設定の出所を理解したい場合や、ローカル待ち受け、ルール追加、起動エラーの確認が必要な場合に適しています。v2rayN、v2rayNG、v2flyNGでは、GUIが大部分の設定を自動生成しますが、各項目を理解しておくと、クライアントの選択が最終的に何を変更したのか判断しやすくなります。

デスクトップでは v2rayN の利用を推奨します。インストール先はクライアント入手ページにまとめています。本記事の例では V2Ray と Xrayでよく使われる設定形式を扱いますが、拡張項目の対応範囲はコアによって異なります。編集前に使用中のコアを確認し、元の設定をコピーしておきましょう。特定コア専用のパラメータを別の環境へそのまま移すのは避けてください。

01 / JSON STRUCTURE

設定ファイルの構造を把握する

まずはトップレベルのオブジェクトを通信の方向で理解する

V2RayとXrayの設定ファイルは通常、1つのJSONオブジェクトで構成されます。最初に覚えるべきなのは項目数ではなく、通信の流れです。アプリケーションがローカルの入力待ち受けに接続し、コアがルーティングルールを読み取り、出力を選択して宛先へ接続します。DNSはドメイン名をアドレスに解決し、policyはセッションのタイムアウトや統計などの動作ポリシーを、logはログの出力先と記録レベルを決めます。

inboundsoutboundsが配列になっているのは、同じインスタンスで複数のローカルポートを待ち受けたり、複数の出口を用意したりできるためです。配列内の各オブジェクトには通常、tagで名前を付け、ルーティングルールからそのタグを参照します。タグはインスタンス内部だけで使う識別子で、リモートへ送信されることはありません。名前は自由に決められますが、短く安定していて用途が分かるものにします。例:socks-inproxydirectblock

読みやすい設定の並びは、ログ、DNS、入力、出力、ルーティング、ポリシーの順です。JSON自体は順序を要求しませんが、並びを固定するとトラブル対処の時間を短縮できます。起動に失敗したときはファイルの先頭から確認でき、2つの設定を比較する際も変更箇所を見つけやすくなります。GUIクライアントが生成する順序は異なる場合がありますが、階層と項目が有効なら、オブジェクトキーの順序で実行結果が変わることはありません。

{
  "log": {
    "loglevel": "warning"
  },
  "dns": {},
  "inbounds": [],
  "outbounds": [],
  "routing": {},
  "policy": {}
}

JSON構文と設定の意味は分けて確認する

設定をJSONとして解析できるのは、括弧、引用符、カンマ、データ型が構文上正しいことを示すだけで、使用中のコアがすべての項目を受け入れるとは限りません。たとえばポートを文字列で書くと、JSONとしては正しくても、その項目が要求する整数形式には合いません。出力タグの表記揺れも、ルーティングで参照されるまで発覚しないことがあります。確認は2段階で行い、まずJSONを解析できることを確認し、次にコアのログで未知の項目、型エラー、タグ不足、プロトコル設定不足のメッセージを確認します。

標準JSONではコメントを記述できず、オブジェクトや配列の最後に余分なカンマを置くこともできません。サンプルをコピーするときは特に注意してください。ドキュメントでは説明のため断片を示すことがありますが、断片は正しい親オブジェクトに入れて初めて有効です。たとえばroutingオブジェクトだけをコピーする場合は、トップレベルの"routing"の値として配置し、ファイル末尾へ直接貼り付けないでください。文字列は二重引用符、真偽値はtrueまたはfalseで記述し、引用符で囲みません。

項目 データ形式 主な役割 確認ポイント
log オブジェクト アクセスログ、エラーログ、記録レベルを制御 パスの権限、ログレベルが低すぎないか
inbounds 配列 ブラウザ、システム、LAN機器からの接続を受け付ける 待ち受けアドレス、ポートの競合、プロトコル種別
outbounds 配列 プロキシ、ダイレクト接続、ブロックなどの出口を定義 サーバーパラメータ、タグ、トランスポート設定
routing オブジェクト ドメイン、IP、ポート、入力タグに基づいて出口を選択 ルールの順序、タグ参照、名前解決ポリシー
dns オブジェクト 名前解決サーバー、静的マッピング、問い合わせ条件を定義 問い合わせ経路、ドメイン照合、フォールバック動作
policy オブジェクト セッションのタイムアウトや通信統計などの動作ポリシーを制御 ポリシー階層、統計スイッチ、統計モジュールとの連携

変更前に戻せる基準を作る

調整を始める前に、現在の設定を変更せず一度正常に起動し、使用中のローカルポート、システムプロキシのモード、コア名を記録します。次に設定ファイルをコピーし、用途が分かる名前を付けます。変更は一度に1つの論理単位だけにします。たとえばダイレクト接続の出力を追加して検証し、その後でルーティングルールを追加します。複数箇所を同時に変更すると早く見えても、起動失敗の原因が構文、タグ、プロトコルパラメータのどれか判断しにくくなります。

GUIクライアントは、サブスクリプション更新、ノード切り替え、コア再起動の際に実行用設定を再生成することがあります。一時ファイルを直接編集すると、変更が長く残らない場合があります。v2rayNでは、クライアントが提供するカスタム設定、ルーティング設定、高度なオプションを優先してください。Androidクライアントでは、現在の設定がサブスクリプション由来か手動設定かを先に確認します。用語の違いを確認したい場合は用語集も参照し、「入力」「システムプロキシ」「ルーティングモード」を同じ機能として扱わないようにしましょう。

02 / INBOUNDS

inbounds 入力設定

待ち受けアドレスが接続可能な範囲を決める

入力は、端末上のアプリケーションがコアへ通信を渡す入口です。ローカル入口として最も一般的なのはSOCKSとHTTPプロキシです。listenは待ち受けるネットワークアドレス、portはポート、protocolはアプリケーションが使うプロキシプロトコルを指定します。端末内だけで使う場合、待ち受けアドレスは127.0.0.1を推奨します。このアドレスはローカル接続だけを受け付けるため、ブラウザ、システムプロキシ、同じ端末上の他のプログラムから利用でき、LAN上の別の機器から直接接続されることはありません。

デスクトップクライアントを同じLAN上のスマートフォン、テレビ、別のPCから使う場合、入力は通常0.0.0.0または具体的なLANアドレスで待ち受けます。その場合はシステムファイアウォール、ネットワーク種別、アクセス制御も同時に設定する必要があり、待ち受けアドレスを変えるだけでは不十分です。共有する機器には、コアを実行しているPCのLANアドレスと入力ポートを指定し、127.0.0.1は指定しません。詳しくはv2rayNでLAN接続を許可する設定方法を参照してください。

{
  "inbounds": [
    {
      "tag": "socks-in",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls"
        ]
      }
    },
    {
      "tag": "http-in",
      "listen": "127.0.0.1",
      "port": 10809,
      "protocol": "http",
      "settings": {}
    }
  ]
}

SOCKS、HTTP、透過的な取り込みの違い

SOCKS入力は、SOCKSプロキシに対応したアプリに適しており、TCPを処理でき、設定によってはUDPにも対応します。HTTP入力は、HTTP CONNECTまたは通常のHTTPプロキシを使うプログラム向けです。どちらも、アプリまたはシステムプロキシが対応するポートを明示的に指定する必要があります。アプリでHTTPプロキシを設定した場合、SOCKSポートを指定することはできません。ポートが合っていてもプロトコル種別を間違えると、接続直後に切断される、ブラウザにプロキシ応答エラーが表示される、ログに解釈できないハンドシェイクデータが出るといった症状になります。

TUNモードは通常のローカルプロキシとは異なります。仮想ネットワークインターフェースで、より広い範囲のシステム通信を受け取り、クライアント側でルーティングテーブル、DNSの取り込み、権限も設定する必要があります。TUN設定をSOCKS入力を1つ追加するだけのものと考えないでください。v2rayNはGUIのTUN項目に応じて実行パラメータを構成するため、通常はクライアント画面から有効化してログを確認します。他の環境のTUN設定全体を現在の設定へ直接貼り付けるのは避けてください。通常のシステムプロキシでブラウザや一般的なデスクトップアプリを利用できるなら、「より多くをカバーする」ために複数の取り込み方式を同時に有効にする必要はありません。

sniffingがドメインルーティングに役立つ仕組み

sniffingは、接続中のプロトコルの特徴から宛先ドメインを復元します。アプリによっては、先に自分でドメインを解決し、IPアドレスだけをプロキシへ渡します。routingがドメインルールだけを持つ場合、コアはIPしか見られず、ドメインで照合できません。嗅探を有効にすると、HTTPリクエストのホスト情報やTLSハンドシェイクのサーバー名から、ルーティングモジュールがドメインを取得できる場合があります。例のdestOverrideは、認識したHTTPまたはTLSの宛先で元の宛先アドレスを上書きし、後続ルールの判定に使えるようにします。

嗅探はDNSの代わりではなく、すべての接続でドメインを復元できるわけでもありません。認識可能なホスト情報がないプロトコルではIPしか取得できず、暗号化ハンドシェイクやアプリの動作も結果に影響します。ルーティングが一致しない場合は、アクセスログにドメインとIPのどちらが記録されているかを確認し、domainStrategyの調整、IPルールの追加、嗅探設定の確認を判断します。ログを見ずに同じドメイン条件やIP条件を繰り返し追加すると、ルールの保守が難しくなります。

ポート、認証、タグの設定原則

同じアドレスのポートを2つのプロセスが同時に使用することはできず、2つの入力で同じアドレスとポートを待ち受けることもできません。クライアント起動直後にアドレス使用中と表示されたら、まず重複起動したインスタンスを終了し、他のプロキシツールや古いコアプロセスを確認します。ポートを適当に変更するだけでは不十分です。システムプロキシ、ブラウザ拡張、LAN機器側のポートも合わせて変更する必要があります。混乱を減らすため、SOCKSとHTTPのポートを隣接させる方法はありますが、固定の数字だけでプロトコル種別を判断しないでください。

auth: "noauth"は、ループバックアドレスだけで待ち受けるローカルSOCKS入力に適しています。LANアドレスで待ち受ける場合は、クライアントの対応状況を確認し、認証とファイアウォールの制限を組み合わせ、信頼できるネットワークからだけアクセスできるようにします。タグは入力ごとに固有の名前を付けると、inboundTagで入口ごとに異なるルーティングを設定できます。たとえば端末内の通信は通常の振り分け、LAN共有の入口は一部ポートを制限します。タグを変更したら、routing内の参照をファイル全体で確認し、古い名前が残らないようにします。

パラメータ 基本的な考え方 よくあるミス
listen 接続元の範囲を決める 共有時もループバックアドレスのままにする、または端末内だけの利用なのに全NICへ公開する
port アプリがコアへ接続するローカルポート 他のプログラムと競合する、変更後にシステムプロキシを更新していない
protocol 入力時のハンドシェイク方式を定義する アプリはHTTP、実際の接続先はSOCKSポートになっている
tag ルーティングルールから参照する内部名 名前を変更した後もroutingが古いタグを使っている
sniffing ドメインの復元を補助し、振り分けに利用する 有効にすればすべてのIPをドメインへ変換できると思い込む

03 / OUTBOUNDS

outbounds 出力設定

プロキシ、ダイレクト接続、ブロックで基本の出口を構成する

出力は、コアが通信をどこへ送るかを定義します。完全な設定には通常、プロキシ出口とダイレクト接続出口を少なくとも1つずつ用意し、特定の接続を明確に拒否したい場合にブロック出口を追加します。プロキシ出口にはサーバーアドレス、ポート、ユーザー識別子、暗号化やトランスポート設定を記述します。ダイレクト接続出口ではコアが宛先へ直接接続し、ブロック出口ではルールに一致した接続を明示的に終了します。routingは接続を確立する機能ではなく、現在のリクエストを出力タグへ渡す役割です。

出力配列の順序には注意が必要です。どのルーティングルールにも一致しない接続は、一般的な実装では最初の出力をデフォルトとして使います。そのため、プロキシを先に置くかダイレクト接続を先に置くかで、ルールから漏れた通信の行き先が変わります。重要な方針をデフォルト順だけで表現せず、重要な通信には明示的なルールを書いてください。同時に、条件漏れが起きても意図に反しないよう、先頭の出力を全体の想定に合わせます。

{
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "server.example.com",
            "port": 443,
            "users": [
              {
                "id": "11111111-2222-4333-8444-555555555555",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "serverName": "server.example.com"
        }
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {
        "response": {
          "type": "none"
        }
      }
    }
  ]
}

プロトコルの識別情報とトランスポート設定は分けて確認する

プロキシ出力を調べるときは、項目を2つのグループに分けます。1つ目はサーバーアドレス、ポート、ユーザーID、プロトコル固有の追加設定などの識別情報です。2つ目はstreamSettings内のTCP、WebSocket、gRPC、TLS、REALITYなどのトランスポート設定です。それぞれが正しくても組み合わせが一致しなければ接続できません。たとえばリモート側がWebSocketなのにローカル側がTCP、サーバー証明書の名前とserverNameが違う、ユーザー識別子は正しいが別サービスのポートを指定している、といったケースです。

サブスクリプションをインポートする利点の1つは、サービス提供元のプロトコル、トランスポート、セキュリティ層、ホストパラメータをまとめてクライアントへ登録できることです。手動で移行するときはアドレスとポートだけをコピーしないでください。「ノードのテストは成功するのにウェブページが開かない」場合も、出力の識別情報がすべて正しいとすぐに判断しないでください。クライアントのテスト方法が経路の一部しか確認していない可能性があり、実際のアプリではDNS、UDP、ルーティング、システムプロキシも関係します。ログから、失敗が名前解決、リモート接続、ハンドシェイク、宛先アクセスのどの段階で起きたかを確認します。

ダイレクト接続もDNSとネットワーク環境の影響を受ける

freedomは現在の端末から宛先へ直接接続します。設定全体を迂回するわけではなく、入力とroutingを通過した後、コアが直接接続を実行します。ダイレクト接続に失敗したら、ローカルネットワーク、システムDNS、宛先アドレス、出力のドメインポリシーを確認します。ドメインでdirectを選ぶ場合、接続前の名前解決結果やアドレス族が後続の動作に影響します。IPv6レコードは存在していても実際の接続条件が整っていない環境では、しばらく待った後にタイムアウトすることがあります。

freedom出力には適切なドメイン解決ポリシーを設定できますが、対応する値と動作はコアによって異なる場合があります。明確な必要性がなければ、まずクライアントが生成したデフォルト値を維持します。振り分けが原因か確認したいときは、全ルールを削除するのではなく、対象を限定したルールを一時的に作りdirectへ送ります。検証後は元に戻し、一時的なテストで他のアプリの通信経路を変えないようにします。

プロキシチェーンと複数出口はシンプルな構成から始める

1つの設定に複数のプロキシ出力を含め、ルーティングタグで選択できます。また、1つの出口が別の出口を経由して基盤接続を確立する構成も可能です。明確な経路要件がある環境には適していますが、タグの依存関係が急速に増えます。設定前に「入力 → ルーティング → 第1出口 → 基盤出口」の順序を図にし、相互参照がないことを確認します。proxy-aがproxy-bに依存し、proxy-bがproxy-aへ戻ると、有効な経路を構成できません。

複数ノードの選択は通常、v2rayN、v2rayNG、v2flyNGの設定管理機能で行います。クライアントがノードを切り替えると、使用中の出力を変更したり、実行用設定を再生成したりします。生成ファイルへサーバーオブジェクトを大量に追加しても、クライアントの切り替え処理と連携できるとは限りません。デスクトップではv2rayNにノード管理を任せ、安定したカスタムルーティングやDNS設定だけをクライアント対応の拡張箇所へ追加するほうが、ノード一覧全体を手作業で保守するより戻しやすくなります。

タグの例 プロトコル 役割 確認ポイント
proxy ノードで実際に使われるプロトコル リモートサーバーへ接続し、宛先通信を転送する アドレス、ポート、識別情報、トランスポート、セキュリティ層を一式で一致させる
direct freedom 端末のネットワークから宛先へ直接アクセスする ローカルネットワーク、DNS、アドレス族、宛先への到達性
block blackhole 一致した通信を終了する ルール範囲が広すぎないか、必要な接続を誤って止めていないか

04 / ROUTING

routing ルーティングルール

ルールは上から照合され、最初に一致した結果が適用される

ルーティングモジュールは、接続先のドメイン、IP、ポート、ネットワーク種別、プロトコルの特徴、入力タグに基づいて出力を選びます。最も重要なのはルールの順序です。通常は上から順に確認し、1つ一致すると、そのルールで指定されたoutboundTagを使い、後続ルールは確認しません。したがって、具体的なルールを前に、広いルールを後ろに置きます。「すべてのTCP通信をプロキシへ送る」を1行目に置くと、後ろのドメイン別directルールは適用されません。

ルールを設計するときは、まずデフォルト方針を書き出し、次に例外を並べます。デフォルト出口がプロキシなら、ブロック条件と明確なdirect条件を先に置き、その他をデフォルトのプロキシへ流します。デフォルト出口がdirectなら、プロキシが必要な宛先を先に並べます。出力配列の順序、複雑なドメイン一覧、複数のフォールバックルールを同じ方針の表現として同時に使わないでください。分かりやすいデフォルト動作を1つ選び、ルールは例外だけを記述すると保守しやすくなります。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "protocol": [
          "bittorrent"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": [
          "domain:intranet.example.com",
          "full:printer.example.net"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  }
}

ドメイン照合方式がルールの範囲を決める

ドメイン条件には、完全一致、ドメインとサブドメインへの一致、キーワード一致、あらかじめ用意されたドメイン集合などがあります。full:printer.example.netは完全なホスト名だけに一致し、単一サービスの範囲を明確にしたい場合に適しています。domain:example.comは通常、そのドメインとサブドメインを対象にし、関連ホストのまとまりに適しています。接頭辞のない文字列は文脈によって解釈が変わる場合があるため、保守時は照合方式を明示して本来の意図を残します。

キーワード一致は範囲が広く、短い文字列が無関係なドメインに誤って一致することがあります。名前の一部で分類する必要が本当にある場合を除き、fullまたはdomainを優先してください。ルールに一致しない場合は、まずコアが見ている宛先がドメインか確認します。アプリがすでにドメインをIPへ解決し、入力の嗅探でもドメインを復元できないなら、どれだけ正確なドメインルールを作っても適用されません。アクセスログを確認し、適切なsniffingを有効にするか、既知のアドレス範囲にIP条件を追加します。

domainStrategyがドメインルールとIPルールをつなぐ

domainStrategyは、IPルールとの照合のためにドメインを解決する条件を制御します。AsIsは受け取った宛先形式をそのまま判定する方針で、ルーティング照合のためだけにドメインをIPへ変換しません。IPIfNonMatchは通常、ドメインルールに一致しなかった後で名前解決し、IPルールを試します。ほかのポリシーはより積極的に解決する場合があります。積極的なポリシーほどドメイン通信をIP分類へ回しやすくなりますが、DNSの動作とルーティング結果の結び付きも強くなります。

ポリシーを選ぶ前に、現在のルールが主にドメイン依存かIP依存かを確認します。大部分が明確なドメインルールで、一部のネットワークだけ補足判定するなら、IPIfNonMatchは理解しやすい選択です。すべてのドメインを先にアドレス分類するなら、DNS設定と想定する出口を一致させる必要があります。解決サーバー、キャッシュ、アドレス族が違うと同じドメインでも結果が変わり、ルーティングも変化します。domainStrategyを変更したら、ドメインルール、IPルール、未一致の宛先をそれぞれテストし、1つのページを開くだけで判断しないでください。

IP、ポート、ネットワーク、入力タグは組み合わせて使える

IP条件には、単一アドレス、CIDRネットワーク、コアが対応する定義済み集合を指定できます。プライベートアドレスは通常directにし、ルーター、プリンター、LANサービスへのアクセスをリモートへ送らないようにします。ポート条件は5380,443のように対象サービスを絞るのに適しており、範囲も表現できます。ネットワーク条件ではtcpudp、または両方がよく使われます。異なる項目を同じルールに置くと通常はすべてを満たす必要があり、同じ項目の配列内の複数値はどれか1つに一致すれば適用されます。

inboundTagは接続元の区別に適しています。たとえばsocks-inは通常の振り分け、lan-inは指定した出口だけを許可する設定にできます。接続元ごとに複数のコアを起動する必要はありません。設定時は入力タグが実際に存在することを確認し、接続元の制限をルールの前方に置き、広い宛先ルールに先に一致しないようにします。ポートやプロトコルをブロックする場合も範囲を絞ってください。広すぎると、アプリのトップページは開くのに再生、ログイン、同期ができないといった症状になります。

ログでルールを検証し、推測に頼らない

ルーティングを検証する最も有効な方法は、目的が明確なテスト項目を用意することです。directになる内部ドメイン、プロキシへ送る対象、ブロックされる条件を1つずつ用意し、アクセスログの出力タグを確認します。ログに宛先は表示されても想定したタグが出ない場合は、一時的にログの詳細度を上げ、テスト後に控えめなレベルへ戻します。ルールを変更したらコアを再起動または再読み込みし、クライアントが古い実行設定を使い続けていないことを確認します。

ルールが増えたら、設定の外部に各グループの保守メモを残し、「なぜ必要か」を記録します。ドメイン一覧だけを残すより価値があります。標準JSONにはコメントを書けないため、説明は別の文書で管理します。サブスクリプション更新は通常ノードとプロキシ出力に影響するもので、手動ルーティングまで上書きするべきではありません。更新のたびにルールが消えるなら、一時生成ファイルを編集している可能性があるため、クライアントのルーティング設定入口を使います。

05 / DNS

dns 名前解決設定

まずシステム解決とコア解決を区別する

DNS設定で問題が起きやすいのは、1台の端末に複数の名前解決経路が存在するためです。アプリが先にシステムDNSを呼び出してIPを取得し、そのIPをプロキシへ渡す場合があります。コアがルーティング判定のためにドメインを能動的に解決することもあります。TUN環境では、クライアントがシステムの問い合わせを取り込む場合もあります。設定ファイルのdnsは主にコア自身の解決方法を定義するもので、すべてのアプリの問い合わせがここを通ることを保証しません。問題を判断する前に、ログでコアへ入っているのがドメインか、すでに解決済みのIPかを確認します。

アプリがドメインをそのままSOCKSまたはHTTPプロキシへ渡す場合、コアが自分のDNS設定で処理できる可能性があります。アプリがローカルで先に解決すると、その接続でroutingが見るのはアドレスだけになり、元の問い合わせにDNS設定が適用されるとは限りません。sniffingは一部の接続からドメインを復元できますが、完全な問い合わせ取り込みの代わりにはなりません。「dnsオブジェクトを記述した」ことと「すべてのプログラムがそのDNSを使う」ことは別です。

{
  "dns": {
    "hosts": {
      "router.home.arpa": "192.168.1.1"
    },
    "servers": [
      {
        "address": "1.1.1.1",
        "domains": [
          "domain:example.com"
        ],
        "skipFallback": true
      },
      "localhost"
    ],
    "queryStrategy": "UseIP"
  }
}

servers配列には順序があり、条件も付けられる

serversには単純なアドレスだけでなく、オブジェクトを使ってサーバーごとにドメイン条件、期待するアドレス範囲、フォールバック動作を追加できます。シンプルな設定なら、安定した解決先を1〜2個から始めれば十分です。サーバーを増やせば信頼性が上がるとは限りません。各サーバーを使う条件が不明確だと、失敗時に実際の問い合わせ先を判断しにくくなります。オブジェクトのdomainsは、指定したドメインをそのサーバーへ優先的に渡すために使い、内部ドメインなど明確な解決元があるサービスに適しています。

skipFallbackは、現在のサーバー条件に一致した問い合わせを後続のフォールバックへ回すかどうかを制御します。有効にする前に、そのサーバーが指定したドメインを確実に解決できることを確認してください。解決できない場合、他の経路を試さなくなる可能性があります。LAN内のホスト名には、ローカルの解決サーバーやhostsの静的マッピングを使うほうが分かりやすいことが多いです。内部名を公共の解決先へ渡しても結果が得られないだけでなく、問題の調査方向がローカルネットワークから外れることがあります。

hostsは安定したマッピング向けで、動的アドレスの管理には向かない

hostsはドメインを固定アドレスへ対応付けたり、少数の別名を定義したりできます。新しいサービスのテスト、LANホスト名の上書き、誤った名前解決の一時回避に便利です。通常の問い合わせより優先されるため、誤記すると接続を継続的に誤った宛先へ送ります。hostsで問題を調べるときは追加項目を記録し、検証後に残すか判断します。数週間後にアドレスが変わっても古い値を固定し続けないようにしてください。

マッピング値のデータ形式はコアの要求に合わせ、ドメインキーも想定された完全な名前で記述します。宛先にIPv4とIPv6の両方がある場合、固定マッピング1つで通常のアドレス選択が変わります。サービス提供元が動的に振り分けるドメインをhostsで長期間固定するのは推奨しません。問い合わせを1回短縮できても、障害時の切り替えやアドレス更新の機能を失う可能性があります。断続的な接続問題では、現在のIPをすぐ固定せず、解決結果と接続ログを比較してください。

queryStrategyがアドレス族の選択に影響する

queryStrategyはIPv4、IPv6、または両方のアドレスを問い合わせる傾向を制御します。具体的な値の対応はコアによって異なる場合があるため、現在のクライアントが使うコアで有効な設定を確認してください。ネットワークが安定したIPv4しか使えないのにIPv6だけを返す設定にすると、宛先へ到達できません。IPv6対応ネットワークでも、すべてのリモート経路で優先利用できるとは限りません。ローカルネットワーク、プロキシサーバーのアドレス、宛先出力の能力を踏まえて選びます。

典型的には、ドメイン解決は速いのに、特定のアドレス族で接続が待ち続け、その後フォールバックまたはタイムアウトします。その場合はAレコードとAAAAレコードを分けて確認し、コアが実際に試した宛先アドレスを観察します。すべてのtimeoutをノード障害と決めつけないでください。問い合わせポリシーの変更で回復した場合も、問題がローカルIPv6ルーティング、リモートサーバーの待ち受け、宛先ネットワーク経路のどこにあるかを確認し、偶然有効だった設定へ恒久的に依存しないようにします。

DNSとroutingを一連の流れとして確認する

domainStrategyがIPルール照合のためにドメイン解決を必要とすると、routingはDNSを呼び出します。その解決問い合わせ自体も、どこかの出力を経由して送られる可能性があります。設計を誤ると循環依存が起きます。ドメインの出口を決めるために問い合わせを開始したのに、その問い合わせの出口が未完了のドメイン分類に依存する状態です。単純な環境ではDNSに複雑なルーティングチェーンを作らないでください。まず基本的な問い合わせを通し、明確なDNSサーバーアドレスに対してdirectまたはプロキシのルールを追加します。

確認は4段階で行えます。1つ目は、アプリが入力へ渡しているのがドメインかIPか。2つ目は、ルーティングポリシーが解決を必要としているか。3つ目は、どのサーバーが問い合わせを処理しているか。4つ目は、その問い合わせ接続がどの出力を経由しているかです。どこか1つでも想定と違えば、ページが開かない、振り分けが誤るといった結果になります。v2rayNのログで問い合わせと接続の段階を確認できます。読み方はV2Rayの実行ログの見方を参照してください。

症状 優先して確認すること 最初にしないこと
ドメインは失敗するが、IPへ直接アクセスすると応答がある 問い合わせサーバー、DNSの出力経路、アプリがシステム解決を使っているか 一度に多数の解決サーバーを追加する
ドメインルールに一致しない 入力がドメインかIPか、sniffing、domainStrategy 同じドメインキーワードを重複して追加する
LANホスト名を解決できない ローカルDNS、hostsマッピング、検索ドメイン LANと無関係な解決先へ任せる
解決は成功するが接続が長時間待機する アドレス族、宛先ルート、出力が実際に試したアドレス 解決速度だけでノードの状態を判断する

06 / POLICY

policy ポリシーと統計

policyは動作を制御し、振り分け方向は決めない

policyはroutingの補助だと思われがちですが、主に接続セッションのタイムアウト、アイドル判定、統計スイッチを制御します。通信をプロキシへ送るかdirectにするかは、routingと出力が決めます。ポリシーは通常、ユーザーレベルごとに整理し、出力のユーザーオブジェクトにあるlevelで対応するレベルを指定できます。特別な設定がなければ、多くの構成はデフォルトレベルを使います。異なるセッション動作が明確に必要な場合だけ、複数レベルを追加してください。

タイムアウトは短ければよいとは限りません。短時間データが流れないからといって、接続が無効になったとは限りません。ロングポーリング、断続的なファイル転送、リモート端末、常時接続アプリではアイドル状態が発生します。アイドル時間を短くしすぎると再接続が頻発し、長すぎると無効な接続の破棄が遅れます。まずクライアントやコアのデフォルト動作を使い、ログとアプリの症状から必要性が確認できた場合だけ調整します。

{
  "policy": {
    "levels": {
      "0": {
        "handshake": 4,
        "connIdle": 300,
        "uplinkOnly": 2,
        "downlinkOnly": 5,
        "statsUserUplink": false,
        "statsUserDownlink": false
      }
    },
    "system": {
      "statsInboundUplink": false,
      "statsInboundDownlink": false,
      "statsOutboundUplink": false,
      "statsOutboundDownlink": false
    }
  }
}

handshakeとconnIdleは異なる段階を処理する

handshakeは接続確立段階で待機できる時間を制限します。まだハンドシェイクが完了していない接続が対象で、ページ全体の読み込み時間とは異なります。短すぎるとネットワークの揺らぎやリモートの応答遅延で早期に失敗し、長すぎると明らかに確立できない接続が長くリソースを占有します。ハンドシェイクがタイムアウトしたら、数値をすぐ大きくするのではなく、サーバーアドレス、ポート、トランスポート、ローカルネットワークを確認します。

connIdleはデータの活動がない接続をどれだけ保持するかに関係します。アイドル接続が閉じられると通常は再接続されますが、アプリによってはセッション切断として表示されます。毎回ほぼ同じアイドル時間で切断されるかを比較してください。一定ならポリシーを確認し、切断時刻が不規則でログにリモートリセットがあるなら、経路またはサーバー側の動作である可能性が高くなります。

uplinkOnlydownlinkOnlyは、一方向だけデータが流れる接続を処理するための項目です。アップロードやダウンロードの速度制限ではなく、アプリへ帯域幅を割り当てる機能でもありません。既存の接続動作が分からない状態で、最適化のために短くするのは避けてください。GUIクライアントが生成するデフォルトポリシーは通常の利用に適しており、長時間接続、リソース制約、明確なサービス要件がある場合だけ個別に評価します。

統計スイッチは収集の許可だけを担当する

statsUserUplinkstatsUserDownlink、system配下の入力・出力統計項目は、該当方向の通信情報をコアが記録することを許可します。これらの真偽値を有効にしても、目に見えるグラフや画面上の数値が自動的に表示されるとは限りません。対応する統計モジュールと照会方法も必要です。クライアントがデータを利用しないなら、すべての統計項目を有効にしても不要な状態管理が増えるだけです。

統計項目を接続成功の判定に使わないでください。ある方向のバイト数が増えたことは、その範囲を通過するデータがあったことを示すだけで、宛先の内容が完全に返ったことや、想定どおりにルーティングされたことを単独で証明しません。接続品質はアクセス結果とエラーログを合わせて判断します。クライアント画面の通信統計は、システムAPI、コアAPI、クライアント独自のカウンターから取得される場合があり、policyの各スイッチと完全に同じ基準とは限りません。

複数のユーザーレベルには明確な対応付けが必要

複数のユーザーオブジェクトを含む場合、ユーザーごとに異なるlevelを指定し、policyのlevelsで対応するポリシーを定義できます。JSONではレベルのキーは文字列として記述し、例として"0""1"があります。ユーザーが未定義のレベルを参照すると、実装によってデフォルト動作が使われたり、問題が報告されたりします。保守時はユーザーレベルとポリシーレベルを一緒に確認し、片方だけをコピーしないようにします。

通常のクライアント出力に複雑なレベル体系は必要ありません。ノードサブスクリプションのユーザー識別情報は主にリモートプロトコル認証に使われ、各ノードにローカルのpolicyレベルを作る必要があるという意味ではありません。入力サービスとして運用し、セッションポリシーを分ける必要がある場合に複数レベルがよく使われます。本ページはクライアント設定を中心に扱うため、デフォルトの単一レベルを維持し、入力の安全性、出力パラメータ、ルーティングの可読性を優先してください。

ログレベルとポリシーを組み合わせて調べる

ポリシーの問題は「接続確立後に切断される」という形で現れることが多く、ログの時系列が必要です。通常運用ではwarningなど控えめなレベルを使い、調査中だけ詳細度を上げて開始時刻と再現手順を記録します。ログの保存先に書き込み権限がなければ、コアが起動できない、診断情報を残せないといった問題が起こります。GUIクライアントは通常ログの場所を処理するため、独立したコアを手動設定する場合にファイルパスを重点的に確認します。

再現後は、接続開始、最後のデータ活動、接続終了の3つの時刻を比較します。終了がポリシーの閾値直後なら、1項目だけ調整して再テストします。ログにリモート切断や基盤接続の失敗が明記されているなら、主な原因はpolicyではありません。調査が終わったら適切なログレベルへ戻し、テストのためだけに有効にした統計項目を削除して、実行設定を簡潔に保ちます。

項目 制御する段階 担当しないこと
handshake 接続ハンドシェイクの待機 ウェブページ全体の読み込み時間
connIdle データ活動がない接続の保持 通信速度の制限
uplinkOnly 上りだけが活動した後の接続処理 アップロード帯域の割り当て
downlinkOnly 下りだけが活動した後の接続処理 ダウンロード帯域の割り当て
statsInboundUplink 入力上り統計の記録を許可 可視化レポートの自動生成

07 / ASSEMBLY

完全な設定の組み立てと起動前チェック

まず最小限の循環を作り、機能を段階的に追加する

設定を組み立てるときは、まず最小限の循環を作るのが最も確実です。端末内だけで待ち受けるSOCKS入力、有効なプロキシ出力、direct出力、方向が明確な少数のルーティングルールを用意します。最小構成で起動と接続を確認してから、HTTP入力、DNS条件、ブロックルール、policyを追加します。追加範囲を毎回限定すれば、問題が起きても直前の有効な設定へすぐ戻せます。

完全なファイル内のすべてのタグは、参照関係が成立していなければなりません。routingのoutboundTagはoutbounds内に存在し、inboundTagはinboundsのタグと一致する必要があります。ユーザーのlevelがpolicyに関連付く場合は、対応するポリシーも必要です。タグが大文字と小文字を区別する場合、Proxyproxyは別名として扱われます。入力ミスを減らすため、小文字、数字、ハイフンだけの名前を推奨します。

{
  "log": {
    "loglevel": "warning"
  },
  "dns": {
    "servers": [
      "localhost"
    ],
    "queryStrategy": "UseIP"
  },
  "inbounds": [
    {
      "tag": "socks-in",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true
      },
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http",
          "tls"
        ]
      }
    }
  ],
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "server.example.com",
            "port": 443,
            "users": [
              {
                "id": "11111111-2222-4333-8444-555555555555",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "serverName": "server.example.com"
        }
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {}
    }
  ],
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "network": "tcp,udp",
        "outboundTag": "proxy"
      }
    ]
  },
  "policy": {
    "levels": {
      "0": {
        "handshake": 4,
        "connIdle": 300
      }
    }
  }
}

サンプルが完全でも、ノードのパラメータをそのまま使えるとは限らない

上記のJSONは階層が完全で、各部分の組み合わせを理解するために使えます。ただし、サーバードメインとユーザーIDはドキュメント用の例です。実際の設定では、自分のサブスクリプションまたはサービス情報にある完全なパラメータへ置き換え、streamSettingsをリモート側と一致させます。実際のノードがサンプルと異なるプロトコルやトランスポートを使う場合は、プロキシ出力オブジェクト全体を置き換え、プロトコル名だけを変更しないでください。プロトコルごとに内部構造が異なるため、文字列1つの変更では互換性のない項目が残ります。

v2rayN、v2rayNG、v2flyNGを使う場合は、まずノードをインポートし、クライアントが生成した出力構造を確認してから、必要なルーティング方針をクライアント対応の場所へ適用します。この記事のサンプルを使うために、クライアントが正しく生成したノードパラメータを捨てないでください。設定リファレンスの目的は構造の理解とトラブル対処であり、すべての接続情報を空のファイルから手書きすることではありません。

構文チェックとコア設定チェックを実行する

第1段階では、JSON対応エディタで括弧、引用符、カンマを確認します。第2段階では、実際のコアに設定を読み込ませます。Xrayを単独で実行する場合、一般的なテスト方法はxray run -test -config config.jsonです。V2Rayを単独で実行する場合は、実行ファイルが対応するコマンドに応じてv2ray test -c config.jsonを使います。コマンド名と引数は、クライアントのラッパーや実行ファイルの場所によって異なるため、端末上のコアのヘルプ出力を基準にしてください。

GUIクライアントの利用者は、通常、一時設定を端末から手動でテストする必要はありません。コアを再起動してクライアントのログを確認します。起動前にクライアントがファイルを再生成する場合は、提供されている編集画面から変更を保存してください。未知の項目が報告されたら、まずV2FlyとXrayのどちらのコアを使っているかを確認し、その項目がトップレベル、入力設定、プロトコル設定、streamSettingsのどこに属するかを調べます。正しい項目でも階層を間違えれば無効になります。

通信の流れに沿って起動後の4段階を確認する

設定を読み込めても、実際の通信経路を確認する必要があります。第1段階は入力です。ポートが待ち受け中で、アプリのプロキシ種別とポートが一致しているか確認します。第2段階はルーティングです。対象へアクセスし、ログでproxyかdirectかを確認します。第3段階は出力です。リモート接続とハンドシェイクが完了したかを確認します。第4段階は宛先応答です。ローカルプロキシへの接続だけでなく、アプリが実際の内容を受け取ったことを確認します。

第1段階で失敗するなら、ポート競合と待ち受けアドレスを確認します。第2段階なら、ルールの順序、宛先形式、タグを確認します。第3段階なら、ノード、ネットワーク、トランスポートパラメータを確認します。前半3段階が正常で第4段階だけ異常なら、DNS、宛先サービス、アプリ自身の動作を調べます。この分割方法はノードを何度も交換するより効果的で、ローカルポートの問題をリモート障害と誤認するのも防げます。

クライアントが設定を上書きする場合に変更を残す方法

v2rayNは、サーバー切り替え、サブスクリプション更新、プロキシモード変更の後に、コアの実行設定を再構成することがあります。長期的に残したい内容は、実行ディレクトリ内の一時JSONではなく、クライアントが対応するカスタムルーティング、DNS、カスタム設定機能へ保存します。変更前に現在の設定をエクスポートまたは記録し、更新後にカスタムルールが統合されているか確認します。初回インストールと設定ファイルの場所については、v2rayNの初回インストールと初期設定の手順を参照してください。

Androidクライアントでも、単一ノードの設定、サブスクリプション項目、実行設定が別々に保存される場合があります。ノードを編集して変わるのはそのノードのプロトコルパラメータだけで、全体のルーティングまで変わるとは限りません。現在編集しているのがノード、ルーティング、アプリ設定のどれかを確認してからテストします。v2rayNGではXrayコアの経路を優先し、v2flyNGはv2flyコアの選択肢とします。拡張項目に差がある場合、完全なJSONをそのまま相互コピーしないでください。

08 / TROUBLESHOOTING

設定エラーと接続障害のトラブル対処

起動直後に失敗する場合:最初の明確なエラーを確認する

コアの起動に失敗すると、ログの後半に連鎖的なメッセージが複数出ることがあります。本当の原因は通常、最初に現れる明確なエラーの近くにあります。よくある種類は、JSON解析失敗、未知の項目、データ型の不一致、ポート競合、アクセスできないファイルパス、routingから参照されたタグの不存在です。まず最初のエラーを処理して再起動し、後続メッセージを根拠に複数箇所を同時に変更しないでください。後続エラーは最初の失敗の結果である可能性があります。

JSON解析エラーには通常、行番号や文字位置が示されます。その行の前後で、カンマの不足、余分な末尾カンマ、閉じていない引用符、全角記号の混入を確認します。エラー位置はパーサーが問題を発見した場所であり、本当の不足は前の行にある場合もあります。ファイルが長い場合は、最近追加したオブジェクト全体を一時的に削除し、基本設定が戻ったことを確認してから、断片を段階的に戻します。

コアは動作しているがアプリがローカルプロキシへ接続できない

この場合、まずリモートノードを調べないでください。アプリのプロキシアドレスが127.0.0.1か、ポートが入力設定と一致するか、プロキシ種別が合っているかを確認します。システムプロキシを使う場合は、クライアントで対応するモードが有効か確認します。コアを起動しただけでシステム設定が自動変更されるとは限りません。ブラウザ拡張、アプリ内プロキシ、システムプロキシが同時に存在すると、二重プロキシや古いポートへの接続が起きるため、テスト時は経路を1つに整理します。

Windows、macOS、Linuxのデスクトップ環境では、古いプロセスがポートを使用していることがあります。クライアントを終了した後、コアプロセスも終了しているか確認してから再起動します。入力ポートを変更した場合は、システムプロキシも更新します。Androidクライアントはシステムのネットワークインターフェースを通じてアプリ通信を取り込むため、デスクトップのローカルSOCKSポートとは確認点が異なります。まずクライアントが接続状態か、ログでコアが正常に起動したかを確認します。

ローカルプロキシには接続できるが、リモートハンドシェイクに失敗する

ログに接続拒否、ハンドシェイク失敗、リモートによる早期切断が出たら、「アドレスとポート → ユーザー識別情報 → プロトコル → トランスポート → セキュリティ層」の順に確認します。ドメインを解決できても、ポートが正しいサービスを指しているとは限りません。TCP接続が確立しても、TLS名とアプリケーション層のトランスポートが一致するとは限りません。サブスクリプションのノードはまず通常の更新を実行し、古いパラメータを使っていないことを確認します。手動ノードは元の設定情報と項目ごとに比較します。

システム時刻が大きくずれていると、時刻に依存する安全な接続へ影響します。まず端末の時刻を正常に戻してください。ネットワークを切り替えて問題が消えるなら、プロトコルだけでなく現在のネットワーク、DNS、アドレス族も確認します。ノードのタイムアウトはノードのタイムアウトを確認する手順に沿って段階的に調べ、ローカルネットワークやシステム時刻を飛ばして出力オブジェクトだけを何度も変更しないようにします。

一部のウェブサイトやアプリだけ失敗する

一部の宛先だけ失敗する場合、基本的な入力と少なくとも1つの出力は使える可能性が高く、次にルーティング、DNS、UDP、宛先の特徴を確認します。成功した対象と失敗した対象がそれぞれどの出力を使ったかを比較し、失敗対象がコアへ入った時点でドメインかIPかを確認します。誤ったルールでドメインがdirectへ送られていれば、ノードが正常でもその接続にプロキシは使われません。domainStrategyが別のアドレスを解決した場合も、想定したドメインルールと結果が異なることがあります。

アプリのログイン、音声、動画、同期機能は、異なるドメイン、ポート、ネットワーク種別を使う場合があります。トップページが開くのは、一部のリクエストが成功したことを示すだけです。トップページの結果だけでアプリ全体のドメインを広いルールへまとめないでください。再現時は、失敗した機能に対応するログの宛先を記録し、必要な条件を1つずつ追加します。UDPを使う場合は、SOCKS入力がUDPを許可しているか、プロキシプロトコルとサーバーが経路に対応しているか、routingがUDPを正しい出口へ送っているかを確認します。

ルールは正しそうなのに常に一致しない

まずルールの位置を確認します。前に、より広いdomain、IP、network、port条件がありませんか。次に宛先形式を確認します。ログに完全なドメイン、サブドメイン、IP、sniffingで復元された名前のどれが表示されていますか。さらに照合接頭辞が目的に合っているかを見ます。fullはすべてのサブドメインを自動的に含まず、キーワードは広すぎる可能性があります。最後にoutboundTagの表記と実行中のファイルを確認し、バックアップを編集していないか、クライアントが別の設定を読み込んでいないかを調べます。

特定のルールを検証するには、そのルールを一時的に前方へ移し、対象を明確なドメイン1つに絞ります。テスト後、ログの出力タグを確認します。それでも一致しないなら、宛先形式または設定未読み込みが原因です。前方へ移すと一致するなら、元の位置より前のルールが通信を先に取得しています。原因を特定したら順序を整理し、新しいルールをすべて最上部へ積み上げる運用は避けてください。具体的なルール同士が徐々に上書きし合うためです。

接続がしばらくすると切断される

まず切断が一定の時間間隔で起きるか判断します。毎回connIdleや一方向接続ポリシーの時間に近いならpolicyを確認します。時刻が不規則なら、リモートリセット、ネットワーク切り替え、端末のスリープ、アドレス変更を調べます。ノートPCが別のネットワークへ切り替わった後に古い接続が無効になるのは自然な動作で、クライアントは通常リンクを再確立する必要があります。スリープ復帰後の1回の切断を、すぐノードパラメータの問題と決めつけないでください。

ログのtimeout、context canceled、connection resetは、発生段階と原因が異なります。「エラー」と表示されたからといって同じ対処をしないでください。timeoutは直前の記録と合わせ、DNS、ダイヤル、ハンドシェイクのどこかを判断します。context canceledは上位リクエストが意図的に終了した可能性があり、resetはどちらか一方が接続をリセットしたことを示します。まず時系列で最初の異常を探し、後続のエラーが単なるキャンセルや後処理かを判断します。

再現可能なトラブル対処記録を作る

複雑な設定では、クライアント名、使用中のコア系統、入力ポート、デフォルト出力、最近変更した範囲、再現手順を短く記録します。ノードの機密情報を保存する必要はなく、構造が分かれば十分です。テストごとに「変更内容、予想、実際のログ」を書くと、2〜3回の試行で大部分の推測を排除できます。複数の項目を記録せずに切り替え続けると、偶然直った後も原因を特定できません。

復旧が必要な場合は、まず最小限の実用設定へ戻し、DNS、振り分け、ポリシーを1つずつ追加します。最小構成でも失敗するなら、クライアントのインストール、ローカルネットワーク、ノード自体に問題がある可能性が高いため、クイックスタートの手順に戻ってインポートと接続を確認します。カスタムルールだけが失敗するなら、検証済みのノード出力を残し、routingと宛先ログに集中して確認します。クライアントを再インストールする必要はありません。

障害レイヤー 典型的な症状 優先する対応
JSONと項目 コアが起動しない 最初の解析エラーまたは項目エラーに対処し、最近の変更を確認する
入力 アプリがローカルプロキシへ接続できない アドレス、ポート、プロトコル種別、ポート使用状況を確認する
ルーティング 宛先が誤った出口へ進む、またはルールに一致しない 宛先形式、ルール順序、実際の出力タグを確認する
DNS ドメインに失敗する、または解決結果が異常 問い合わせ経路、サーバー条件、アドレス族を確認する
出力 リモートに拒否される、ハンドシェイク失敗、タイムアウト アドレス、識別情報、プロトコル、トランスポート、セキュリティ層を一式で確認する
ポリシーとセッション 一定のアイドル時間後に接続が切断される policyの閾値とログの時系列を照合する
v2rayN をダウンロード