大阪オフィスの寺田です。
いや、春と同じく大阪オフィスに滞在中の寺田です。
昨日、大阪の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をアサインすることが可能となっています。
Subnetも同じく、IPv6のアドレスをアタッチするかを選択する形になります。
後は、今まで通り、Internet Gateway(IGW)をアタッチして、
ルーティングテーブルを設定し、
Security Groupを作る必要があるわけですが、
ルーティングテーブルと、Security Groupに書くアドレスは、
IPv6で書く必要があります。
次にEC2を作成していきます。
今回は、IPv6で遊びたいので、IPv4のGlobal IPは設定しない形にします。
EC2の詳細項目にもIPv6の設定が表示されるようになっています。
EGWも試してみたいので、::/0がEGWへと向いた、ルートテーブルと、そのルートテーブルを紐付けるSubnetも作成します。
最後に作ったプライベートサブネットへと、IPv6のIPをアタッチしたインスタンスをローンチします。
最終的に踏み台も必要だったので下図の様な構成になりました
接続する
今回、上の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がいらなくなったりなどで、ネットワーク・トポロジーやお作法も変わるため、設計もガラッと変わることになります。
(この記事のために結構調べました。)
東京リージョンに来るまではもう少し時間がかかりそうですが、
早めに慣れていきたいところです。