ECS で IPv6 が使えるか検証してみた

Amazon ECS

はじめに

本記事は、技術的興味による実験的な検証記事となります。 ECS コンテナで IPv6 が公式にサポートされているわけではありませんので、予めご了承ください。

Docker 環境での IPv6 に関するドキュメントについては、公式サイトをご確認ください。

前提条件

本記事では、ECS 環境が構築済みであることを前提としております。ECS 環境を構築した事が無い読者の方は、こちらの記事を参考に環境を構築してみてください。

ECS 環境で IPv6 を設定する

予め ECS インスタンスへ SSH 接続し、IPv6 の設定を行います。

$ sudo su -
# echo '{"ipv6":true, "fixed-cidr-v6":"2001:db8:1::/64"}' > /etc/docker/daemon.json
# service docker restart
# start ecs

IPv6 アドレスを確認する

設定は完了しました。IPv6 の 80 ポートを LISTEN する nginx コンテナを起動し、IPv6 アドレスが割当てられているか確認してみます。

$ cat default.conf 
server {
    listen [::]:80 ipv6only=on;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
$ docker run --name nginx -v `pwd`:/etc/nginx/conf.d -d nginx
c631f628251e25521ed87eb84f415841d008a4719753b64798af8cabf78a5574
$ docker network inspect bridge | grep IPv
        "EnableIPv6": true,
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": "2001:db8:1::242:ac11:2/64"
$ docker ps
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS               NAMES
c631f628251e        nginx                            "nginx -g 'daemon ..."   2 minutes ago       Up 2 minutes        80/tcp              nginx
6e05aedfa9cb        amazon/amazon-ecs-agent:latest   "/agent"                 57 minutes ago      Up 57 minutes                           ecs-agent

ちゃんと IPv6 のアドレスが割当たってますね。

IPv6 で通信出来るか確認する

まずは、ECS インスタンスから ping6 で接続確認してみます。

$ ping6 2001:db8:1::242:ac11:2 -c 3
PING 2001:db8:1::242:ac11:2(2001:db8:1::242:ac11:2) 56 data bytes
64 bytes from 2001:db8:1::242:ac11:2: icmp_seq=1 ttl=64 time=0.056 ms
64 bytes from 2001:db8:1::242:ac11:2: icmp_seq=2 ttl=64 time=0.056 ms
64 bytes from 2001:db8:1::242:ac11:2: icmp_seq=3 ttl=64 time=0.042 ms

--- 2001:db8:1::242:ac11:2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2053ms
rtt min/avg/max/mdev = 0.042/0.051/0.056/0.008 ms

ちゃんと繋がりますね。では次に curl で welcome page を取得してみます。

$ curl -g 'http://[2001:db8:1::242:ac11:2]'
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
$ 

nginx コンテナ起動時に Port#80 ポートフォーワードの設定を実施していませんが、IPv6 を設定していることにより welcome page を取得できました。

さいごに

ECS の Docker Daemon に対して IPv6 設定を有効化することにより、IPv6 が利用出来ることは確認出来ました。 いずれやってくるであろう IPv6 の時代に備えて IPv6 の理解を深めておきたいなと思いました。

ではでは