クライアントは接続済みと報告し、トレイのアイコンも正常に見えるのに、何も読み込まれない。Wi-Fi からケーブルに切り替えた直後、あるいはディストリビューションのアップグレードが終わった直後に始まった。壊れたのはプロファイルではなく、以前のベース接続のために作られた状態のほうだ。カーネルにはまだ、誰も所有していないトンネルデバイスを指す既定ルートが残っているか、リゾルバーが消えたリンク上のサーバーを依然として列挙している。どちらの故障も死んだネットワークに見えるが、どちらもその場で修理できる。

古い部品は、あなたが気づく前からすでに間違っていた。ケーブルを抜いたことで見えるようになっただけだ。

カーネルにパケットの行き先を尋ねる

ルートの一覧は、システムが知っているすべてを列挙し、もう適用されない項目まで含むので読みにくい。ルート検索は、問う価値のある唯一の問いに答える。いまこのパケットを運ぶのはどのデバイスか。答えがトンネルデバイスを示すなら、その背後に生きたクライアントプロセスがなくてもカーネルはそれを使い、パケットは誰も保守していないインターフェースに落ちる。答えが Ethernet アダプターを示すのにクライアントが接続済みだと言い張るなら、トンネルは存在するが選択を失ったのであり、無線から有線への切り替えではよくある結果だ。

公開アドレス用に一度、社内アドレス用にもう一度、検索を二回実行する。分割トンネルのポリシーは一方を正直に通し、もう一方を落とすことがあるからだ。

ip route show default
ip route get 1.1.1.1
ip route get 10.20.30.40

リゾルバーも死んだリンクを保持する

systemd-resolved を使うホストでは、DNS サーバーはリンクに属し、単一のグローバルリストには属さない。落ちた VPN リンクはしばらく自分のサーバーとともに登録されたままで、その間すべての検索は決して答えないアドレスを待つ。その遅延は死んだネットワークのように感じられ、ルートは正常なのに人をルートへ向かわせる。

resolvectl status
resolvectl query intranet.example.com

リンクごとのブロックを読み、問題のドメインを所有しているのがどのリンクかを特定する。起動していても社内ドメインの所有者ではないトンネルは、社内の名前を公開リゾルバーへ転送し、症状はルーティング障害と区別できない。

直すべきは登録であって、 /etc/resolv.confではない。現在の Ubuntu と Fedora のインストールでは、そのパスはリゾルバーの実行時状態へのシンボリックリンクなので、編集は無視されるか、次のネットワークイベントで上書きされる。

VPN は決して自分では起動しない

NetworkManager はベース接続の上に VPN を立ち上げ、どれに従うべきかをベース側の connection.secondaries から学ぶ。 接続設定のリファレンス は、VPN プロファイルでは自動接続が実装されていないと明言している。これがこの種の故障の仕組みのすべてだ。ベースを変えれば、VPN は手動で再度ペアリングするか再有効化しなければならない。

nmcli device status
nmcli connection show --active
nmcli connection up office-vpn

有効な一覧に VPN なしのベースが表示されるなら、トンネルはまったく有効ではなく、ルートは古いまま残ったのではなく一度も入っていない。有効化がソース接続が存在しないと訴えるなら、ペアリングしていたベースが消えているので、まずベースかペアリングを直し、VPN を再試行するのはやめる。

アップグレードは通知なしに設定を落とすことがある

ディストリビューションをアップグレードするとクライアントと、しばしばその NetworkManager プラグインが置き換わるが、保存済みのプロファイルは書かれたときのプロパティ名をそのまま保つ。新しいプラグインが認識しなくなったものは黙って飛ばされる。プロファイルは今も有効になり、デバイスも今も現れるが、以前は一緒に来ていたルートはもう来ない。

手書きのフックも動く。古い順序の予測できる時点でルートを入れていたスクリプトは、いまやインターフェースが存在する前に走るか、クライアントがすでにタイムアウトした後に走るかもしれない。

動いているプロファイルを、覚えている挙動ではなく、実際に持っているプラグインと比べる。キーがドキュメントから消えているなら、古いプロパティを復元するのではなく、ディスパッチャースクリプトかサポートされた代替へ作業を移す。

三つの状態、三つの異なる修理

何かに触れる前に自分がどの状態かを決める。再起動は証拠を壊し、次のネットワーク変更で障害が戻るからだ。

What the lookup showsWhat it meansRepair
A default route via a device that exists but is unusedLeftover route from an earlier activationRemove the stale entry, or bounce the profile that installed it
A tunnel device with no client processThe client skipped its cleanupFix the disconnect path, then clear the leftover device state
No tunnel device and no active profileMissing base connection or broken pairingBring up the base, then pair the VPN with it again

公開アドレスの検索を一回、社内アドレスの検索を一回、名前の問い合わせを一回で終える。アドレスは動くのに名前が動かないなら、残る障害はリゾルバー内のドメインスコープであり、ルートテーブルは最初から問題ではなかった。

関連記事