デュアルスタック構成に対応したAmazon VPCをTerraformで構築してみた

AWS

2024.6.18

Topics

はじめに

こんにちは、第三SAチームのamaebiです。
今更ではありますが、今年の2月にパブリック IPv4 アドレスが有料化したことを皆さんは覚えておりますでしょうか?


出典:新着情報 – パブリック IPv4 アドレスの利用に対する新しい料金体系を発表 / Amazon VPC IP Address Manager が Public IP Insights の提供を開始

こちらはIPv4の枯渇問題に伴ってIPv6への移行を促すためのものですが、急にIPv6 on AWS 環境を構築するといってもなかなか難しいかと思います。
そこで今回は、IPv4/IPv6両方に対応したデュアルスタック構成をTerraformで構築してみましたので、そちらのご紹介をしていきます。
こちらのテンプレートをTerraform環境上でコピペするだけでデュアルスタック構成を構築できるような内容になっております。

なぜデュアルスタック構成なのか?

ではなぜ、今回の構成内容がデュアルスタックなのかといいますといくつかの問題点を考慮しているからです。

  • 現在のAWSサービスではIPv6のみの構成にすることが難しい
  • アプリケーションやミドルウェア等の問題でそもそもIPv6が使えない場合がある
  • オンプレミスや社内ネットワークがIPv6に対応していない場合がある

現在のAWSサービスではIPv6のみの構成にすることが難しい

現在IPv6のみをサポートしたAWSサービスは非常に少なく、ほとんどがIPv4/IPv6どちらもサポートしたデュアルスタックなのです。
その他にも、一部サービスの中には、IPv6がそもそも対応していないケースがございます。(Amazon CloudFront、Amazon Systems Managerなど)

IPv6 をサポートするサービス

次のテーブルは、デュアルスタックのサポート、IPv6 のみのサポート、および IPv6 をサポートする AWS のサービス を一覧しています。この表は、IPv6 の追加サポートがリリースされたときに更新されます。サービスが IPv6 をサポートする方法についての情報は、そのサービス用のドキュメントを参照してください。

出典:IPv6 をサポートする AWS サービス
「2024/06/07 現在」

アプリケーションがIPv6に対応していない場合がある

IPv6のみAWS環境にオンプレミスで稼働しているアプリケーションサーバーを移行した場合、古いアプリケーションですとそもそもIPv6に対応していないケースが多く、接続できないことが発生する恐れがございます。
そうしますと、アプリケーションの改修コストなどが大幅にかかってしまいます。

オンプレミスや社内ネットワークがIPv6に対応していない場合がある

主にクラウドとオンプレミス両方を使用したハイブリット構成を考える際に、ネットワーク設定の見直しが発生することがございます。
その際、オンプレミスや社内ネットワークがIPv6に対応していない場合、そちら側のネットワーク構成の再構築などの大幅なコストがかかってしまいます。

上記の理由から、IPv4/IPv6両方に対応したデュアルスタック構成で構築しております。

今後IPv6のみがサポートされたAWSサービスが増えていくと思いますので、本ブログで紹介しているTerraformを元に発展させていただけますと幸いです。
その他のIPv6 on AWS構成を考えている方がおりましたら、公式のレファレンスアーキテクチャをご覧ください。
~ Dual Stack and IPv6-only Amazon VPC Reference Architectures ~

構成図

今回は、上記の公式レファレンスアーキテクチャを参考に以下のような構成で構築していきます。
・実際のサンプルコードでは、Amazon 提供のIPv6 CIDR ブロックを使用しておりますので、IPv6アドレスが異なる場合がございます。
・トラフィックの分散を分かりやすくするため、構成図内にEC2インスタンスを配置しております。

Terraform コード

実際のTerraform コードがこちらになります。
・Terraform v1.6.5

providers.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}
 
provider "aws" {
  region = "ap-northeast-1"
}
main.tf
#--------------------------------------
# VPC
#--------------------------------------

resource "aws_vpc" "vpc" {
  cidr_block           = "10.0.0.0/16"
  instance_tenancy     = "default"
  enable_dns_support   = true
  enable_dns_hostnames = true

  assign_generated_ipv6_cidr_block = true

  tags = {
    Name = "example-vpc"
  }
}

#--------------------------------------
# Subnet
#--------------------------------------

