Amazon EC2とVPCがIPv6に対応しました #reinvent

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
本日AWSのプライベートネットワークサービスAmazon VPCのIPv6対応が発表されました。早速試してみた様子をレポートします。

VPCのIPv6対応範囲

今回のIPv6対応にはいくつか制限があります。以下にまとめます。

  • 対象リージョンはオハイオのみ(今後他のリージョンに展開予定)
  • IPv4のようにCIDRのレンジは選択できず、グローバルの/56プレフィックスが割り当てられる

設定手順

既存のVPCにIPv6プレフィックスの割り当てを追加してみます。今回はデフォルトVPCに設定しました。Amazon VPCの管理画面でVPC一覧を表示し、VPCのコンテキストメニューから[Edit CIDRs]をクリックします。

vpc-ipv601

[Add IPv6 CIDR]ボタンをクリックすると、AWSが確保している/56のIPv6プレフィックスが割り当てられます。

vpc-ipv603

VPC全体のプレフィックスが決まったので、次はサブネットのプレフィックスです。サブネットには/56のアドレス空間から/64のプレフィックスを割り当てます。VPCサブネットの一覧画面からサブネットのコンテキストメニューにある[Edit IPv6 CIDRs]をクリックします。

vpc-ipv604

[Add IPv6 CIDR]ボタンをクリックします。

vpc-ipv605

サブネットプレフィックスの末尾2桁を入力し、右側のチェックアイコンをクリックすればOKです。

vpc-ipv606

VPCの設定は一旦これで完了です。IPv6インターネットにトラフィックを送信するためには追加設定が必要なので後述します。

EC2インスタンスの設定

続いて、EC2インスタンスにIPv6アドレスを割り当てます。既定のインスタンス作成ウィザードにはIPv6アドレスの設定が含まれないため、インスタンス作成後、コンテキストメニューの[ネットワーキング] - [Manage IP Addresses]から追加します。

vpc-ipv608

[IPv6 addresses]の項目にある「新しいIPの割り当て」リンクをクリックし、右下の[更新する]ボタンを押下します。

vpc-ipv610

下記のようにIPv6アドレスが割り当てられました。

vpc-ipv611

IPv6インターネットへの送信設定

EC2インスタンス同士のIPv6通信であればこれまでの設定で十分ですが、外部ネットワークにトラフィックを送信するためにはゲートウェイとルーティングテーブルの設定が必要です。Direct Connect経由のオンプレミス環境との通信はVGW、インターネットとの双方向通信にはIGWが利用できます。今回のIPv6サポートと同時に新たに追加された、送信のみを扱うEgress Only Internet Gateway(EGW)をIGWの代わりにインターネットへの送信に利用することもできるようになったので、今回はEGWで試してみます。VPCの管理画面から作成し、作成時にVPCを選択すればOKです。

vpc-ipv607

ルーティングテーブルの設定は、従来のIPv4と特に変わりません。送信先がIPv6表記をサポートしているので、今回はデフォルトルートをEGWに設定し、IPv6インターネットにトラフィックが送信できるように設定しました。

vpc-ipv612

これでOKです。

動作確認

では、EC2インスタンスのOSから確認してみましょう。今回はAmazon Linux AMIを利用しました。追加の設定は特に必要なく、IPv6が有効でインスタンスに追加したIPv6グローバルアドレスが確認できます。デフォルトルートのエントリーは暗示的なルーターのリンクローカルアドレスが入っていますね。

[ec2-user@ip-172-31-11-186 ~]$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 02:82:5F:5D:16:F1
          inet addr:172.31.11.186  Bcast:172.31.15.255  Mask:255.255.240.0
          inet6 addr: fe80::82:5fff:fe5d:16f1/64 Scope:Link
          inet6 addr: 2600:1f16:b98:8d00:e270:c102:29a5:bfcb/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:29029 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1177 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:41514924 (39.5 MiB)  TX bytes:105074 (102.6 KiB)

