【re:Invent 2016】IPv6がVPCとEC2に来たので試してみた

記事タイトルとURLをコピーする

大阪オフィスの寺田です。 いや、春と同じく大阪オフィスに滞在中の寺田です。 昨日、大阪のre:Inventに行かなかった、あるいは行けなかったメンバーで行っていた re:Ikenvent と称した呑み会に参加させてもらいました。 怪しい居酒屋で、なぜかくじ引きで金賞を当てた人がいたりと、少ない人数ながらごっちゃな感じで楽しかったです。 でも、AWSの技術的な話はほとんどした記憶がありません。飲みすぎたせいではないはずなのですが。 とはいえ、ここは技術blog、 新しく出たサービスで遊んでみようと思います。

IPv6がVPCとEC2に来たので試してみた

IPv4の枯渇問題があり、全世界的にIPv6の移行がなされているわけですが、 AWSでも S3, Cloud Front WAF, Route53 と徐々にIPv6への対応が進んでいました。 でも、肝心のコンピューティングリソースが無いと、IPv6に対応したけどどう使おうかというところでした。 そこで今回のVPCとEC2のIPv6対応です。 公式blogへのリンクはこちらで。

Egress-Only Internet Gateway (EGW)

IPv6になることで、大量のアドレスが利用可能になりますので、 Elastic IPやGlobal IPをいちいちアタッチしなくても、インターネット側からIPv6のアドレスでEC2に簡単にアクセスできるようになります。 逆に、IPv6のアドレスをアサインしてしまうと、全世界に公開されてしまうので、外から入れない仕組みを考える必要があります。

そこで、EGWというGWが新たに追加されました。 Inboundが無いSecurity Groupの、VPC版(IPv6)の様な実装になっているようです。 IPv4で必要だったNAT GWが要らなくなり、お財布的には優しくなります。 余談ですが、技術検証するときは、 t2インスタンスをオンデマンドで立ち上げるより、m3.medium や c4.large をスポットで起動するほうが安いのですが、 現在のところ、スポットで立ち上げるとIPv6がつかないようなので、手で付けてあげる必要があります。

実際に作ってみる

今回のIPv6の対応は現在のところオハイオリージョンだけですので、 オハイオで作っていきます。 今のところ、今までに作ったVPCがIPv6に対応するのではなく、
新しくVPCを作り、そこでIPv6を有効にするかを選ぶ必要があります。 既存のVPCにIPv6のCIDRをアサインすることが可能となっています。

screenshot-2016-12-02-11-41-26

Subnetも同じく、IPv6のアドレスをアタッチするかを選択する形になります。

screenshot-2016-12-02-11-48-43

後は、今まで通り、Internet Gateway(IGW)をアタッチして、 ルーティングテーブルを設定し、 Security Groupを作る必要があるわけですが、 ルーティングテーブルと、Security Groupに書くアドレスは、 IPv6で書く必要があります。

screenshot-2016-12-02-15-56-52

screenshot-2016-12-02-15-57-36

次にEC2を作成していきます。 今回は、IPv6で遊びたいので、IPv4のGlobal IPは設定しない形にします。 EC2の詳細項目にもIPv6の設定が表示されるようになっています。

screenshot-2016-12-02-15-58-13

EGWも試してみたいので、::/0がEGWへと向いた、ルートテーブルと、そのルートテーブルを紐付けるSubnetも作成します。

screenshot-2016-12-02-15-59-14

screenshot-2016-12-02-15-59-36

最後に作ったプライベートサブネットへと、IPv6のIPをアタッチしたインスタンスをローンチします。 最終的に踏み台も必要だったので下図の様な構成になりました

untitled-1

接続する

今回、上の2台のEC2を作りましたが、 会社のネットワークからIPv6で出れないらしいので、 もう一個、IPv6を持った、VPCと踏み台インスタンスを構築し、 そこへIPv4でSSHをしたうえで、 踏み台からIPv6でSSHという経路を取ります。