resource "aws_subnet" "public_subnet_1a" {
  vpc_id            = aws_vpc.vpc.id
  availability_zone = "ap-northeast-1a"

  map_public_ip_on_launch = true
  cidr_block              = cidrsubnet(aws_vpc.vpc.cidr_block, 8, 1)

  assign_ipv6_address_on_creation = true
  ipv6_cidr_block                 = cidrsubnet(aws_vpc.vpc.ipv6_cidr_block, 8, 0)

  tags = {
    Name = "example-public-subnet-1a"
  }
}

resource "aws_subnet" "private_subnet_1a" {
  vpc_id            = aws_vpc.vpc.id
  availability_zone = "ap-northeast-1a"

  map_public_ip_on_launch = true
  cidr_block              = cidrsubnet(aws_vpc.vpc.cidr_block, 8, 2)

  assign_ipv6_address_on_creation = true
  ipv6_cidr_block                 = cidrsubnet(aws_vpc.vpc.ipv6_cidr_block, 8, 1)

  tags = {
    Name = "example-private-subnet-1a"
  }
}

resource "aws_subnet" "public_subnet_1c" {
  vpc_id            = aws_vpc.vpc.id
  availability_zone = "ap-northeast-1c"

  map_public_ip_on_launch = true
  cidr_block              = cidrsubnet(aws_vpc.vpc.cidr_block, 8, 3)

  assign_ipv6_address_on_creation = true
  ipv6_cidr_block                 = cidrsubnet(aws_vpc.vpc.ipv6_cidr_block, 8, 2)

  tags = {
    Name = "example-public-subnet-1c"
  }
}

resource "aws_subnet" "private_subnet_1c" {
  vpc_id            = aws_vpc.vpc.id
  availability_zone = "ap-northeast-1c"

  map_public_ip_on_launch = true
  cidr_block              = cidrsubnet(aws_vpc.vpc.cidr_block, 8, 4)

  assign_ipv6_address_on_creation = true
  ipv6_cidr_block                 = cidrsubnet(aws_vpc.vpc.ipv6_cidr_block, 8, 3)

  tags = {
    Name = "example-private-subnet-1c"
  }
}

#--------------------------------------
# Route table
#--------------------------------------

resource "aws_route_table" "public_rt_1a" {
  vpc_id = aws_vpc.vpc.id

  tags = {
    Name = "example-rt-public-1a"
  }
}

resource "aws_route_table_association" "public_rt_1a" {
  route_table_id = aws_route_table.public_rt_1a.id
  subnet_id      = aws_subnet.public_subnet_1a.id
}

resource "aws_route_table" "private_rt_1a" {
  vpc_id = aws_vpc.vpc.id

  tags = {
    Name = "example-rt-private-1a"
  }
}

resource "aws_route_table_association" "private_rt_1a" {
  route_table_id = aws_route_table.private_rt_1a.id
  subnet_id      = aws_subnet.private_subnet_1a.id
}

resource "aws_route_table" "public_rt_1c" {
  vpc_id = aws_vpc.vpc.id

  tags = {
    Name = "example-rt-public-1c"
  }
}

resource "aws_route_table_association" "public_rt_1c" {
  route_table_id = aws_route_table.public_rt_1c.id
  subnet_id      = aws_subnet.public_subnet_1c.id
}

resource "aws_route_table" "private_rt_1c" {
  vpc_id = aws_vpc.vpc.id

  tags = {
    Name = "example-rt-private-1c"
  }
}

resource "aws_route_table_association" "private_rt_1c" {
  route_table_id = aws_route_table.private_rt_1c.id
  subnet_id      = aws_subnet.private_subnet_1c.id
}

#--------------------------------------
# Internet Gateway
#--------------------------------------

resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.vpc.id

  tags = {
    Name = "example-igw"
  }
}

resource "aws_route" "public_rt_igw_1a_ipv4" {
  route_table_id         = aws_route_table.public_rt_1a.id
  gateway_id             = aws_internet_gateway.igw.id
  destination_cidr_block = "0.0.0.0/0"
}

resource "aws_route" "public_rt_igw_1a_ipv6" {
  route_table_id              = aws_route_table.public_rt_1a.id
  gateway_id                  = aws_internet_gateway.igw.id
  destination_ipv6_cidr_block = "::/0"
}

resource "aws_route" "public_rt_igw_1c_ipv4" {
  route_table_id         = aws_route_table.public_rt_1c.id
  gateway_id             = aws_internet_gateway.igw.id
  destination_cidr_block = "0.0.0.0/0"
}

