[アップデート] AWS PrivateLinkがIPv6をサポートしました

IPv6サポートのビッグウェーブに乗り遅れるな
2022.05.12

IPv6を使っていきたいな

こんにちは、のんピ(@non____97)です。

皆さんはIPv6を使っていきたいなと思っていますか? 私は思っています。

最近、IPv6をサポートしたというアップデートが多いので、このビッグウェーブに乗りたいなと思っています。

本日、そのビッグウェーブに乗ってAWS PrivateLinkがIPv6をサポートしたとアナウンスがありました。

AWS公式ブログにもこちらのアップデートについての投稿がされていますね。

早速IPv6のPrivateLinkを触ってみたので紹介します。

アップデートの紹介

AWS PrivateLinkがIPv6をサポートしました。(2度目)

IPv6をサポートしたことにより、エンドユーザーがIPv6のIPアドレスしか持っていなくても接続できます。

IPv6の設定をするとIPv4で接続できなくなるということはなく、IPv4とIPv6どちらのIPアドレスも割り当てたデュアルスタックな状態にもできるので、単純にアクセス可能な間口が広がるイメージです。

AWS PrivateLinkとのIPv6互換性のネットワークトポロジ図 抜粋 : Expedite your IPv6 adoption with PrivateLink services and endpoints

IPv6のIPアドレスを割り当てるとなると、気になるのはインターネットからのアクセスです。インターネットからPrivateLinkにアクセスされるのは嫌ですよね。

安心してください。インターネットアクセスはデフォルトで無効になっています。そのため、Internet Gatewayを介したトラフィックを受信しません。

Internet access disabled by default: VPC Endpoint Elastic Network Interfaces (ENIs) with IPv6 addresses are private and not addressable from the Internet. The ENIs cannot receive any traffic over your VPC’s Internet Gateway (IGW), due to the DenyAllIGWTraffic attribute enabled on them. This cannot be disabled upon creation nor once deployed.

Expedite your IPv6 adoption with PrivateLink services and endpoints

IPv6のPrivateLinkは全てのパブリックAWSリージョンとGovCloudリージョンで利用可能です。

なお、タイプ「Gateway Load Balancer」ではサポートされません。

やってみた

検証の構成

検証は以下の構成で行います。

検証の構成図

Consumer VPC上にIPv6のPrivateLinkを作成し、Consumer VPCのEC2インスタンスからIPv6でPrivateLinkにアクセスします。NLBとNginxをインストールしたEC2インスタンス間はIPv4で通信します。

検証に必要なリソースはAWS CDKでデプロイします。

こちらのコードのリポジトリは以下になります。

なお、2022/5/12時点ではAWS CDK、CloudFormationではPrivateLinkにIPv6の設定をすることはできなかったので、AWS CDKでデプロイ後に手動でIPv6で通信できるように設定変更します。

作成されたリソースの確認とIPv4での接続テスト

まず、作成されたリソースの確認とIPv4での接続テストを行います。

npx cdk deployで各種リソースをデプロイします。

IPv6のトラフィックを受信するには、NLBのIPアドレスタイプをデュアルスタックにする必要があります。

NLBのIPアドレスタイプ」を確認すると、確かにdualstackになっています。

NLBのIPアドレスタイプの確認

次に、作成されたエンドポイントサービスを確認します。

サポートされているIPアドレスタイプ」はipv4になっています。

エンドポイントサービスの確認

PrivateLinkも確認します。

IPアドレスタイプ」、「DNSレコード」どちらもipv4となっています。

DNSレコードのIPタイプとIPアドレスタイプの確認

表示されているDNS名vpce-06a155d9b56cebe73-7527juv0.vpce-svc-0708827e5bacce7db.us-east-1.vpce.amazonaws.comを名前解決してみます。

$ dig vpce-06a155d9b56cebe73-7527juv0.vpce-svc-0708827e5bacce7db.us-east-1.vpce.amazonaws.com +short
10.10.0.46

IPv4のIPアドレスが返ってきました。

こちらのPrivateLinkにcurlでアクセスしてみます。

