header image

枝折

AWS IPv6 対応と DNS64 と NAT64

CREATED: 2024 / 03 / 10 Sun

UPDATED: 2024 / 03 / 10 Sun

IPv6 対応時に調べてたやつ。

AWS リソースの IPv6 対応

先月 AWS で使っていた EC2 の IPv4 アドレスを剥がして IPv6 に付け替える作業をした。

といっても開発者側の自宅が IPv6 に対応していなかったりしていて、依然として一部バッションサーバー等では IPv4 を残しているのだが。

基本的な対応方法は公式のドキュメントを見れば概ね問題ない。

VPC を IPv4 から IPv6 に移行する

ざっくり言うと以下のフローを辿る。

1. VPC に IPv6 を割り当てる。
2. VPC に紐づくサブネットに IPv6 アドレスのブロックを割り当てる。
3. パブリックサブネットの場合はルートテーブルで IGW 経由の宛先 ::/0 を指定する。
4. プライベートサブネットの場合はルートテーブルで Egress-only IGW 経由の宛先 ::/0 を指定する。
5. セキュリティグループで IPv6 トラフィックをインバウンド/アウトバウンドで許可する。
6. インスタンスに IPv6 アドレスを割り当てる。

Egress-only IGW は IPv6 環境へアクセスする場合に必要なゲートウェイで、IPv4 環境へアクセスする場合はパブリックサブネットなら DNS64、プライベートサブネットなら NAT64 を利用する。 これらについては後述する。

IPv6 対応するだけなら上のドキュメントを読んでれば大体対応方法がわかるかと思う。

DNS64 と NAT64

IPv6 対応をするときにこれはなんだとなったものに DNS64 と NAT64 がある(NAT64/DNS64 は IPv4 over IPv6 接続方式の一つ)。

正直知らない概念だったが、この際 IPv6 についてちょっとは調べたのでこれらの解釈を一旦まとめておきたい。

NAT64 は IPv6 環境のサーバーが IPv4 環境のサーバーへリクエストを投げられるように、IPv6 アドレスを IPv4 アドレスに変換する。 元々 IPv6 環境から飛ばされるリクエストは IPv6 の姿をしているので、これを IPv4 に直接投げるわけにはいかない。 NAT64 はそれを IPv4 に変換し、両者の間の通信をスムーズに保ってくれるわけだ。

JPNIC の解説ページにも書かれているが、最初に IPv6 環境からのリクエストは well-known prefix と IPv4 アドレスを組み合わせた擬似 IPv6 アドレスを宛先として投げられる。

NAT64/DNS64

NAT64/DNS64を利用した通信では、RFC6052で定義されたIPv4-IPv6変換アドレスをNAT64とそれを利用する端末間の通信に利用します。この変換アドレスのWell-known prefixは、64:ff9b::/96となり、IPv4アドレスは、IPv4-IPv6変換アドレスの末尾に合成されます。

NAT64 はこれを IPv4 環境へのリクエストと判断して、IPv4 アドレスの部分を抜き取り、そこを宛先としてリクエストを中継してくれる。

では、その IPv4-IPv6 変換アドレスはどのように用意すべきだろうか? IPv6 環境のサーバーは DNS に問い合わせて宛先の IP アドレスを取得するが、その宛先が IPv4 にしか対応していない場合、すなわち A レコードしか取得されなかった場合は誰がそれを IPv6 アドレス型に変換するのだろうか?

その役割を担うのが DNS64 である。 DNS64 は IPv6 環境からの DNS 問い合わせの中継を担い、DNS に問い合わせた結果に A レコードしか存在しなかった場合に、上述の well-known prefix を合成した IPv4-IPv6 変換アドレスを生成し、IPv6 環境のサーバーへ返却する。 例えば、IPv4 アドレス 192.0.2.33 を宛先とする IPv4-IPv6 変換アドレスは 64:ff9b::192.0.2.33(直接くっつけただけなので、実際は IPv4 の部分も IPv6 の記法に則る必要がある)となる。

Text Representation

以上、DNS64 と NAT64 を用いることで IPv6 環境と IPv4 環境との通信(IPv6 環境から行われる通信)をスムーズに行うことができる。

AWS ではこれらを理解した上で設定を行うとイメージしやすいかと思われる。

DNS64 と NAT64 を設定する

ちなみに、IPv4 にしか対応していない環境から IPv6 にしか対応していない環境へは通信できないので、サービス的には IPv4 の受け口を残しておく必要があるだろう。 この辺、場合によっては AWS で使っている IPv4 を全て消しきれないかと思われる。

を仕舞い

NAT64/DNS64 は BIGLOBE が世界で初めて固定回線で商用化したらしい。

世界初への挑戦!インターネットを快適にするNAT64/DNS64とは? DNSの振り分けでNAT64/DNS64の不具合を回避 固定回線でIPv4 over IPv6接続するための工夫