resource "aws_route" "public_rt_igw_1c_ipv6" {
  route_table_id              = aws_route_table.public_rt_1c.id
  gateway_id                  = aws_internet_gateway.igw.id
  destination_ipv6_cidr_block = "::/0"
}

#--------------------------------------
# Egress-Only Internet Gateway
#--------------------------------------

resource "aws_egress_only_internet_gateway" "egress_only_igw" {
  vpc_id = aws_vpc.vpc.id

  tags = {
    Name = "example-egress-only-igw"
  }
}

resource "aws_route" "private_rt_egress_only_igw_1a" {
  route_table_id              = aws_route_table.private_rt_1a.id
  egress_only_gateway_id      = aws_egress_only_internet_gateway.egress_only_igw.id
  destination_ipv6_cidr_block = "::/0"
}

resource "aws_route" "private_rt_egress_only_igw_1c" {
  route_table_id              = aws_route_table.private_rt_1c.id
  egress_only_gateway_id      = aws_egress_only_internet_gateway.egress_only_igw.id
  destination_ipv6_cidr_block = "::/0"
}

#--------------------------------------
# Nat Gateway
#--------------------------------------

resource "aws_eip" "ngw_1a_eip" {
  domain = "vpc"

  tags = {
    Name = "example-ngw-1a-eip"
  }
}

resource "aws_nat_gateway" "public_ngw_1a" {
  allocation_id = aws_eip.ngw_1a_eip.id
  subnet_id     = aws_subnet.public_subnet_1a.id

  tags = {
    Name = "example-nat-gateway-1a"
  }
}

resource "aws_route" "private_rt_ngw_1a" {
  route_table_id         = aws_route_table.private_rt_1a.id
  nat_gateway_id         = aws_nat_gateway.public_ngw_1a.id
  destination_cidr_block = "0.0.0.0/0"
}

resource "aws_eip" "ngw_1c_eip" {
  domain = "vpc"

  tags = {
    Name = "example-ngw-1c-eip"
  }
}

resource "aws_nat_gateway" "public_ngw_1c" {
  allocation_id = aws_eip.ngw_1c_eip.id
  subnet_id     = aws_subnet.public_subnet_1c.id

  tags = {
    Name = "example-nat-gateway-1c"
  }
}

resource "aws_route" "private_rt_ngw_1c" {
  route_table_id         = aws_route_table.private_rt_1c.id
  nat_gateway_id         = aws_nat_gateway.public_ngw_1c.id
  destination_cidr_block = "0.0.0.0/0"
}

確認

では、実際に構築できたか確認していきましょう。

VPC

IPv4/IPv6の両方が設定されていることが確認できました。

リソースマップも以下の通りです。

サブネット

IPv4/IPv6の両方が設定されていることが確認できました。
その他、ルーティングテーブルの関連付け、ルーティング設定が正しく設定されていることを確認できました。
example-public-subnet-1a


example-private-subnet-1a


example-public-subnet-1c


example-private-subnet-1c

Internet Gateway

Egress-Only Gateway

Nat Gateway

example-nat-gateway-1a

example-nat-gateway-1c

全ての項目が正しく設定されていることが確認できました。

IPv6の疎通確認

パブリックサブネット、プライベートサブネットそれぞれにEC2インスタンスを構築し、IPv6で疎通できるかどうか確認します。

パブリックサブネット

各種パブリックサブネットに配置したEC2インスタンスに対して、SSHを使用してログインします。

パブリックサブネット1aに配置したインスタンス

[xxxx@xx-xx-xx-xx .ssh]$ ssh -i test.pem ec2-user@2406:da14:151b:f200:d36c:2776:fbc6:95c7
The authenticity of host '2406:da14:151b:f200:d36c:2776:fbc6:95c7 (2406:da14:151b:f200:d36c:2776:fbc6:95c7)' can't be established.
ED25519 key fingerprint is SHA256:+H8KsquY6nyWyKF2IZlbGaGurWese0Le7EPKzduh/Is.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '2406:da14:151b:f200:d36c:2776:fbc6:95c7' (ED25519) to the list of known hosts.
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-10-0-1-84 ~]$ 

現在ログインしているサーバーから自身のサーバーに対してIPv6でpingを通して疎通確認を行います。