$ curl -I vpce-06a155d9b56cebe73-7527juv0.vpce-svc-0708827e5bacce7db.us-east-1.vpce.amazonaws.com
HTTP/1.1 200 OK
Server: nginx/1.20.0
Date: Thu, 12 May 2022 07:06:23 GMT
Content-Type: text/html
Content-Length: 3520
Last-Modified: Thu, 15 Jul 2021 21:46:50 GMT
Connection: keep-alive
ETag: "60f0acca-dc0"
Accept-Ranges: bytes

HTTPステータスコード200が返ってきましたね。PrivateLinkを介してNginxをインストールしたEC2インスタンスまで通信できていそうです。

PrivateLinkにIPv6でアクセスできるように設定変更

それでは、PrivateLinkにIPv6でアクセスできるように設定変更します。

まず、エンドポイントサービスのIPアドレスタイプを変更します。

エンドポイントサービスを選択して、アクション-サポートされているIPアドレスタイプを変更をクリックします。

サポートされているIPアドレスタイプを変更

サポートされているIPアドレスタイプ設定の変更」で、IPv6にチェックを入れて変更を保存をクリックします。

サポートされているIPアドレスタイプにIPv6を追加

サポートされているIPアドレス」にipv6が追加されました。

サポートされているIPアドレスにIPv6が追加されていることを確認

次に、エンドポイントのIPアドレスタイプとDNSレコードのIPタイプを変更します。

エンドポイントを選択して、アクション-エンドポイント設定の変更をクリックします。

エンドポイント設定の変更

IPアドレスタイプ」をデュアルスタックに、「DNSタイプ」をIPv6に変更して、変更を保存をクリックします。

エンドポイント設定変更

IPアドレスタイプ」がデュアルスタック、「DNSレコード」のIPタイプがipv6が変更されました。

DNSレコードのIPタイプとIPアドレスタイプ変更後の確認

IPv6での接続テスト

それでは、IPv6で接続テストをします。

表示されているDNS名vpce-06a155d9b56cebe73-7527juv0.vpce-svc-0708827e5bacce7db.us-east-1.vpce.amazonaws.comを名前解決してみます。

$ dig vpce-06a155d9b56cebe73-7527juv0.vpce-svc-0708827e5bacce7db.us-east-1.vpce.amazonaws.com AAAA +short
2600:1f18:4405:f202:81cb:f95e:4f0c:12d5

IPv6のIPアドレスが返ってきました。

こちらのPrivateLinkにcurlでアクセスしてみます。

$ curl -Iv vpce-06a155d9b56cebe73-7527juv0.vpce-svc-0708827e5bacce7db.us-east-1.vpce.amazonaws.com
*   Trying 2600:1f18:4405:f202:81cb:f95e:4f0c:12d5:80...
* Connected to vpce-06a155d9b56cebe73-7527juv0.vpce-svc-0708827e5bacce7db.us-east-1.vpce.amazonaws.com (2600:1f18:4405:f202:81cb:f95e:4f0c:12d5) port 80 (#0)
> HEAD / HTTP/1.1
> Host: vpce-06a155d9b56cebe73-7527juv0.vpce-svc-0708827e5bacce7db.us-east-1.vpce.amazonaws.com
> User-Agent: curl/7.79.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Server: nginx/1.20.0
Server: nginx/1.20.0
< Date: Thu, 12 May 2022 09:10:49 GMT
Date: Thu, 12 May 2022 09:10:49 GMT
< Content-Type: text/html
Content-Type: text/html
< Content-Length: 3520
Content-Length: 3520
< Last-Modified: Thu, 15 Jul 2021 21:46:50 GMT
Last-Modified: Thu, 15 Jul 2021 21:46:50 GMT
< Connection: keep-alive
Connection: keep-alive
< ETag: "60f0acca-dc0"
ETag: "60f0acca-dc0"
< Accept-Ranges: bytes
Accept-Ranges: bytes

<
* Connection #0 to host vpce-06a155d9b56cebe73-7527juv0.vpce-svc-0708827e5bacce7db.us-east-1.vpce.amazonaws.com left intact

IPv6でアクセスし、HTTPステータスコード200が返ってきたことを確認できました。IPv6を使用した状態でも、PrivateLinkを介してNginxをインストールしたEC2インスタンスまで通信できていそうです。

IPv6サポートのビッグウェーブに乗り遅れるな

AWS PrivateLinkがIPv6をサポートしたアップデートを紹介しました。

IPv6サポートのビッグウェーブに乗り遅れないように、アップデートキャッチアップしておきたいですね。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!