はじめに
この記事は IPv6 Advent Calendar 2019 の 20日目の記事として投稿しています。
IPv6化とは
この記事での「IPv6化」とは、サーバに インターネットから到達可能な IPv6アドレスを付け、サービスをその IPv6 アドレスで提供可能とし、かつDNSの AAAAリソースレコードにそのインターネットから到達可能な IPv6アドレスをつけること、としたいと思います1
間違ったIPv6化
わざわざ定義とか言い出した点で察してる方はおられるかと思いますが、ここで取り上げるのは到達性のないIPv6アドレスをつけちゃった事例です。
- IPv4射影アドレス
- ::ffff:192.0.2.1 みたいなの
- IPv4互換アドレス
- ::192.0.2.1 みたいなの
とか。どれもIPv4アドレスを埋め込むIPv6アドレスです。どうやら、埋め込むIPv4アドレスがグローバルアドレスなら、到達性があるだろうと思っちゃうみたいです。たまにこれらのアドレスを AAAA につけちゃってる例を見かけることがあります。
実例
を挙げようかと思ったんですが、いずれ修正されるだろうし、まぁイメージだけを。
$ dig www.example.com AAAA +short
::ffff:192.0.2.1
こんな感じで、IPv4射影アドレスとかが返ってくるサイトがあります。実例みたい人はキーワードに "::ffff:" と "AAAA" でググってみると見つかるかも?
マジかよ!つけちゃったよ!
大丈夫(だと思う)。ちゃんとお作法に則った実装なら、IPv4 にフォールバックするし、そのサイトがウェブサイトなら、最近のブラウザではこのフォールバックも高速化されていて、おそらくユーザは気づかない2。もしつけちゃってたら、そっと外しておきましょう……
まとめ
ということで、気をつけましょう〜
余談
結構大きめのサイトで、この手のことをやっちゃった例を見たことがあります。周りに聞ける人がいなかった不幸、なのかもしれませんね。IPv6アドレスに IPv4アドレスを埋め込む系のアドレス体系と用途って結構あるので、私が知らないだけで類似の事例は結構転がってるのかもしれない……
-
いや、抜けのある定義なんですけど細か過ぎても、ね? ↩
-
最近の主要なブラウザはほぼ Happy Eyeballsと呼ばれる技術に対応していて、IPv6 で到達性がなければ、さくっと IPv4にフォールバックしてくれます。大雑把に言えば、接続の際に、IPv4/IPv6とで同時に接続しに行き、応答が早い方が通信で利用されます(実際には名前解決や接続の際に、 IPv4 に若干のペナルティが入っていて、IPv6 接続が優先される。実際にどの程度のペナルティを課しているかは、実装依存だそうです) ↩