[ec2-user@ip-10-0-1-84 ~]$ ping -6 2406:da14:1129:1d00:f915:b478:c250:ce74
PING 2406:da14:1129:1d00:f915:b478:c250:ce74(2406:da14:1129:1d00:f915:b478:c250:ce74) 56 data bytes
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=1 ttl=63 time=0.437 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=2 ttl=63 time=0.576 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=3 ttl=63 time=0.518 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=4 ttl=63 time=0.429 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=5 ttl=63 time=0.440 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=6 ttl=63 time=0.597 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=7 ttl=63 time=0.523 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=8 ttl=63 time=0.487 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=9 ttl=63 time=0.437 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=10 ttl=63 time=0.550 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=11 ttl=63 time=0.516 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=12 ttl=63 time=0.477 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=13 ttl=63 time=0.514 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=14 ttl=63 time=0.469 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=15 ttl=63 time=0.489 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=16 ttl=63 time=0.473 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=17 ttl=63 time=0.477 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=18 ttl=63 time=0.507 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=19 ttl=63 time=0.535 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=20 ttl=63 time=0.487 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=21 ttl=63 time=0.478 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=22 ttl=63 time=0.448 ms
^C
--- 2406:da14:1129:1d00:f915:b478:c250:ce74 ping statistics ---
22 packets transmitted, 22 received, 0% packet loss, time 21813ms
rtt min/avg/max/mdev = 0.429/0.493/0.597/0.043 ms
[ec2-user@ip-10-0-1-84 ~]$ 

疎通が確認できました。

パブリックサブネット1cに配置したインスタンス

[xxxx@ip-xx-xx-xx-xx .ssh]$ ssh -i test.pem ec2-user@2406:da14:151b:f202:6c5:7127:4e63:c34b
The authenticity of host '2406:da14:151b:f202:6c5:7127:4e63:c34b (2406:da14:151b:f202:6c5:7127:4e63:c34b)' can't be established.
ED25519 key fingerprint is SHA256:GKAOAA/7qtbI5EelGUuIUAMqKNWRDIAzwi4auTVscL0.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '2406:da14:151b:f202:6c5:7127:4e63:c34b' (ED25519) to the list of known hosts.
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-10-0-3-15 ~]$ 

現在ログインしているサーバーから自身のサーバーに対してIPv6でpingを通して疎通確認を行います。

[ec2-user@ip-10-0-3-15 ~]$ ping -6 2406:da14:1129:1d00:f915:b478:c250:ce74
PING 2406:da14:1129:1d00:f915:b478:c250:ce74(2406:da14:1129:1d00:f915:b478:c250:ce74) 56 data bytes
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=1 ttl=63 time=1.96 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=2 ttl=63 time=1.95 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=3 ttl=63 time=2.00 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=4 ttl=63 time=1.99 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=5 ttl=63 time=1.98 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=6 ttl=63 time=1.99 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=7 ttl=63 time=2.01 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=8 ttl=63 time=1.96 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=9 ttl=63 time=1.96 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=10 ttl=63 time=1.96 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=11 ttl=63 time=1.99 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=12 ttl=63 time=1.95 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=13 ttl=63 time=2.03 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=14 ttl=63 time=1.96 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=15 ttl=63 time=1.96 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=16 ttl=63 time=1.95 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=17 ttl=63 time=1.98 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=18 ttl=63 time=1.98 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=19 ttl=63 time=1.99 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=20 ttl=63 time=1.96 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=21 ttl=63 time=2.02 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=22 ttl=63 time=2.11 ms
^C
--- 2406:da14:1129:1d00:f915:b478:c250:ce74 ping statistics ---
22 packets transmitted, 22 received, 0% packet loss, time 21025ms
rtt min/avg/max/mdev = 1.952/1.984/2.111/0.036 ms
[ec2-user@ip-10-0-3-15 ~]$ 

疎通が確認できました。

プライベートサブネット

次に現在ログインしているEC2インスタンスを経由して、各種プライベートサブネットに配置したEC2インスタンスに対して、SSHを使用してログインします。

プライベートサブネット1aに配置したインスタンス

[ec2-user@ip-10-0-1-84 .ssh]$ ssh -i test.pem ec2-user@2406:da14:151b:f201:a75:2da:d8d7:bcf9
The authenticity of host '2406:da14:151b:f201:a75:2da:d8d7:bcf9 (2406:da14:151b:f201:a75:2da:d8d7:bcf9)' can't be established.
ED25519 key fingerprint is SHA256:whEkaOvBy75F6niW4EwuE0l4GhIYQ+4gybF/K52/2i0.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '2406:da14:151b:f201:a75:2da:d8d7:bcf9' (ED25519) to the list of known hosts.
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-10-0-2-98 ~]$ 

