最新ハンドシェイク欄が空というのは、通常、インターフェースが起動してからハンドシェイクを完了していないことを意味しますが、これは見た目ほど設定の情報を与えてくれません。WireGuard はパケットがインターフェースから出る必要が出るまで沈黙するため、送るものがない待機中の peer はまさにその状態を報告します。鍵を調べる前に、実際に何かが送られたのかを確かめてください。

試験になるのは、peer が運ぶべき宛先への許可されたパケットです。そのステータス画面の他のすべては、活動ではなく意図を表しています。

待機中のインターフェースには報告することがない

WireGuard はハンドシェイクを遅延して行います。トンネルを必要とする最初のパケットが交換を起動し、それまではインターフェースは静かなままです。設定されたものの一度も使われていない peer は、空のハンドシェイク、受信バイトゼロ、前回からの広がり続ける間隔を表示します。この状態は待機中のクライアントにとって健全で、すでに通信が流れていると期待していた場合にだけ気になるものです。転送カウンターも確認してください。送っていないのか、試して失敗したのかを区別できます。

両側でカウンターがゼロのままなら、問題はトンネルの上流にあります。何かを起動するためにインターフェースへ届いたものがありません。

peer が運ぶことを許可されている通信を起こす

ローカルマシンで、peer の許可されたプレフィックス内のアドレスを選び、ルーティングテーブルがそのアドレスをインターフェース経由で送ることを確認します。そのプレフィックスの外にある宛先では、WireGuard がまったく関与しない通常のルーティング要求になります。ping や短い TCP 接続のようにすぐ応答するサービスを使い、試行に目に見える始まりと終わりを持たせます。そのあと画面を見て待つのではなく、ハンドシェイク行を読み直します。

ip route get 10.60.9.5
ping -c 3 -W 2 10.60.9.5
wg show wg0 latest-handshakes
wg show wg0 transfer

ルート照会は ping より重要です。物理インターフェースが示されるなら、パケットはトンネルに入っておらず、空のハンドシェイクは暗号ではなくルーティングの答えです。peer をデバッグする前にルートを直してください。

鍵ペアとエンドポイントを比較する

通信が本当に提示されたら、次は身元の確認です。ローカルの秘密鍵は相手側が認可する公開鍵と対応していなければならず、設定されたリモート公開鍵は意図した peer を指していなければならず、事前共有鍵があるなら両端で一致していなければなりません。base64 鍵の一文字の違いで、設定済みに見えて交換を完了しない peer が生まれます。鍵を作り直すのではなく、プロビジョニング記録と比較してください。新しい鍵は古い鍵を信頼したすべての peer を無効にします。

エンドポイントにも同じ精査が必要です。ホスト名、アドレス、UDP ポート、そしてそこへ到達するために使うアドレスファミリーです。古いアドレスや誤ったポートは、メッセージではなく沈黙を生みます。

外側の UDP 経路を見張る

ハンドシェイクは UDP としてエンドポイントへ向かうので、外側の経路がそれを運ぶ必要があります。以下のコマンドは、リスナーがあるか、ローカルスタックがデータグラムを送信したか、どのエンドポイントが設定されているかを確認します。キャプチャは通信を起こす前にではなく、起こしながら実行します。

ss -lunp | grep 51820
sudo tcpdump -ni eth0 udp port 51820
wg show wg0 endpoints
conntrack -L -p udp | grep 51820

開始だけが写り応答がないキャプチャは、マシンの外を指します。相手側が待ち受けていないか、フィルタされているか、宛先が間違っています。何も写らないキャプチャはパケットが出ていないという意味で、ルートと、関与しているソケットマークへ話を戻します。両端を管理しているなら、一般的なキャプチャではなくサーバー側の狭いキャプチャと試行をタイムスタンプで対応づけます。TCP ポートの試験はここでは何も証明しません。プロトコルは UDP だけだからです。

ハンドシェイクが現れたら、トンネル経由でアプリケーションを試すとよいでしょう。完了した交換が証明するのは身元と到達性であり、使えるスループットや正しい DNS ではありません。変更の前後でステータス出力を保存しておけば、その差分が証拠になります。

関連記事