あなたのVPNはIPv6を運んでいるのか、それともサーバーに届くだけなのか
IPv6に届くことはIPv6を運ぶことではない。両方のアドレスファミリーを確認し、運ぶか遮断するかを選び、キルスイッチにも同じ範囲を守らせよう。
IPv4だけの漏えいテストは問題なく通るのに、IPv6のテストでは自宅のアドレスが表示され、トンネルは名目上は接続されている。この組み合わせは、VPNが一方のアドレスファミリーの経路だけを変えてもう一方はそのままにしたために、デュアルスタックのネットワークではよくある。外側のトンネルとその中を通るトラフィックは、別々のアドレス設計の判断である。片方を試しても、もう片方については何も分からない。
クライアントが何を報告するかだけでなく、要求が実際にどちらのファミリーを使ったかも確認すべきだ、ホスト名は両方の種類の応答を返すことがあるからだ。
二つのファミリー、二つの経路
オペレーティングシステムはアドレスファミリーごとに経路表を保持している。IPv4のデフォルト経路を入れてもIPv6のデフォルト経路は入らず、IPv4で到達できるトンネル端点はIPv6のトラフィックがそこに入るかどうかを何も語らない。トンネル経由のIPv6デフォルト経路が存在しない場合、ホストは手持ちのIPv6経路を使うが、それは多くの場合物理リンクである。アプリケーションから見れば、接続は単に直接つながっているだけだ。
AとAAAAの両方のレコードを返すホスト名は、アプリケーションがファミリーを異なる順序で試すことがあるため、これを見えにくくする。要求が成功しても、どちらの経路を通ったかは証明できない。試したファミリーを明示するテストを使うこと。
サーバーに届くことはトラフィックを運ぶことではない
事業者はIPv6対応という言葉を、いくつかの異なる能力に対して使っている。端点がIPv6での接続を受け付けても、トンネルが運ぶのは依然としてIPv4だけかもしれない。トンネルがIPv6の内側パケットを運びつつ、外側の転送はIPv4のままということもある。あるいはクライアントがIPv6を完全に遮断し、トンネルの外へ何も漏れないようにしている場合もある。これらは三つの異なる挙動であり、IPv6に対応しているとだけ書かれたページでは区別できない。
設計にどれが必要なのかを問うべきだ。IPv6専用のサービスに到達する必要があるネットワークには、運ぶことが要る。直接のIPv6トラフィックを防ぐ必要があるネットワークには、マーケティングページの表示ではなく、遮断か完全な運搬が要る。
運ぶか遮断するかを決める
運ぶとは、トンネルにIPv6アドレスがあり、その中にデフォルト経路があり、両端でトラフィックを許可するポリシーがあることを意味する。遮断するとは、クライアントがIPv6をトンネルの外へ出さないように意図的に止めることで、安全ではあるがIPv6の宛先に到達するには役に立たない。どちらも正当であり、どちらも前提にしてよい既定値ではない。まず要件を選び、そのうえでクライアントが実際にそれを実装しているかを確かめる。
IPv4だけのゲストネットワークではIPv6の経路を試せないので、そこで行ったテストは、両方のファミリーが存在する自宅のネットワークについて何も語らない。該当するファミリーが実際に提供されている場所でテストすること。
キルスイッチにも同じ範囲が必要だ
IPv4だけを対象にしたキルスイッチは、もう一方のファミリーを直接出て行くままにし、それこそが防ぐはずだった漏えいである。両方のファミリーと、トンネルが上がる・下りる移行の瞬間について、その規則を見直すこと。システム全体でIPv6を切るのは代わりにならない:無関係なサービスを壊すことがあり、クライアントのポリシー上の問題を機械全体の変更の裏に隠してしまう。
DNSはこれらすべてと切り離しておくこと。DNSが扱うのは、誰が問い合わせに答え、問い合わせがどう旅するかであり、その後に続くアプリケーションの接続には独自の経路がある。片方が正しくてももう片方が正しいとは限らず、両者をまとめて診断すると結論が混乱する。
各テストがどちらのファミリーを試したのか、クライアントがどの能力を主張しているのかを記録すること。その二つの事実が、サポートの表示では決して答えられない問いに答える。