現在ログインしているサーバーから自身のサーバーに対してIPv6でpingを通して疎通確認を行います。

[ec2-user@ip-10-0-2-98 ~]$ ping -6 2406:da14:1129:1d00:f915:b478:c250:ce74
PING 2406:da14:1129:1d00:f915:b478:c250:ce74(2406:da14:1129:1d00:f915:b478:c250:ce74) 56 data bytes
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=1 ttl=63 time=0.442 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=2 ttl=63 time=0.463 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=3 ttl=63 time=0.522 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=4 ttl=63 time=2.23 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=5 ttl=63 time=1.97 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=6 ttl=63 time=0.450 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=7 ttl=63 time=2.80 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=8 ttl=63 time=0.530 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=9 ttl=63 time=0.508 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=10 ttl=63 time=0.442 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=11 ttl=63 time=0.515 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=12 ttl=63 time=0.477 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=13 ttl=63 time=0.478 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=14 ttl=63 time=0.747 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=15 ttl=63 time=0.438 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=16 ttl=63 time=0.483 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=17 ttl=63 time=0.647 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=18 ttl=63 time=0.463 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=19 ttl=63 time=0.434 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=20 ttl=63 time=0.449 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=21 ttl=63 time=0.475 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=22 ttl=63 time=1.58 ms
^C
--- 2406:da14:1129:1d00:f915:b478:c250:ce74 ping statistics ---
22 packets transmitted, 22 received, 0% packet loss, time 21793ms
rtt min/avg/max/mdev = 0.434/0.797/2.804/0.667 ms
[ec2-user@ip-10-0-2-98 ~]$ 

疎通が確認できました。

プライベートサブネット1cに配置したインスタンス

[ec2-user@ip-10-0-3-15 .ssh]$ ssh -i test.pem ec2-user@2406:da14:151b:f203:a3f5:34b2:8738:a20f
The authenticity of host '2406:da14:151b:f203:a3f5:34b2:8738:a20f (2406:da14:151b:f203:a3f5:34b2:8738:a20f)' can't be established.
ED25519 key fingerprint is SHA256:BQuj6KkiOaV9MWh2XqkvstATNz8MulakhNmauvyzc0w.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '2406:da14:151b:f203:a3f5:34b2:8738:a20f' (ED25519) to the list of known hosts.
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-10-0-4-172 ~]$ 

現在ログインしているサーバーから自身のサーバーに対してIPv6でpingを通して疎通確認を行います。

[ec2-user@ip-10-0-4-172 ~]$ ping -6 2406:da14:1129:1d00:f915:b478:c250:ce74
PING 2406:da14:1129:1d00:f915:b478:c250:ce74(2406:da14:1129:1d00:f915:b478:c250:ce74) 56 data bytes
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=1 ttl=63 time=1.84 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=2 ttl=63 time=1.93 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=3 ttl=63 time=1.93 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=4 ttl=63 time=1.99 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=5 ttl=63 time=1.98 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=6 ttl=63 time=1.91 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=7 ttl=63 time=1.86 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=8 ttl=63 time=1.97 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=9 ttl=63 time=1.90 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=10 ttl=63 time=1.95 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=11 ttl=63 time=1.94 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=12 ttl=63 time=1.86 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=13 ttl=63 time=1.94 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=14 ttl=63 time=1.91 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=15 ttl=63 time=1.98 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=16 ttl=63 time=1.92 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=17 ttl=63 time=1.94 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=18 ttl=63 time=1.94 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=19 ttl=63 time=1.97 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=20 ttl=63 time=1.90 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=21 ttl=63 time=1.97 ms
64 bytes from 2406:da14:1129:1d00:f915:b478:c250:ce74: icmp_seq=22 ttl=63 time=1.98 ms
^C
--- 2406:da14:1129:1d00:f915:b478:c250:ce74 ping statistics ---
22 packets transmitted, 22 received, 0% packet loss, time 21026ms
rtt min/avg/max/mdev = 1.843/1.931/1.985/0.039 ms
[ec2-user@ip-10-0-4-172 ~]$ 

IPv6の疎通が確認できました。

これで全ての設定の確認が完了しました。

最後に

デュアルスタック構成に対応したAmazon VPCをTerraformで構築してみました。
今後、AWS上のIPv4が使えなくなる恐れもございますので、今からIPv6への移行を検討するものいいかもしれません。

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

amaebi

amaebiと申します。クラウドエンジニアとしてまだまだ未熟ですが、これから精進していきたいです。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら