Tun
TUN モードは仮想ネットワークカードを作成してシステム全体のトラフィックを引き受けます。クライアントソフトのプロキシ設定に対応している必要がなく、現時点で最も推奨されるグローバルプロキシ方式です。ここではトップレベルの tun フィールドの設定を説明します。
listeners 内でも tun を設定できますが、それは上級者向けの書き方です。通常のユーザーはトップレベル設定の tun フィールド、つまり本ページで説明する内容を直接使用してください。
設定例
tun: enable: true stack: mixed auto-route: true auto-redirect: true auto-detect-interface: true dns-hijack: - any:53 - tcp://any:53 device: utun0 mtu: 9000 strict-route: true
コアフィールド
enable必須TUN モードを有効化します。
stackデフォルト gvisorプロトコルスタック。system/gvisor/mixed から選択可能。互換性の問題がなければ mixed を推奨します:TCP は system スタック(より安定し、負荷も低い)、UDP は gvisor スタックを使用し、通常最も良い体験が得られます。システムファイアウォールを有効にしている場合、system/mixed スタックを使うにはコアプログラムを手動で許可する必要があります。
deviceオプションTUN ネットワークカードの名前を指定します。macOS では utun で始まる名前のみ使用可能です。
auto-routeオプショングローバルルーティングを自動設定し、システムのトラフィックを自動的に TUN ネットワークカードに流します。ほとんどの場合有効にする必要があります。
auto-redirectLinux のみiptables/nftables を自動設定して TCP 接続をリダイレクトします。auto-route が有効になっている必要があり、主にルーター環境で使用します。
auto-detect-interfaceオプショントラフィックの出口ネットワークカードを自動選択します。デバイスに複数の出口が同時に接続されている場合(例:Wi-Fi と有線 LAN を同時に接続)は、自動検出ではなく出口ネットワークカードを手動で指定することを推奨します。
dns-hijackオプションマッチした DNS リクエストをコア内蔵の DNS モジュールに導入します。デフォルトの書き方はプロトコルなし、つまり udp:// です。macOS/Windows は LAN 宛の DNS リクエストを自動ハイジャックできません。Android で「プライベート DNS」を有効にしている場合も自動ハイジャックできません。
strict-routeオプションauto-route をベースに、より厳格なルーティングルールを適用してアドレス漏洩を防ぎます。これは Android で DNS ハイジャックが正常に機能するための前提条件でもあります。Windows では VirtualBox などの一部のアプリが正常に動作しなくなる場合があります。
mtu / gso / gso-max-sizeオプションmtu は最大転送単位で、通常変更は不要です。gso(Linux のみ)は Generic Segmentation Offload を有効にしてパフォーマンスを向上させ、gso-max-size はデータブロックの最大長を設定します。
ルーティング範囲とフィルター
| フィールド | 説明 |
|---|---|
route-address / route-exclude-address | auto-route を有効にする際に、デフォルトルートの代わりにカスタムのネットワーク範囲をルーティング / カスタムのネットワーク範囲を除外します。通常は設定不要です |
route-address-set / route-exclude-address-set | 指定したルールセット内の宛先 IP CIDR をファイアウォールに追加してルーティング/除外を行います。Linux + nftables のみ対応し、auto-route+auto-redirect が必要です |
include-interface / exclude-interface | ルーティング対象のネットワークインターフェースを制限します。両者は互いに排他的で同時に設定できません |
include-uid / exclude-uid(および range 版) | Linux のユーザー UID によって TUN でルーティングされるトラフィックを制限/除外します。Linux のみ対応し、auto-route が必要です |
include-android-user | ルーティング対象の Android ユーザーを制限します(オーナー 0 / マルチユーザー 10 / マルチアプリ 999)。Android のみ対応 |
include-package / exclude-package | Android のアプリパッケージ名によって TUN でルーティングされるトラフィックを制限/除外します |
endpoint-independent-nat | エンドポイント非依存の NAT を有効にします。パフォーマンスが多少低下する可能性があるため、不要な場合は有効化を推奨しません |
udp-timeout | UDP NAT の有効期限(単位:秒)。デフォルト 300(5分) |
この他にも「旧書式」のフィールド(inet4-route-address など)がありますが、これらは今後廃止される予定です。新しい設定では上記の新しいフィールド名を直接使用することを推奨します。