IPv6 Onlyでインターネット公開するAWSのEC2
1.目的
AWSにおいて2024年2月1日よりパブリックIPが課金対象となることから、パブリックIP/Elastic IPを使わない構成として、IPv6 Onlyでインターネット公開するEC2を構築したいです。
なお、パブリックIPは1IPで1時間あたり0.005ドルであることから、24時間365日利用すると年間43.8ドルとなり日本円で6,570円(為替150円/ドルの場合)の費用がかかるので、個人には痛い出費に。。。
2.想定読者
- AWS初心者(コンソールからEC2インスタンスを立ち上げることができる)
- ネットワーク初心者(IPv6についての最低限の理解がある)
- サーバ初心者(SSHでログインができる)
3.環境
- 2023/10時点でのAWS
- GoogleのIPv6チェックサイトにて、自宅PCのインターネット接続環境がIPv6対応済みであること
4.手順
a)VPC作成
-
VPCダッシュボードから[VPCを作成]
-
リソースを作成
- “作成するリソース"では[VPCなど]を選択することで、サブネットなど一括で作成できるので便利
- “名前タグ"はデフォルトでもよいし、自分の好きな文字列にしてもよい
- “IPv4 CIDRブロック"はデフォルトでもよいし、利用予定のサブネットを設定してもよい
- “IPv6 CIDRブロック"は[Amazon 提供のIPv6 CIDRブロック]を選択
- “アベイラビリティゾーン (AZ) の数"は1にする(検証で使うだけなので)
- “パブリックサブネットの数"は1にする(検証で使うだけなので)
- “プライベートサブネットの数"は0にする(検証で使うだけなので)
- “VPC エンドポイント"は0にすることにより、EC2とインターネットの通信がIPv6であることを確実に確認する
- [VPCを作成]を実行後、右下の[VPCを表示]
b)サブネットの確認
-
Subnetsメニューから作成したサブネットを選択
-
各設定状況を確認
- “IPv6 CIDR"が割り当てられていることを確認
- “パブリック IPv4 アドレスを自動割り当て"が[いいえ]であることを確認
c)ルートテーブルの確認
-
Route tablesメニューから作成した経路情報を選択
-
“ルート"タブで経路設定の内容を確認
- IPv6のデフォルトルート(送信先が::/0の行)のターゲットがInternet Gateway(igw-で始まる)になっていること
d)インターネットゲートウェイの確認
-
Internet Gatewayメニューにて、今回作成したインターネットゲートウェイを選択
- 今回作成したVPCに[Attached]となっていることを確認
e)セキュリティグループの作成
IPv6でEC2に対してSSH接続を許可するセキュリティグループを作成します。
-
VPCダッシュボードの"Security groups"メニューを開き、[セキュリティグループを作成]
-
セキュリティグループ名と説明、適用するVPCを指定
-
インバウンドルール編集
ここでは「IPv6のすべてのICMP」とIPv6のSSHを許可します。IPv6のSSHではソースを指定するのですが、ここでIPv6の落とし穴があります。一時IPv6アドレスを指定してしまうと、後で接続できなくなりますのでご注意ください。
-
アウトバウンドルール
ここはすべて許可します。なおIPv6 Onlyですので、EC2からインターネットへの通信において、インターネット側のサーバもIPv6対応している必要があります。IPv4では通信できません。
-
セキュリティグループを作成
-
セキュリティグループ確認
作成したセキュリティグループの内容が間違いないことを確認します。
f)EC2インスタンスの起動
今回作成したVPCにEC2インスタンスを立ち上げます。
-
EC2ダッシュボードのインスタンスメニュー
-
任意の名前でAmazonLinxu2023を作成
-
インスタンスタイプは無料枠のt2.micro、キーペアはテスト用に作成しておいたものを使います
-
ネットワーク設定は「編集」から赤枠のように、今回作成したVPC/サブネット/セキュリティグループを割り当てます。
※「パブリックIPの自動割り当て」は必ず無効化します
-
ストレージやインスタンス数は任意の値を指定します
-
インスタンス起動待ちです
-
起動後にIPv6アドレスを確認します
g)接続確認
TeratermからEC2にIPv6で接続してみます。TeratermでIPv6を使う場合は [ ] でIPv6アドレスを囲む必要があります。
-
IPアドレス入力
-
鍵ファイルを指定
-
ログイン成功を確認
UbuntuからEC2にIPv6で接続してみます。秘密鍵ファイルはopenssh形式に変換したものを使います。
```
$ ssh -i aws-mykey-ed25519_openssh.ppk ec2-user@2406:da14:df6:a400:b018:c9a2:83f6:8342
, #_
~\_ ####_ Amazon Linux 2023
~~ \_#####\
~~ \###|
~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
Last login: Fri Oct 27 04:19:22 2023 from 240d:1a:4f6:c400:a560:c6cc:4998:fb0f
[ec2-user@ip-10-0-2-199 ~]$
```
無事に接続することができました。セキュリティグループでhttpやhttpsを許可することで、Webページの公開も可能です。
5.デメリット
IPv6 OnlyでEC2を構築したものの、EC2から外部への通信にかなり大きい制約(※)が出てしまうことがわかりました。
なので、結論としてはIPv4とIPv6のデュアルスタック構成の方が現実的であると思いました。
※)接続先のインターネットサーバ(サービス)がIPv6対応していないと通信できない