WireGuard アウトバウンドの動作
現在のコアにおける WireGuard は、レイヤー三のトンネル型アウトバウンドです。クライアントは内部に WireGuard ネットワークデバイスを作成し、そのノードに一致した TCP または UDP 通信をトンネルへ送ります。オペレーティングシステムのデフォルトルート全体を引き継ぐものではありません。
設定には、ローカルインターフェースとリモート Peer の両方を記述する必要があります。ローカルアドレスと秘密鍵はクライアントインターフェースに属し、サーバーのエンドポイント、公開鍵、Allowed IPs は Peer に属します。この二組のフィールドは入れ替えられません。
単一 Peer の最小構成
Peer が一つだけの場合は簡略記法を使い、エンドポイントと Peer の鍵をノードのトップレベルへ直接指定できます。ip と ipv6 少なくとも一つを指定してください。指定しないと、クライアントはローカルトンネルのアドレスを作成できません。
name必須- ノード名です。ポリシーグループやルールから参照されます。
type必須- 固定値
wireguard。 private-key必須- Base64 エンコードされたクライアント秘密鍵です。必ず秘匿してください。
ip条件付きで必須- WireGuard ネットワーク内で使うクライアントの IPv4 アドレスです。
ipv6とのどちらか一方は、少なくとも指定する必要があります。 ipv6条件付きで必須- WireGuard ネットワーク内で使うクライアントの IPv6 アドレスです。IPv6 を使わない場合は省略できます。
server必須- リモート Peer のドメインまたは IP アドレスです。
port必須- リモート Peer の WireGuard ポートです。
public-key必須- Base64 エンコードされたリモート Peer の公開鍵です。
- 単一 Peer のルーティング現在の実装
- では、簡略記法を使うと、ローカルアドレスのファミリーに基づいて自動的に
0.0.0.0/0と::/0ルートが作成され、トップレベルのallowed-ipsは読み取られません。
複数 Peer の完全な記法
複数の Peer が必要な場合は、 peers 配列を使用します。private-key とローカルの ip または ipv6 は引き続きノードのトップレベルに置き、サーバーのエンドポイントと Peer の鍵を各配列要素へ移します。
各 Peer には、空でない allowed-ipsを指定し、ネットワーク範囲を重複させないようにしてください。 peers を使用すると、トップレベルの server、port、public-key と pre-shared-key は無視されます。一方、トップレベルの reserved は、reserved を個別に指定していない Peer のフォールバック値として使われます。
| 階層 | フィールド | 要件 |
|---|---|---|
| ノードのトップレベル | private-key、ip、ipv6 | ローカル WireGuard インターフェースを記述します |
| ノードのトップレベル | peers | 一つ以上のリモート Peer を含みます |
| ノードのトップレベル | reserved | reserved を個別に指定していない各 Peer のフォールバック値になります |
| 各 Peer | server、port、public-key | リモートのエンドポイントと識別情報を記述します |
| 各 Peer | allowed-ips | 空にできません。複数の Peer ではネットワーク範囲を重複させないでください |
| 各 Peer | pre-shared-key、reserved | サーバー側で明示的に必要とされる場合にだけ指定します |
鍵、ルーティング、接続性のフィールド
鍵と値の形式は、ノードの初期化時に検証されます。ネットワークへ接続できてもトンネル内に通信が流れない場合は、Clash ルールを変更する前に、Allowed IPs、MTU、キープアライブを確認してください。
pre-shared-key必要に応じて指定- Base64 エンコードされた追加の事前共有鍵です。対応する Peer と一致させる必要があります。
reserved必要に応じて指定- ちょうど 3 バイトの WireGuard 予約値です。一部の WARP ノードで必要になります。
persistent-keepalive必要に応じて指定- 秒単位で定期的にキープアライブパケットを送信します。NAT 内にあるクライアントでよく使われます。
mtu必要に応じて指定- 内部 WireGuard デバイスの MTU です。未指定時、現在の実装では 1408 を使用します。
udp必要に応じて指定- このノードに一致した UDP アプリ通信が WireGuard アウトバウンドへ入ることを許可します。
dialer-proxy必要に応じて指定- 別のアウトバウンドまたはポリシーグループを経由して WireGuard エンドポイントへ接続します。
リモート DNS と AmneziaWG
WireGuard アウトバウンドでは、トンネルへ入るドメインリクエストに専用リゾルバーを使用できます。AmneziaWG オプションは、サーバー側も同じ拡張を使っている場合にだけ指定します。各フィールドには AmneziaWG のバージョンによる制約もあります。
remote-dns-resolve必要に応じて指定- 次の値に設定すると
trueの場合、現在の WireGuard アウトバウンドをリモート名前解決に使用できます。デフォルトはfalse。 dns条件付きで有効- リモート名前解決に使う DNS サーバーです。次の場合にだけ有効です:
remote-dns-resolve: trueを選択した場合にだけ有効です。 amnezia-wg-option高度な設定- このオブジェクトが存在すると AmneziaWG が有効になります。パラメーターは対応するサーバー設定から取得してください。
標準設定からクライアントフィールドへの対応
標準 WireGuard [Interface] の Address と PrivateKey はトップレベルのアドレスと秘密鍵へ、[Peer] の Endpoint、PublicKey、AllowedIPs は Peer フィールドへ対応します。標準設定の ListenPort はローカル待受ポートです。リモートポートとして誤って指定してはいけないフィールドは port。
以下の二つの鍵は、形式だけが有効な例であり、実際の認証には使用できません。単一 Peer の簡略記法では、トップレベルの allowed-ipsを読み取りません。ルート範囲をカスタマイズする場合は、 peers 配列を使い、各 Peer に allowed-ips を指定してください。
- missing local address が発生した場合に追加する正しい値は
ipまたはipv6。 - 鍵のデコードエラーが発生した場合は、設定ファイルのパスや十六進数のテキストではなく、Base64 鍵をコピーしたことを確認してください。
- 複数 Peer で missing allowed_ips が報告された場合は、各 Peer に空でなく明確なネットワーク範囲の一覧を指定してください。
- ハンドシェイクは成立するのにデータが流れない場合は、接続先の公開鍵、Allowed IPs、NAT、ファイアウォール、MTU を確認してください。
proxies:
- name: wg-node
type: wireguard
private-key: ZXhhbXBsZS1jbGllbnQtcHJpdmF0ZS1rZXktMDAwMDA=
ip: 10.0.0.2
server: 203.0.113.10
port: 51820
public-key: ZXhhbXBsZS1wZWVyLXB1YmxpYy1rZXktMDAwMDAwMDA=
udp: true
mtu: 1408
persistent-keepalive: 25