VPCでIPv6プライベートアドレスを利用してみました

記事タイトルとURLをコピーする

はじめに

VPCでIPv6プライベートアドレスが利用できるようになりました。そこで、実際にEC2のインスタンスにて割り当てて、どの様になるかを試してみました。

AWS が VPC とサブネットのプライベート IPv6 アドレッシングを開始 https://aws.amazon.com/jp/about-aws/whats-new/2024/08/aws-private-ipv6-addressing-vpcs-subnets/

AWS は、IP Address Manager (IPAM) による VPC とサブネットのプライベート IPv6 アドレッシングの一般提供開始を発表しました。AWS では、プライベート IPv6 アドレスは、ユニークローカル IPv6 ユニキャストアドレス (ULA) とグローバルユニキャストアドレス (GUA) の形をとることができ、プライベートアクセスにのみ使用できます。

利用可能なIPv6プライベートアドレスについて

AWSでは、以下の2種類のIPv6プライベートアドレスが利用可能です。

  1. ユニークローカルIPv6ユニキャストアドレス(ULA)
  2. プライベートIPv6グローバルユニキャストアドレス(GUA)

ULAは、IPv4のプライベートアドレスの様に、組織で自由に利用可能なIPv6アドレスとなります。fd00::/8の範囲から、ランダムに選んで利用します。IPv6プライベートアドレスを利用した場合は、こちらを選ぶパターンが多いのではないでしょうか。

GUAは、インターネットへのアクセスでも利用されるIPv6アドレスですが、インターネット上にルーティングせずにプライベートで利用するIPv6アドレスです。ルーティングされていない為、インターネットと通信する事が出来ずプライベートアドレスの様に振る舞うことができます。ただ、JPNICなどからグローバルIPv6アドレスを割り当ててもらう必要がある為、ハードルは高いです。

AWSにおけるプライベートIPv6アドレスの管理

プライベートIPv6アドレスをVPCで利用するには、Amazon VPC IP Address Manager (IPAM)が必要となります。プライベートIPv4アドレスの様に、VPC単体では利用できません。有料の機能もありますが、無料利用枠の範囲でIPv6プライベートアドレスの利用は可能です。

IPAMはAWS上のアドレスの割り当て、管理、監査を行なうためのサービスです。複数のアカウントやリージョン、VPCに跨って管理することができます。

今回の検証にあたっては、以下の概念をなんとなく理解していれば大丈夫でしょう。上から下に向って階層構造になっています。

  • IPAM
    • IPAMでIPアドレスを管理する単位です
  • スコープ
    • プライベート、パブリックの2種類です。今回はプライベートアドレスなので、プライベートスコープを利用します
  • プール
    • IPアドレス範囲(CIDR)の集りです。プールに任意のIPv6アドレスをプロビジョニングします。プールは複数の階層を持つことができますが、今回は検証なので単一のプールとしています
  • 割り当て
    • プールからVPCや別のプールに対してCIDRを割り振ることです。割り当てを実施することにより、VPCでアドレスを利用することが可能になります

検証

ULAを実際に利用してみます。

IPAMとスコープの作成

「データレプリケーションの許可」、「無料利用枠」を選択します。あとはオプション項目なので任意で設定します。IPAMを作成すると、デフォルトでプライベートとパブリックのスコープも作成されますので、こちらのデフォルトのスコープを利用して検証は実施します。

IPAMを作成

プールの作成

「デフォルトのプライベートスコープ」と「ロケール」、「プロビジョンするCIDR」を指定します。ULA CIDRを追加すると、ランダムな範囲でプールが作成されます。

IPアドレス管理プールを作成する

以下の通り、ULAがプロビジョニングされています。

プールを作成した結果

VPCへの割り当て

プールの作成が完了したら、VPCへの割り当てが可能になります。試しに、デフォルトのVPCへ追加してみました。

VPCへのCIDR追加

以下の通り、VPCにULAが追加されました。

CIDRを割り当てた結果

同様に、サブネットにもULAを割り当てます。

EC2インスタンスでの利用

インスタンスの設定では、ULAを割り当てたサブネットを選択して「IPv6 IP を自動で割り当てる」を有効化するだけです。

実際に起動し、ログインしてIPv6アドレスを確認してみました。

[ec2-user@ip-172-31-8-4 ~]$ 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 noprefixroute
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 02:ec:56:c9:13:fd brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname eni-0bfe784d39a654f56
    altname device-number-0.0
    inet 172.31.8.4/20 metric 512 brd 172.31.15.255 scope global dynamic ens5
       valid_lft 3335sec preferred_lft 3335sec
    inet6 fd7c:12de:1dce:0:2fbc:8ba5:dd38:8281/128 scope global dynamic noprefixroute
       valid_lft 393sec preferred_lft 83sec
    inet6 fe80::ec:56ff:fec9:13fd/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever

もう1台起動して、ULAに対してPingを実施してみました。

[ec2-user@ip-172-31-8-4 ~]$ ping fd7c:12de:1dce:2:3c:6f99:f157:9e56
PING fd7c:12de:1dce:2:3c:6f99:f157:9e56(fd7c:12de:1dce:2:3c:6f99:f157:9e56) 56 data bytes
64 bytes from fd7c:12de:1dce:2:3c:6f99:f157:9e56: icmp_seq=1 ttl=64 time=0.525 ms
64 bytes from fd7c:12de:1dce:2:3c:6f99:f157:9e56: icmp_seq=2 ttl=64 time=0.606 ms
64 bytes from fd7c:12de:1dce:2:3c:6f99:f157:9e56: icmp_seq=3 ttl=64 time=0.558 ms
64 bytes from fd7c:12de:1dce:2:3c:6f99:f157:9e56: icmp_seq=4 ttl=64 time=0.563 ms
^C
--- fd7c:12de:1dce:2:3c:6f99:f157:9e56 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3082ms
rtt min/avg/max/mdev = 0.525/0.563/0.606/0.028 ms

パブリックIPv6アドレスで無いため、グローバルIPv6アドレスへの到達性はありません。

[ec2-user@ip-172-31-8-4 ~]$ ping -6 dns.google
PING dns.google(dns.google (2001:4860:4860::8844)) 56 data bytes
^C
--- dns.google ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2102ms

[ec2-user@ip-172-31-8-4 ~]$

最後に

AWSでULAが利用できるようになった事により、IPv6ネットワークの構成に選択肢が増えました。

例えば、ULAを利用することにより、より強力にインターネットへの接続について制御することが可能になります。ULAが割り当てられたホストは、プロキシーやアプライアンスなどを経由しないとインターネットへのアクセスが不可能です。よって、IPv4プライベートアドレスと同様に必ずアプライアンスを経由しなけらばいけない構成を取ることができます。

また、プライベートIPv4アドレスに比べてULAは広大な範囲のアドレスを利用する事が可能です。IoT等でプライベートアドレスを大量に消費する様なサービスでも、IPアドレスの不足を避けることが可能です。

石田順一(記事一覧)

カスタマーサクセス部