こんにちは。masm11 です。
IP アドレスが枯渇したと何度も言われているにもかかわらず、IPv6 はなかなか広まりませんね。今回は AWS で IPv6 の設定をしてみたので、設定の手順について説明したいと思います。
前提としては、AWS アカウントがあって、VPC に既に EC2 インスタンスが存在し、IPv4 でアクセスできるものとします。ゴールとしては IPv6 で HTTP アクセスできるところを目指します。
IPv6 について復習
その前に、まずは IPv6 について復習しておきましょう。
IPv6 には NAT がない
IPv4 の時は、EC2 の手前にポートフォワーディングするものがあって、クライアントはそこのグローバルアドレスに接続し、その接続が EC2 のプライベートアドレスに転送されていました。
一方、IPv6 には NAT はありません。従って、EC2 にグローバルアドレスを割り当て、クライアントはそのグローバルアドレスに接続することになります。
IP アドレスの表記方法が異なる
まずは IPv4 の場合を見てみます。
192.168.123.234
という表記をして、192.168
の部分をネットワーク部分、123
をサブネット部分、234
をホスト部分と言ったりします。どこで区切るかは、割り当てる人が決めます。また、ネットワーク部分のみを指して
192.168.0.0/16
、サブネット部分まで含めて192.168.123.0/24
と表記します。そして全体で 32ビットです。
次に IPv6 の場合を見てみます。
IPv6 は 128ビットあります。16進数表記で4桁ごとに
:
で区切っています。IPv4 の場合と同じように、先頭からネットワーク部分、サブネット部分、ホスト部分に分かれています。
また、ネットワーク部分を指して
1234:5678:9abc:de00::/56
、サブネット部分まで含めて1234:5678:9abc:def0::/64
などと表記します。
AWS に設定する
では復習はこのくらいにして、実際に AWS に設定していきましょう。
VPC に IPv6 CIDR を割り当てる
まずは VPC に設定します。
設定したい VPC を選択します。
メニューから「CIDR の編集」を選択します。
以下のような画面になりますので、「IPv6 CIDR の追加」ボタンをクリックします。
これだけで、VPC に IPv6 CIDR が割り当てられました。
ここで割り当てられたのは、/56
ですから、以下の赤枠で囲った部分ですね。
VPC ダッシュボードに戻ると、以下のように反映されています。
サブネットに IPv6 CIDR を割り当てる
次に、サブネットに設定します。
まずサブネットを一つ選択します。
メニューから「IPv6 CIDR の編集」を選択します。
「IPv6 CIDR の追加」をクリックします。
以下のような画面になりますので、サブネット部分の2桁を入力します。
この作業を VPC 内の各サブネットについて行います。その結果は以下の通りです。
サブネット部分をそれぞれ 02
, 01
, 00
と設定しています。
ルートテーブルを設定する
次にルートテーブルを設定します。
まずルートテーブルを選択します。
メニューから「ルートの編集」を選択します。
以下のように、デフォルトゲートウェイをインターネットゲートウェイに向けます。デフォルトゲートウェイは、IPv4 では 0.0.0.0/0
でしたね。IPv6 では ::/0
となります。インターネットゲートウェイはたぶん一つしかないと思いますので、それを選択しておけば大丈夫です。
EC2 インスタンスに IPv6 アドレスを割り当てる
いよいよ EC2 インスタンスに IPv6 アドレスを割り当てます。
まずは、その EC2 インスタンスが IPv6 に対応しているかどうかを確認します。
EC2 インスタンスを作る際に以下のような画面がありました。 ここに「IPv6 サポート」という列があり、ここに「はい」と表示されているかどうかを確認します。
なのですが、実は現行のインスタンスタイプなら全て対応しているそうです。旧世代のタイプを使っている場合は要確認です。
次に、EC2 ダッシュボードで EC2 インスタンスを選択します。IPv6 IP の欄はまだ空欄ですね。
メニューから「IP アドレスの管理」を選択します。
IPv6 の方の「新しい IP の割り当て」をクリックします。
以下のように、IPv6 アドレスを入力する欄が現れますが、ここは空欄のまま、「更新する」ボタンをクリックします。
すると、以下のように IPv6 アドレスが自動で決まります。
EC2 ダッシュボードに戻ると、IPv6 IP 欄に IPv6 アドレスが表示されました。
しかし、この時点ではまだ OS には反映されていません。 OS に反映させる方法なら何でも良いのですが、ここでは簡単に EC2 インスタンスを再起動します。
端末から IPv4 で ssh して、ip a
コマンドを実行すると、IPv6 アドレスが表示されました。OS が認識したことが確認できました。
セキュリティグループを設定する
...そろそろ飽きてきました? これで AWS 的には最後です。頑張りましょう。 セキュリティグループを設定します。
まずセキュリティグループを選択します。
メニューから「インバウンドのルールの編集」を選択します。
SSH をどこからでも接続できるようにします。IPv4 の時は 0.0.0.0/0
でしたね。IPv6 では ::/0
です。
HTTP でも接続したいので、HTTP も同様に設定します。
IPv6 疎通確認
では、ここまでできたので、疎通確認してみましょう。
ssh で IPv6 アドレスを指定してログインしてみます。
接続できました!
DNS を設定する
あとは、ブラウザからアクセスできるようにしましょう。DNS です。
今回は Route53 でなく ConoHa の DNS を使いました。 ConoHa のコントロールパネルは以下のような感じです。
IPv4 の場合、レコードの種類は A
でした。IPv6 では AAAA
です。A
が4文字なのは、IPv4 アドレスは 32ビット、IPv6 アドレスは 128ビットで4倍あることに由来しているそうです。
ホスト名は aws
としました。そして TTL、IPv6 アドレスを設定します。
ブラウザからアクセスする
ここで、nginx をインストールして起動する作業が入りますが、内容は省略します。必要でしたら Qiita の記事などを参考にしてみてください。
では、ブラウザからアクセスしてみます。
表示されました!
端末で /var/log/nginx/access.log
を確認したところ、
以下のようにアクセス元が IPv6 アドレスになっています。
これで、IPv6 で HTTP アクセスできたことが確認できました。
まとめ
以上、AWS の IPv6 設定について見てきました。いかがだったでしょうか。項目が多かったですね。しかし、毎回この手順が全部必要なわけではなく、VPC やサブネットは一度設定してしまえばいいので、あとは EC2 の設定以降だけで済みます。
社内でこの記事の説明をした後、どこが IPv6 に対応しているか調べていましたが、なんと少ないこと。今対応すれば、まだまだ IPv6 先駆者を名乗れそうに思いました。この記事がお役に立てればと思います。
ではまた!