ルーターのパススルースイッチは、その後ろの機器に対する転送の譲歩であって、VPN サービスではない。ルーターをクライアントとして登録せず、資格情報を保持せず、家中の機器すべてを遠隔の出口へ押し出すわけでもない。やっているのは、ひとつのプロトコルがアドレス変換とフィルターをどう越えるかを形づくることだ。それが分かれば、スイッチは試験しやすく、切ったままにもしやすい。

ルーターが実際にしていること

ルーターはクライアントと IPsec ピアの間に立ち、理解するために設計されたわけではないパケットを転送する。ベンダーの実装は少なくとも三通りある——状態を追跡または書き換えるプロトコルヘルパー、ESP の破棄を止めるフィルター例外、古いクライアント向けの互換モードだ。Web 画面のラベルは、そのどれなのかをほとんど告げない。分かるのはファームウェアの記述かパケットキャプチャだけだ。

ヘルパーが事態を悪くすることもある。古いフロー向けに書かれた支援が、変換をすでに正しく扱うクライアントと干渉することがある。現代的なクライアントがオプションを切って動くなら、切ったままにするのが良い設定だ。

パススルーがルーターにピアの鍵を渡すことはない。ルーターは外側のアドレスとポートを依然として見ており、独自の転送ポリシーをそこに適用し続ける。

NAT と NAT-T が経路を決める

IPsec はアドレス変換を生き延びるようには作られていないので、標準はラッパーを加えた。NAT トラバーサルは ESP を UDP の内側に包み、通常の NAT テーブルがフローを運べるようにし、IKE の間にその切り替えに合意する(RFC 3948)。IKE 自体は UDP 500 を使い、包まれた経路は通常 UDP 4500 を使う。

だからプロトコル 50 だけを許可するファイアウォール規則では、変換された経路には足りない。4500 を遮断するとラッパーが存在する理由の場面が壊れ、500 を遮断するとトンネルができる前に交渉が止まる。両方向が重要で、状態を持つルーターは通常、要求を見たあとでなければ応答を許さない。ポートに届くことは認証を終えることと同じではなく、保護された通信を転送することとも同じではない。

古い構成は十分に異なるので、それ向けに書かれた手引きは誤らせる。クライアントが両方のモードを出すときは、検索結果が多いほうではなく、自分のピアが文書化しているほうを試す。

失敗している段階を見つける

問題を交渉、認証、子の保護、内部転送に分け、一度に 一段階ずつ証拠を集める。結果を一時的に変える再起動は、何らかの状態が関わっていたことだけを示す。

sudo tcpdump -ni any 'udp port 500 or udp port 4500'
ip xfrm state list
ip xfrm policy list

キャプチャは交換がピアに届くか、応答が戻るかを示し、フィルターの問題と資格情報の問題を切り分ける。状態一覧は確立したセキュリティ関連付けを示すので、試行後の空の一覧は経路ではなく交渉を指す。ポリシー一覧はどのセレクターが入っているかを示し、サブネット外の宛先が除外されるのはそこだ。ルーターに触る前には、ルーターが何を許すかではなくホストが何を信じているかを述べる xfrm の二つの出力を読みなさい。

パケットが出て何も戻らないなら、キャプチャをルーターの WAN 側へ移す。二つのキャプチャを比べれば、推測せずに破棄の場所を特定できる。

不要なものは切る

ノート PC 一台が動くことは、ルーターが複数のクライアントを同時に扱える証拠ではない。各クライアントは独自の変換状態と独自の交渉を作り、ヘルパーによっては ひとつのフローしか追わない。実際に使うネットワークから、実際に必要な同時セッション数を試す。二台目が失敗して 一台目が順調なら、それが所見であり、不安定なトンネルではない。

キャプチャが必要だと示したときだけ、オプションを有効のままにする。ファームウェアの版は、こうした振る舞いが版の間で変わるため、結果の横に記録する。目的は検証したクライアントトンネルであり、願いを込めて入れたスイッチではない。

関連記事