VPNが通信障害を引き起こす

 しばらくしてA社の社員から,社外の特定のWebサイトに接続できないというクレームが来た。A社のシステム担当者が調査したところ,問題のWebサイトに対してはpingによる疎通確認もできない。HTTPが使うTCPの80番ポートに対して接続はできるが,データは送られてこない状態だった。

図1 A社は単一AS番号を使ってマルチホーミング環境を構築
東京-大阪間でIPsecトンネルを使い,インターネットのパケットを中継するはずだった。しかし,ICMPをフィルタリングする機器がインターネットの中にあったため,パケットを分割して再送する要求が行えず,特定のWebサイトに接続できない現象が発生した。
 調査を進めていくとVPNを経由し,かつパケット・サイズがイーサネットのMTUサイズである1500バイトに近い時に問題があることが分かった。しかし原因がよく分からなかったので,自宅からそのWebサイトに接続して調べた結果,A社から接続できないWebサイトが送信するパケットにはDFフラグが立っていることが判明した(図1[拡大表示])。

 A社のシステム担当者がインターネット接続事業者(プロバイダ)に相談したところ,それはパスMTUディスカバリに起因する問題ではないか,との指摘を受けた。

 VPNで使うIPsecではAHESPの二つのプロトコルを組み合わせて使用することが多い。トンネル・モード時にはヘッダーとして最低でもAHで12バイト,ESPでは8バイトが使う。これ以外に可変長の認証データが加わり,さらにオリジナルIPヘッダーも加わるため,少なくとも数十バイトはヘッダーとして消費される。つまり元のパケット・サイズが1500バイトであっても,IPsecヘッダーを付加すると1500バイトを超えてしまうことがある。これはIPsecを使うときによく発生する問題だが,マルチホーミングの設定に気を取られていて見逃していた。

ICMPがフィルタリングされていた

 通常はそのようなパケットは,1500バイトより小さくなるようにルーターが二つに分割するフラグメント処理を施して送信する。しかし,DFフラグが立っているためにフラグメント処理ができなかったのだ。

 このような場合,IPネットワークではICMPのエラー通知機構により,パケット送信元にパケットを分割して再送するように指示できる。だが,アクセスできないWebサイトに設置してある機器がICMPをフィルタリングしていたため,この機構が働かなかった。A社はICMPのフィルタリングを外すように,そのWebサイトの管理者へ連絡した。

 また,二つの拠点を結ぶ2回線のVPNのうち,1回線はVPNの使用を中止。この専用線をメイン回線,VPNの回線をバックアップ回線とした。こうすることで,通常は東京-大阪間のVPNを経由しないので,MTUサイズが1500バイトを超える問題は発生しなくなった。ただ,メイン回線の障害時にはバックアップのVPN回線を使うので,MTUサイズを超える問題は残っているが,この点は妥協した。