踏み台から、作ったEC2へは、IPv6で接続します。

[ec2-user@ip-10-1-10-6 ~]$ ssh -i dev-terada.pem 2600:1f16:6c9:5500:d981:36e:bd6e:a00f
Last login: Fri Dec  2 04:12:29 2016 from 2600:1f16:cf3:7900:20ed:737d:542b:80af

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2016.09-release-notes/
[ec2-user@ip-10-0-1-237 ~]$ ping 2001:4860:4860::8888
ping: unknown host 2001:4860:4860::8888
[ec2-user@ip-10-0-1-237 ~]$ ping6 2001:4860:4860::8888
PING 2001:4860:4860::8888(2001:4860:4860::8888) 56 data bytes
64 bytes from 2001:4860:4860::8888: icmp_seq=1 ttl=46 time=20.2 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=2 ttl=46 time=19.9 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=3 ttl=46 time=19.9 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=4 ttl=46 time=19.9 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=5 ttl=46 time=19.9 ms
^C
--- 2001:4860:4860::8888 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 19.903/19.984/20.201/0.210 ms
[ec2-user@ip-10-0-1-237 ~]$

IPv6でインターネットに出ることも可能です。 ホストネームとかはIPv4のアドレスが表示されていますね。 プライベートサブネットへ作ったEC2へも同じように試してみます。

[ec2-user@ip-10-1-10-6 ~]$ ssh -i dev-terada.pem 2600:1f16:6c9:5501:1c78:6a5d:a349:2b6f
^C
[ec2-user@ip-10-1-10-6 ~]$

プライベートで作ったので当然ですが、これでのログインはできません。 一度、上のパブリックに配置したインスタンスにログインしたうえで、 アクセスします。

[ec2-user@ip-10-1-10-6 ~]$ ssh -i dev-terada.pem 2600:1f16:6c9:5500:d981:36e:bd6e:a00f
Last login: Fri Dec  2 06:18:11 2016 from 2600:1f16:6c9:5500:d981:36e:bd6e:a00f

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2016.09-release-notes/
[ec2-user@ip-10-0-1-237 ~]$ ssh -i dev-terada.pem 2600:1f16:6c9:5501:1c78:6a5d:a349:2b6f
The authenticity of host '2600:1f16:6c9:5501:1c78:6a5d:a349:2b6f (2600:1f16:6c9:5501:1c78:6a5d:a349:2b6f)' can't be established.
ECDSA key fingerprint is 13:b5:ec:89:c4:d9:32:52:cf:fc:0e:71:c0:7b:f2:cc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '2600:1f16:6c9:5501:1c78:6a5d:a349:2b6f' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2016.09-release-notes/
[ec2-user@ip-10-0-2-84 ~]$ ping6 2001:4860:4860::8888
PING 2001:4860:4860::8888(2001:4860:4860::8888) 56 data bytes
64 bytes from 2001:4860:4860::8888: icmp_seq=1 ttl=46 time=19.7 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=2 ttl=46 time=20.0 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=3 ttl=46 time=19.7 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=4 ttl=46 time=19.7 ms
^C
--- 2001:4860:4860::8888 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 19.748/19.836/20.067/0.193 ms
[ec2-user@ip-10-0-2-84 ~]$

EGWを通したインターネットへの接続も問題なくできます。

まとめ

簡単にIPv6のテストを行いました。 現在のところ、VPCとしてはIPv4にIPv6を付け足した形の実装となっています。 また、IPv6が使えるようになったからと言って、IPv6がすぐに必須になることはないと考えられます。 しかし、アップルがiOSのアプリケーションで、IPv6対応を必要としたり、 確実に流れはIPv6に動いています。 また、NATがいらなくなったりなどで、ネットワーク・トポロジーやお作法も変わるため、設計もガラッと変わることになります。 (この記事のために結構調べました。) 東京リージョンに来るまではもう少し時間がかかりそうですが、 早めに慣れていきたいところです。