[ec2-user@ip-172-31-11-186 ~]$ ip -6 route
unreachable ::/96 dev lo  metric 1024  error -113 pref medium
unreachable ::ffff:0.0.0.0/96 dev lo  metric 1024  error -113 pref medium
unreachable 2002:a00::/24 dev lo  metric 1024  error -113 pref medium
unreachable 2002:7f00::/24 dev lo  metric 1024  error -113 pref medium
unreachable 2002:a9fe::/32 dev lo  metric 1024  error -113 pref medium
unreachable 2002:ac10::/28 dev lo  metric 1024  error -113 pref medium
unreachable 2002:c0a8::/32 dev lo  metric 1024  error -113 pref medium
unreachable 2002:e000::/19 dev lo  metric 1024  error -113 pref medium
2600:1f16:b98:8d00::/64 dev eth0  proto kernel  metric 256  pref medium
unreachable 3ffe:ffff::/32 dev lo  metric 1024  error -113 pref medium
fe80::/64 dev eth0  proto kernel  metric 256  mtu 9001 pref medium
default via fe80::96:f4ff:fea8:4cbb dev eth0  proto ra  metric 1024  expires 1792sec hoplimit 64 pref medium

では、先日IPv6がサポートされたCloudFrontのIPv6アドレスを確認し、pingを送出してみます。(個人WebサイトにCloudFrontに向けたRoute 53エイリアスレコードを向けています)

[ec2-user@ip-172-31-11-186 ~]$ host -t aaaa takipone.com
takipone.com has IPv6 address 2600:9000:2023:800:13:3635:7840:93a1
takipone.com has IPv6 address 2600:9000:2023:1200:13:3635:7840:93a1
takipone.com has IPv6 address 2600:9000:2023:2600:13:3635:7840:93a1
takipone.com has IPv6 address 2600:9000:2023:3e00:13:3635:7840:93a1
takipone.com has IPv6 address 2600:9000:2023:4200:13:3635:7840:93a1
takipone.com has IPv6 address 2600:9000:2023:5000:13:3635:7840:93a1
takipone.com has IPv6 address 2600:9000:2023:6400:13:3635:7840:93a1
takipone.com has IPv6 address 2600:9000:2023:da00:13:3635:7840:93a1
[ec2-user@ip-172-31-11-186 ~]$ ping6 2600:9000:2023:800:13:3635:7840:93a1
PING 2600:9000:2023:800:13:3635:7840:93a1(2600:9000:2023:800:13:3635:7840:93a1) 56 data bytes
64 bytes from 2600:9000:2023:800:13:3635:7840:93a1: icmp_seq=1 ttl=46 time=130 ms
64 bytes from 2600:9000:2023:800:13:3635:7840:93a1: icmp_seq=2 ttl=46 time=130 ms
64 bytes from 2600:9000:2023:800:13:3635:7840:93a1: icmp_seq=3 ttl=46 time=130 ms
^C
--- 2600:9000:2023:800:13:3635:7840:93a1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 130.563/130.784/130.981/0.171 ms

pingレスポンスがIPv6で返ってきていますね!

まとめ

VPCおよびEC2のIPv6対応の様子を紹介しました。AWSのマネージドサービスのIPv6サポートも順次進んで行くと思いますので、AWSのIPv6対応がさらに進みそうですね!

IPv6化のメリットとしては豊富なアドレス空間があるので、例えばLambda on VPCでIPv4アドレス数の確保に苦戦する場合の解決策として期待できるんじゃないかなぁと社内で話してたりします。LambdaのIPv6対応とIPv6 Only VPCが実現すれば!

  • 石田順一

    ただのIGWをルーティングテーブルのターゲットとして指定すればIPv6も受信もできますよ。

    • takipone

      確かにIGWを設定することで受信できることを確認しました、これに合わせて記事を修正しました。
      ご指摘ありがとうございました!