背景
- IPv6/IPv4 dualstackまたはIPv6-onlyのWebサイトにIPv6でアクセスできるかを試したい
- ただし、ローカル環境からはIPv4しか利用できない
- IPv6 OnlyのEC2インスタンスを作成したが、IPv4しか利用できないため直接接続できない
- また、IPv6ではSystems Managerエンドポイントにアクセスできない(執筆時点)ため、SSM Session ManagerからEC2インスタンスにアクセスできない
構成
- IPv4/IPv6をもつEC2インスタンス①を作成する
- EC2インスタンス①のIPv6アドレスを使用して、IPv6のみを持つEC2インスタンス②に接続する
- EC2インスタンス②からEgress-only Internet Gatewayを使用してIPv6でInternetアクセスする
実装
VPC作成
サブネット作成
InternetGateway作成
Egress-Only InternetGatewayの作成
- Egress-Only InternetGatewayを作成し、VPCに紐づける
- IPv6サブネットのルートテーブルのデフォルトルート(IPv6)をEgress-Only InternetGatewayにする
EC2インスタンス作成
- EC2インスタンス①(IPv4/IPv6)作成
- IPv4/IPv6サブネットを指定
- パブリックIP自動割り当て有効化(or 無効化でSSM用VPCエンドポイント用意)
- IPv6 IP を自動で割り当てる有効化
- インバウンド許可なしSecurity Group設定
- SSM用ロール設定
- EC2インスタンス②(IPv6のみ)作成
- IPv6サブネットを指定
- VPC内からのみのアクセス許可するSecurity Group設定
動作確認
- Session ManagerでEC2インスタンス①に接続
- Session ManagerでEC2インスタンス①からEC2インスタンス②にSSH
### キー作成(ローカルで取得したキーをコピペでEC2上に作成)
$ cat << EOF > xxx.pem
-----BEGIN RSA PRIVATE KEY-----
........................
........................
........................
........................
-----END RSA PRIVATE KEY-----
EOF
### SSH接続
$ ssh -i xxx.pem ec2-user@[EC2インスタンス②のIPv6アドレス]
- EC2インスタンス②からcurlコマンドを実行するとIPv6アドレスで接続できていることを確認可能
$ curl -v https://xxxxxx.cloudfront.net/
* Trying [IPv6アドレス]:443...
* Connected to xxxxxx.cloudfront.net (IPv6アドレス) port 443