ハンドシェイクのカウンターは更新され、インターフェースはアドレスを保持し、相手側への ping はどこにも届かない。この組み合わせが人を混乱させるのは、ハンドシェイクが成功しているとトンネルの準備ができた証拠に見えるからです。そうではなく、トンネルは完全にネゴシエートされていても、そこへ通信を向けるルートが存在しないことがあり、これは二つの別個の状態が担う二つの別個の仕事です。修正はどちらが欠けているかで完全に決まるので、最初の手順はそれを見極めることです。

wg-quick は頼まれなくても両方を実行します。NetworkManager の組み込み WireGuard サポートも既定でピアのルートをインストールするため、容疑者は無効化されたオプション、別のルーティングテーブル、または何か別の経路で取り込まれた設定に絞られます。

ルートを追う前にトンネルを確認する

wg show はインターフェース、ピア、エンドポイント、最後のハンドシェイクからの経過を表示し、ip addr show はアドレスが存在することを確認します。最近のハンドシェイクは鍵、エンドポイント、UDP 経路が機能していることを意味します。壊れているものはその下流、つまりルーティング、フィルタリング、名前解決のいずれかにあります。

次に、仮想の宛先ではなく実際の宛先でカーネルがどうするかを ip route get 10.42.7.9 で尋ねます。答えは出力インターフェースと、パケットが持つ送信元アドレスを示します。物理アダプターを示す場合、ハンドシェイクがどれほど健全に見えてもパケットがトンネルに入ることはありません。

AllowedIPs はフィルターでありルートの一覧でもある

AllowedIPs のプレフィックスは二つの役割を担います。どのピアが外向きの宛先を運ぶかを選び、受信パケットの送信元アドレスを検証します。これが暗号鍵ルーティングの境界であり、wg-quick ではルートの自動インストールも駆動し、この追加の振る舞いこそが、同じ設定がターミナルでは動きデスクトップクライアントでは動かない理由です。

この記事の背景にある事例では、プロファイルは組み込みサポートではなくサードパーティのプラグイン経由で取り込まれ、インターフェースはプレフィックスのルートなしで立ち上がりました。テーブルを一覧すればすぐに分かります:ip route show にはインターフェースアドレスの接続ルートだけがあり、遠隔の範囲のためのものは何もありません。

ピアのルートが有効になっているかを尋ねる

何かを変更する前に、nmcli -f wireguard.peer-routes,ipv4.route-table connection show work-wg で設定を読みます。peer-routes が no を示す場合、サポートされる修復は nmcli connection modify work-wg wireguard.peer-routes yes で、その後に再接続します。代わりに静的ルートを追加すると次の有効化まで機能し、その後は静かに消えます。その消失が手がかりであり、毎朝謎として戻ってくるルートはプロファイルがインストールしているものではありません。

オプションがすでに有効なら、ip route show table all | grep 10 でプレフィックスが別のテーブルに住んでいるか確認します。メインでないテーブルのルートは欠けているのではなく、メインテーブルだけを見る検索から見えないだけです。重複したエントリを上に積むのではなく、ポリシールーティングを直してください。

プレフィックスは稼働中のシステムではなく接続に追加する

接続エディターでは、WireGuard のページがピアとその AllowedIPs を持ち、IPv4 のページが追加のルートを持ちます。そこで追加したルートはプロファイルに属するため、再接続を越えて残ります。コマンドラインでの同等は、空のゲートウェイ形式で接続にルートを付け加え、変更を適用するために接続を下げて上げ直すことです。

必要なホストを覆う最も狭いプレフィックスを選んでください。プロバイダーの例の /8 をコピーすると、たまたまその中にあるローカルの範囲を飲み込むことがあり、その結果の障害は広すぎるルートではなく壊れたトンネルのように見えます。

分割トンネリングはプレフィックスの一覧が決める

分割トンネルのスイッチはなく、プレフィックスの一覧が決定です。オフィスの LAN 用に一つの範囲、ラボのネットワーク用にもう一つを持つピアは、まさにその宛先だけをトンネル経由で送り、それ以外はそのままにします。単一のホストには /32 が必要で、二つの拠点で重なる範囲は誰かがサブネットを採番し直すまでホストのプレフィックスが必要です。

トンネル経由で何も送らないという選択は、同じ決定を極限まで押し進めるもので、最小限の一覧はリンクを上げたままにし、通常の通信はいつもの経路をたどります。意図を書き留めておかないと、次の読者は短い一覧を手抜きとみなし、親切心から拡張してしまいます。

ルートテーブルの所有者は一人

wg-quick と NetworkManager はどちらもインターフェースのルートを所有していると考えます。wg-quick 用に書かれた設定を取り込み、さらに wg-quick サービスも起動すると、どちらが最後に動いたかで挙動が変わる重複または競合したエントリが生まれます。所有者を一人に決めて他方を外し、NetworkManager が接続を管理しているなら、そのインターフェースの wg-quick ユニットを無効にし、同じデバイスに二つ目のプロファイルを決して追加しないでください。

分割が宛先ではなく物理アダプターに従う必要があるなら、ポリシールーティングに移ったことになり、ポリシールーティングにも単一の作者が必要です。ip route get を繰り返し、そのうえで遠隔のプレフィックス内のホストに、選んだ送信元アドレスを表示する何かで到達して確認します。プロファイルがどちらかを持っているなら、IPv6 と DNS を別々に確認してください。

関連記事