CINXE.COM
AWS で IPv6 対応環境 ( ALB + EC2 ) を作って接続テストをする設定 | Basicinc Enjoy Hacking!
<!DOCTYPE html><html lang="ja" data-scope-path="layouts/application"><head prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#"><link crossorigin="" href="https://www.google-analytics.com/analytics.js" rel="preconnect" /><link rel="preload" href="/fonts/noto-sans-jp-v24-japanese-regular.woff2" as="font" type="font/woff2" crossorigin="anonymous"><link rel="preload" href="/fonts/noto-sans-jp-v24-japanese-700.woff2" as="font" type="font/woff2" crossorigin="anonymous"><!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-25666851-3"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-25666851-3'); </script> <link rel="stylesheet" media="all" href="/assets/ress-d1ba3a251927ab1f2bcc841c9a810109355bcb4260a522a0f76452fdc2fe6095.css" /><link rel="stylesheet" media="all" href="/assets/scopes/layouts/application-dda4ec688c139c8f29c39a2a795bcf4af04c4326643549a37f5d8843fffaebab.css" /><link rel="stylesheet" media="all" href="/assets/scopes/articles/show-37905516c06229c8fde10714e660fc48bc7b6ce7881755707db8b0327ceb5bf1.css" /><link rel="stylesheet" media="all" href="/assets/scopes/partials/_viewer-3a78a10250bb498047a06b71271b62ea949e304d25b9781c4450cf998aa2640c.css" /><link rel="stylesheet" media="all" href="/assets/scopes/layouts/_header-db87b54171cc020758ab7d1494677f8f6c2e9c93b453e896af82e4814eaacc7c.css" /><link rel="stylesheet" media="all" href="/assets/scopes/layouts/_breadcrumbs-744a099ab0b9eb5c4bd45215617e267c7d7c404ddddce8810eead5335512e637.css" /><link rel="stylesheet" media="all" href="/assets/scopes/layouts/_footer-a06961717440c6d0183c582c7f21768011f334d368f51b614eabc87bb17b3bbf.css" /><script src="/packs/application-02365dbc4dc28919eee1.js" defer="defer"></script><link href="/icon.png" rel="icon" type="image/png" /><link href="/apple-touch-icon.png" rel="apple-touch-icon" type="image/png" /><link href="/feed" rel="alternate" title="RSS2.0" type="application/rss+xml" /><title>AWS で IPv6 対応環境 ( ALB + EC2 ) を作って接続テストをする設定 | Basicinc Enjoy Hacking!</title><meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="0RkRYGUb5wSqXZXnlSI3vAyWZ/GwNOC2rxzc0iJsZ2+khinCO8jsliK85oAINpY/EB35VJ3piXsLGt6inYYskw==" /><meta content="width=device-width,initial-scale=1" name="viewport" /><meta content="AWS で IPv6 対応環境 ( ALB + EC2 ) を作って接続テストをする設定 | Basicinc Enjoy Hacking!" property="og:title" /><meta content="article" property="og:type" /><meta content="2020-07-18T05:06:56+09:00" property="article:published_time" /><meta content="2020-07-19T15:44:49+09:00" property="article:modified_time" /><meta content="zaru" property="article:author" /><meta content="Technology" property="article:section" /><meta content="https://tech.basicinc.jp/articles/214" property="og:url" /><meta content="https://tech.basicinc.jp/assets/default_eyecatch-9e0d94e7defd5e124532d0b790a8f8cccfdffa0aed4581afa5f932cfec0b39a2.png" property="og:image" /><meta content="image/png" property="og:image:type" /><meta content="1200" property="og:image:width" /><meta content="630" property="og:image:height" /><meta content="IPv6 は今どれくらい普及しているんだろうか?と思って Google のレポートで調べてみたところ、2020-07-18 時点で日本は 34.45% でした。Google のサービスへアクセスしているログから集計しているということだったので、仕事や家庭含めてリアルな普及率..." property="og:description" /><meta content="ja_JP" property="og:locale" /><meta content="summary" name="twitter:card" /><meta content="@zaru" name="twitter:creator" /></head><body><header data-scope-path="layouts/_header"><div class="header-contents"><a class="root-link" href="/"><svg class="site-logo"><use xlink:href="/assets/icons-5bbe775037b55281ef0bc50d30a51f69c7c3914d399c7107e37f0702d98ae8a2.svg#logo"></use></svg><div class="site-title">Enjoy Hacking!</div></a><div class="site-desc">Basicinc エンジニアブログ</div></div></header><nav data-scope-path="layouts/_breadcrumbs"><ul class="breadcrumbs" itemscope="itemscope" itemtype="https://schema.org/BreadcrumbList"><span class="pretext">% cat </span> <li itemprop="itemListElement" itemscope="itemscope" itemtype="https://schema.org/ListItem"><a itemprop="item" href="/"><span itemprop="name">~</span></a><meta itemprop="position" content="1" /></li>/<li class="current" itemprop="itemListElement" itemscope="itemscope" itemtype="https://schema.org/ListItem"><span itemprop="name">AWSでIPv6対応環境(ALB+EC2)を作って接続テストをする設定.md</span><meta itemprop="item" content="https://tech.basicinc.jp/articles/214" /><meta itemprop="position" content="2" /></li></ul></nav><div data-scope-path="articles/show"><article class="article"><h1 class="article-title">AWS で IPv6 対応環境 ( ALB + EC2 ) を作って接続テストをする設定</h1><div class="article-desc"><a class="article-author" href="/authors/1"><img class="article-author-avatar" src="https://tech.basicinc.jp/uploads/e868e5fb1e34b970ae7d8e04c454ff28.png" /><span class="article-author-name">zaru</span></a><div class="article-date-info"><time class="article-posted-date with-separator">Posted 2020-07-18</time><time class="article-revised-date">Revised 2020-07-19</time></div></div><div class="article-body"><div data-scope-path="partials/_viewer"><p>IPv6 は今どれくらい普及しているんだろうか?と思って Google のレポートで調べてみたところ、2020-07-18 時点で日本は 34.45% でした。Google のサービスへアクセスしているログから集計しているということだったので、仕事や家庭含めてリアルな普及率のような気がします。個人的には意外にも普及しているなという印象です。</p> <img width="1015" alt="スクリーンショット 2020-07-17 19 06 42" src="https://user-images.githubusercontent.com/235650/87826866-99e7df80-c8b4-11ea-8ca1-8cd4677558e1.png"> <ul> <li><a href="https://www.google.com/intl/ja/ipv6/statistics.html#tab=per-country-ipv6-adoption">https://www.google.com/intl/ja/ipv6/statistics.html#tab=per-country-ipv6-adoption</a></li> </ul> <p>そして AWS VPC が IPv6 対応をしてからしばらく経ちますが、こんな状況なので改めて IPv6 対応のサーバ環境を ALB + EC2 で作り動作確認をしました。</p> <h2>VPC を IPv6 対応にする</h2> <p>まず VPC を IPv6 対応にする必要があります。メニューの VPC -> CIDR の編集から VPC IPv6 CIDR を追加します。</p> <img width="362" alt="0" src="https://user-images.githubusercontent.com/235650/87826455-e2eb6400-c8b3-11ea-8446-acc5f676c238.png"> <img width="1120" alt="1" src="https://user-images.githubusercontent.com/235650/87826452-e0890a00-c8b3-11ea-8b2f-addd7b910fb1.png"> <h3>サブネットに IPv6 CIDR を追加する</h3> <p>次に VPC -> サブネットから該当のサブネット全てに IPv6 CIDR を追加します。</p> <img width="425" alt="2" src="https://user-images.githubusercontent.com/235650/87826456-e383fa80-c8b3-11ea-9e40-4f8b94d42c04.png"> <img width="1113" alt="3" src="https://user-images.githubusercontent.com/235650/87826459-e41c9100-c8b3-11ea-8c06-e32754ebfaab.png"> <h3>インターネットゲートウェイのルートテーブルに IPv6 を追加する</h3> <p>この設定は ALB + EC2 のサーバを IPv6 で接続を受け付けるだけなら必要ないです。これは VPC 内の EC2 インスタンスが IPv6 で外のインターネットに通信しにいくための設定です。今回は IPv6 で接続ができているかどうかの動作確認ように設定をしています。</p> <p>VPC -> ルートテーブルから、<code>::/0</code> と IPv6 通信設定を追加します。</p> <img width="896" alt="4" src="https://user-images.githubusercontent.com/235650/87826460-e41c9100-c8b3-11ea-9772-9d1fd0a28fe7.png"> <h2>ALB と EC2 を IPv6 対応にする</h2> <h3>EC2 インスタンスに IPv6 を割り当てる</h3> <p>こちらもルートテーブルと同様に IPv6 の通信動作確認用の設定になります。もしくは ALB を使わず直接 EC2 インスタンスのサーバへ IPv6 接続がしたい場合は必要になる設定です。</p> <p>対象インスタンスを選択し アクション -> ネットワーキング -> IP アドレスの管理 から選択し、IPv6 アドレスを割り当てます。</p> <img width="784" alt="5" src="https://user-images.githubusercontent.com/235650/87826463-e54dbe00-c8b3-11ea-8e62-113012440fc0.png"> <img width="703" alt="6" src="https://user-images.githubusercontent.com/235650/87826471-e67eeb00-c8b3-11ea-8411-b3389ad40623.png"> <p>EC2 インスタンスへ入り <code>ip</code> コマンドで IPv6 が正常に割り当てられているのを確認します。</p> <pre><code>$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000 link/ether 06:21:6a:ef:87:9e brd ff:ff:ff:ff:ff:ff inet 172.31.39.22/20 brd 172.31.47.255 scope global dynamic eth0 valid_lft 3208sec preferred_lft 3208sec inet6 2406:da14:8a1:a900:6413:xxxx:xxxx:xxxx/128 scope global dynamic valid_lft 431sec preferred_lft 131sec inet6 fe80::421:6aff:feef:879e/64 scope link valid_lft forever preferred_lft forever </code></pre> <p><code>inet6 2406:da14:8a1:a900:6413:xxxx:xxxx:xxxx/128 scope global dynamic</code> で正常にグローバルな IPv6 アドレスが設定されているのが確認できました。もし、設定がされていないということであれば <code>sudo systemctl restart network</code> や <code>/etc/sysconfig/network-scripts/ifcfg-eth0</code> の設定を見直してみてください。</p> <p>AmazonLinux2 のデフォルト設定のままで問題ないはずです。</p> <pre><code>$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes TYPE=Ethernet USERCTL=yes PEERDNS=yes DHCPV6C=yes DHCPV6C_OPTIONS=-nw PERSISTENT_DHCLIENT=yes RES_OPTIONS="timeout:2 attempts:5" DHCP_ARP_CHECK=no </code></pre> <h3>ALB を IPv6 対応にする</h3> <p>ALB が IPv6 で接続できるようにするため IP アドレスタイプを <code>dualstack</code> にします。アベイラビリティゾーンにそれぞれサブネットで割り当てた IPv6 CIDR が自動でセットされるはずです。ALB が IPv6 で受け付けて通信をしてくれるので、内部の EC2 インスタンスはグローバルな IPv6 アドレスが割り当てられてなくても問題ありません。</p> <img width="1024" alt="7" src="https://user-images.githubusercontent.com/235650/87826468-e5e65480-c8b3-11ea-81c7-bcae456d332b.png"> <h2>IPv6 通信の動作確認をする</h2> <p>まずは、 IPv6 アドレスを持った EC2 インスタンスから IPv6 通信ができているかの確認をします。</p> <pre><code>$ ping6 -c 5 ipv6.google.com PING ipv6.google.com(nrt20s17-in-x0e.1e100.net (2404:6800:4004:813::200e)) 56 data bytes 64 bytes from nrt20s17-in-x0e.1e100.net (2404:6800:4004:813::200e): icmp_seq=1 ttl=46 time=3.40 ms 64 bytes from nrt20s17-in-x0e.1e100.net (2404:6800:4004:813::200e): icmp_seq=2 ttl=46 time=2.84 ms 64 bytes from nrt20s17-in-x0e.1e100.net (2404:6800:4004:813::200e): icmp_seq=3 ttl=46 time=2.83 ms 64 bytes from nrt20s17-in-x0e.1e100.net (2404:6800:4004:813::200e): icmp_seq=4 ttl=46 time=2.86 ms </code></pre> <p><code>ping6</code> コマンドを使うと IPv6 で ping を打ってくれます。正常に返ってきています。</p> <pre><code>$ curl -D - -v6s -o /dev/null ipv6.google.com * Rebuilt URL to: ipv6.google.com/ * Trying 2404:6800:4004:813::200e... * TCP_NODELAY set * Connected to ipv6.google.com (2404:6800:4004:813::200e) port 80 (#0) > GET / HTTP/1.1 > Host: ipv6.google.com </code></pre> <p><code>curl</code> は <code>-6</code> オプションで IPv6 で通信できるので <code>ipv6.google.com</code> に接続をして正常にレスポンスされることが確認できます。</p> <p>最後に IPv6 対応をした ALB のホストに接続をします。まずは ALB ホストの名前解決をし <code>AAAA</code> レコードが IPv6 で設定されているかを確認します。</p> <pre><code>$ dig sample-zaru-1111.ap-northeast-1.elb.amazonaws.com aaaa ; <<>> DiG 9.10.6 <<>> sample-zaru-1111.ap-northeast-1.elb.amazonaws.com aaaa ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16995 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;sample-zaru-1111.ap-northeast-1.elb.amazonaws.com. IN AAAA ;; ANSWER SECTION: sample-zaru-1111.ap-northeast-1.elb.amazonaws.com. 60 IN AAAA 2406:da14:8a1:a901:d9:xxxx:xxxx:xxxx sample-zaru-1111.ap-northeast-1.elb.amazonaws.com. 60 IN AAAA 2406:da14:8a1:a900:7639:xxxx:xxxx:xxxx </code></pre> <p><code>dig</code> コマンドで <code>AAAA</code> レコードの問い合わせをすると正常に IPv6 アドレスが返ってきました。</p> <p>そして、 <code>curl</code> で問い合わせをしてみます。</p> <pre><code>$ curl -v6 sample-zaru-1111.ap-northeast-1.elb.amazonaws.com * Rebuilt URL to: sample-zaru-1111.ap-northeast-1.elb.amazonaws.com/ * Trying 2406:da14:8a1:a900:7639:xxxx:xxxx:xxxx... * TCP_NODELAY set * Connected to sample-zaru-1111.ap-northeast-1.elb.amazonaws.com (2406:da14:8a1:a900:7639:xxxx:xxxx:xxxx) port 80 (#0) </code></pre> <p>無事接続できました。</p> <p>逆に IPv4 環境から問い合わせてみます。</p> <pre><code>$ curl -v4 sample-zaru-1111.ap-northeast-1.elb.amazonaws.com * Trying ::ffff:18.177.xxx.xxx... * TCP_NODELAY set * Connected to sample-zaru-1817772116.ap-northeast-1.elb.amazonaws.com (::ffff:18.177.xxx.xxx) port 80 (#0) </code></pre> <p>正常に IPv4 として接続ができていることが確認できました。</p> <p>以上で、ALB + EC2 インスタンスを IPv6 対応し、接続確認の設定のやり方です。簡単ですね。</p></div></div><div class="article-sns-share-buttons"><a rel="nofollow" target="_blank" class="pocket-share sns-share-button" href="http://getpocket.com/edit?title=AWS+%E3%81%A7+IPv6+%E5%AF%BE%E5%BF%9C%E7%92%B0%E5%A2%83+%28+ALB+%2B+EC2+%29+%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E6%8E%A5%E7%B6%9A%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E3%81%99%E3%82%8B%E8%A8%AD%E5%AE%9A+by+zaru+%7C+Basicinc+Enjoy+Hacking%21&url=https%3A%2F%2Ftech.basicinc.jp%2Farticles%2F214"><svg class="sns-icon pocket-icon"><use xlink:href="/assets/icons-5bbe775037b55281ef0bc50d30a51f69c7c3914d399c7107e37f0702d98ae8a2.svg#pocket"></use></svg></a><a rel="nofollow" target="_blank" class="hatena-share sns-share-button" href="http://b.hatena.ne.jp/add?mode=confirm&title=AWS+%E3%81%A7+IPv6+%E5%AF%BE%E5%BF%9C%E7%92%B0%E5%A2%83+%28+ALB+%2B+EC2+%29+%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E6%8E%A5%E7%B6%9A%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E3%81%99%E3%82%8B%E8%A8%AD%E5%AE%9A+by+zaru+%7C+Basicinc+Enjoy+Hacking%21&url=https%3A%2F%2Ftech.basicinc.jp%2Farticles%2F214"><svg class="sns-icon hatena-icon"><use xlink:href="/assets/icons-5bbe775037b55281ef0bc50d30a51f69c7c3914d399c7107e37f0702d98ae8a2.svg#hatena"></use></svg></a><a rel="nofollow" target="_blank" class="twitter-share sns-share-button" href="https://twitter.com/share?text=AWS+%E3%81%A7+IPv6+%E5%AF%BE%E5%BF%9C%E7%92%B0%E5%A2%83+%28+ALB+%2B+EC2+%29+%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E6%8E%A5%E7%B6%9A%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E3%81%99%E3%82%8B%E8%A8%AD%E5%AE%9A+by+zaru+%7C+Basicinc+Enjoy+Hacking%21&url=https%3A%2F%2Ftech.basicinc.jp%2Farticles%2F214"><svg class="sns-icon twitter-icon"><use xlink:href="/assets/icons-5bbe775037b55281ef0bc50d30a51f69c7c3914d399c7107e37f0702d98ae8a2.svg#twitter"></use></svg></a><a rel="nofollow" target="_blank" class="facebook-share sns-share-button" href="http://www.facebook.com/share.php?u=https%3A%2F%2Ftech.basicinc.jp%2Farticles%2F214"><svg class="sns-icon facebook-icon"><use xlink:href="/assets/icons-5bbe775037b55281ef0bc50d30a51f69c7c3914d399c7107e37f0702d98ae8a2.svg#facebook"></use></svg></a></div></article></div><footer data-scope-path="layouts/_footer"><div class="footer-contents"><a class="root-link" href="/"><svg class="site-logo"><use xlink:href="/assets/icons-5bbe775037b55281ef0bc50d30a51f69c7c3914d399c7107e37f0702d98ae8a2.svg#logo"></use></svg><div class="site-title">Enjoy Hacking!</div></a><ul class="link-list"><li class="link-list-item"><a class="link" href="https://basicinc.jp/" rel="noopener" target="_blank">株式会社ベーシック</a></li><li class="link-list-item"><a class="link" href="https://basicinc.jp/enjoy-hacking" rel="noopener" target="_blank">エンジニア募集</a></li><li class="link-list-item"><a class="link" href="https://qiita.com/organizations/basicinc" rel="noopener" target="_blank">Qiita</a></li><li class="link-list-item"><a class="link" href="https://www.wantedly.com/companies/basicinc/projects" rel="noopener" target="_blank">Wantedly</a></li></ul></div></footer></body></html>