プロキシプロトコル · Clash ドキュメント

WireGuard

現在の Mihomo フィールドに基づく Clash 系 WireGuard アウトバウンド設定です。ローカルインターフェース、Peer、Allowed IPs、MTU、リモート DNS を解説します。

  • private-key
  • public-key
  • allowed-ips
  • MTU
  • DNS
プロキシプロトコル

WireGuard アウトバウンドの動作

現在のコアにおける WireGuard は、レイヤー三のトンネル型アウトバウンドです。クライアントは内部に WireGuard ネットワークデバイスを作成し、そのノードに一致した TCP または UDP 通信をトンネルへ送ります。オペレーティングシステムのデフォルトルート全体を引き継ぐものではありません。

設定には、ローカルインターフェースとリモート Peer の両方を記述する必要があります。ローカルアドレスと秘密鍵はクライアントインターフェースに属し、サーバーのエンドポイント、公開鍵、Allowed IPs は Peer に属します。この二組のフィールドは入れ替えられません。

単一 Peer の最小構成

Peer が一つだけの場合は簡略記法を使い、エンドポイントと Peer の鍵をノードのトップレベルへ直接指定できます。ipipv6 少なくとも一つを指定してください。指定しないと、クライアントはローカルトンネルのアドレスを作成できません。

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 を使用すると、トップレベルの serverportpublic-keypre-shared-key は無視されます。一方、トップレベルの reserved は、reserved を個別に指定していない Peer のフォールバック値として使われます。

WireGuard の複数 Peer フィールド階層
階層フィールド要件
ノードのトップレベルprivate-keyipipv6ローカル WireGuard インターフェースを記述します
ノードのトップレベルpeers一つ以上のリモート Peer を含みます
ノードのトップレベルreservedreserved を個別に指定していない各 Peer のフォールバック値になります
各 Peerserverportpublic-keyリモートのエンドポイントと識別情報を記述します
各 Peerallowed-ips空にできません。複数の Peer ではネットワーク範囲を重複させないでください
各 Peerpre-shared-keyreservedサーバー側で明示的に必要とされる場合にだけ指定します

鍵、ルーティング、接続性のフィールド

鍵と値の形式は、ノードの初期化時に検証されます。ネットワークへ接続できてもトンネル内に通信が流れない場合は、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 を確認してください。
YAML
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