はじめに
re:Invent 前のアップデートにおいても IPv6 に触れる内容が多く、その背景に確かなニーズがあることを考え、2021年10月26日にAWSよりリリースされた IPv6 on AWS レポートを読み解いてみます。
基本的にはIPv6 on AWSの記述に沿うことを前提に記載していますが、IPv6に関する技術を個人的な理解で読み解いている側面もありますので、間違っている内容などあればコメントで教えてもらえると助かります。
本ブログ記事が参照しているオリジナルレポート
https://d1.awsstatic.com/whitepapers/IPv6-on-AWS.pdf
IPv6 on AWS
IPv6導入時の注意点
- ネットワーク制御の再評価: IPv6では、境界線のセキュリティに対するアプローチを再考し、セキュリティ態勢をさらに向上させる設計上の決定を行う機会がある
- 規模に応じた設計:利用可能なIPv6アドレスが増えたからといって、IPの割り当てや計画を短縮できるわけではない
- IPv6導入を段階的に進める :ビジネスニーズに焦点を当てて、必要な場所にIPv6を導入し、必要な期間はIPv4とIPv6を共存させることができる
IPv6導入の戦略と背景
IPv6導入の背景
- NATの限界と変換にあたり重複するIPアドレスに対する課題
- IPv6を採用せざると得ない組織や規制上の義務
- 政府の政策や業界の規制当局によって義務化されたIPv6エンドポイント
- モバイルなどIPv6専用ユーザーの増加における利用者損失を回避するためのIPv4/IPv6ネットワークの相互運用
- パブリックIPv4の枯渇による連続したIPアドレスレンジ割り当ての困難さ
- 組織内のネットワークが細分化または拡大することによるプライベートIPv4アドレスの枯渇
現時点でIPv6の導入が進んでいるのは、大手インターネットプロバイダ、ネットワーク機器メーカーなど、それ以外の企業における普及率は著しく低い。
理由は、NATやプロキシの普及で多くのグローバルIPv4アドレスを必要としていないこと、プライベートIPv4の組み合わせで組織内のネットワーク構成が実現できていることが挙げられる。
IPv4/IPv6のIPプロトコル間の後方互換性もIPv6採用の障害になっている。
IPv6導入の戦略
IPv6 on AWSドキュメントは、AWSユーザーがIPv6の導入に着手する際、その判断に用いる情報に役立つことも期待している。IPv6導入の戦略は、その導入の背景によって異なる。ここでは主要な4つの背景とそれに対応する採用戦略を記載している。
- 背景:プライベートIPv4の枯渇 採用戦略:デュアルスタックネットワークセグメント間でIPv6専用ルーティングを設定し、IPv6スタックを使用した通信を容易にする。デュアルスタックのロードバランサーなど、IPv6とIPv4の相互運用層を提供する
- 背景:パブリックIPv4の枯渇 採用戦略:デュアルスタックのVPCとサブネットを作成。ロードバランサーやエッジサービスなどのAWSサービスをデュアルスタックモードで構成し、AWSクラウド上に対応するDNSレコードを用意する。オプションとして、IPv4専用またはIPv6専用のデプロイメントでは、IPv4とIPv6に別々のエンドポイントを提供する
- 背景: IPv6のみのネットワークとの相互運用性 採用戦略:デュアルスタックのVPCを作成し、それを使ってNAT64(IPv4 パケットを IPv6 パケットに変換して転送)の相互運用性レイヤーをホストする。完全なデュアルスタック化は現実的でないことが多いため、相互運用性のあるレイヤーを提供することが望ましい
- 背景:IPv6が義務付けされたエンドポイント 採用戦略:デュアルスタックのVPCとサブネットを作成する。ロードバランサーやエッジサービスなどのAWSサービスをデュアルスタックモデルで構成し、AWSクラウド上に対応するDNSレコードを用意する。必要に応じて、IPv4専用およびIPv6専用のスタックで、IPv4とIPv6用の別々のエンドポイントを提供する
最終的なIPv4が廃止され、あらゆる場所がIPv6に対応することが目標とされているが、IPv4とIPv6は長期で共存することになることが予想される。ビジネス要件に応じて採用の判断を進めることが重要となる。AWSは小規模なステップからIPv6への移行を可能としている。
相互運用性の課題
- IPv4/IPv6 デュアルスタックモードの運用は、IPv4とIPv6の相互運用性に関する多くの問題を快活する反面、管理のオーバーヘッドを生み出す。例えば、各ネットワークスタックごとのセキュリティルールを管理する必要があるため、セキュリティ適用が複雑になる
- DNSレコードの管理、ルーティングなどの通信に関わるトラブルシューティングなどの管理も発生する
これらはデュアルスタックVPCやロードバランサーなどのAWSサービスが存在する相互運用層の実装・運用に注力することで、相互運用の課題解決の助けになる。
例えば、ロードバランサーを境界としたデュアルスタックを実装することで゙、ネットワーク全体をデュアルスタックにすることを回避できるかもしれない。これにより、既存のネットワークセグメントはほとんどの場合、IPv4で運用を続けることができ、新しいセグメントはIPv6で構築することができる。
AWSクラウドのネットワークにおけるIPv6導入計画
ENI(Elastic Network Interface)は、3つの異なるIPネットワークのモードで動作します。
- IPv4オンリーモード : リソースはIPv4で通信できますが、IPv6ノードと通信する場合は、相互運用性レイヤーが必要となります
- IPv6専用モード : リソースはIPv6で通信できますが、IPv4ノードと通信する場合は、相互運用性レイヤーが必要です
- デュアルスタックモード : リソースは、IPv4とIPv6の両方で通信できます。別の相互運用性レイヤーは必要ありません
AWSでのIPv6アドレッシング計画
- IPv6導入を進める組織にとって最も重要な初期作業の1つとしてIPv6アドレッシング計画の策定がある
- ほとんどの組織では、IPv4アドレスで構成された既存のAWS環境に並行する形でIPv6が導入されることが予想される
- IPv4アドレッシング計画は、時間とともにネットワークは成長する傾向がある。計画初期は何ら問題なかったアドレス計画も、その結果として、サブネットとして十分なアドレス空間を確保できていなかったり、連続していないフラグメントなサブネットが構成されることもある
- IPv4アドレッシング計画をもとにIPv6アドレッシング計画を策定することは、実質的に無限の規模を持つIPv6アドレス空間のメリットを享受できないIPv6アドレッシング計画となってしまう可能性がある
VPCに割り当てられるIPv6アドレス空間
VPCサブネットアドレッシング
アドレスレンジから見るとVPC内に256のサブネットを作成することが可能なCIDRが割り当てられることとなる
VPCへのIPv6 アドレス 割り当てには2つのオプションがある
VPCはユニークローカルアドレス CIDRをサポートしていない
AWSが割り当てたIPv6 VPCのCIDR
- デフォルトでは、/56 の IPv6 CIDRブロックをVPCにアサインする
- この範囲はVPCによって自動的に割り当てされるため、何かしら組織の定義された基準に基づく形など、カスタムした定義によったIPv6 CIDRブロックの割り当ては行えない
- 複数のVPCに対して連続したIPv6 CIDRブロックなどの割り当てが必要な場合は、BYOIPv6が必要となる
BYOIPv6 VPC CIDR
- IPv6アドレス空間を所有している場合は、Bring Your Own IPv6サービスを利用して自身が保有するIPv6アドレス空間をAWSアカウントにインポートすることができる
- 持ってくることができる最小のIPv6アドレス範囲は、AWSがパブリックアドバタイズしているCIDRでは/48、AWSがパブリックアドバタイズしていないCIDRでは/56となる
- /48のCIDRをインポート後、スペースから/56レンジを同じアカウントの個々のVPCに割り当てることができる。BYOIPに対応していないリージョンもある
IPv6対応のAWSクラウド・ネットワークの設計
Amazon VPCの設計
VPC設計時に考慮される主要なポイントは下記のとおり。
- 必要なAmazon VPC数と求められる性質
- Amazon VPCのCIDR範囲とIPアドレスの割り当て
- パブリック接続用のBYOIP(Bring Your Own IP)
- サブネットの数と種類
- 配置するアベイラビリティーゾーン
- トラフィックパス
- インターネットからの着信および発信トラフィック
- ハイブリッド接続
- VPC間の接続
- スケーラビリティと拡張性
これらのポイントのほとんどはIPv4とIPv6の両方に同じように適用されるが、既存のドキュメントには、ほとんどの場合、IPv4のみの文脈で記載されている。このセクションでは、IPv6に特化した情報を提供することで、これらの既存のドキュメントを補強している。
※ AWSは、本レポートを最大限に活用するために、まず既存のIPv4中心の資料を読み、その上でこのレポートを活用することを推奨している。
VPCのIPアドレスの割り当て
- VPCは IPv4、IPv6 デュアルスタックモードで動作する
- IPv4、IPv6の通信は互いに独立して制御される
- VPCとサブネットのIPv4サポートは無効化できない(VPCには少なくとも1つのIPv4 CIDRを割り当てる必要がある)
→ 2021年11月23日 にアップデートがあり、IPv6のみのサブネットを作成できるようになった(https://aws.amazon.com/jp/about-aws/whats-new/2021/11/amazon-virtual-private-cloud-ipv6-subnets-ec2-instances/)
- VPCに複数のIPv4 CIDRを割り当てることは可能だが、IPv6 CIDRは最大1つのみ
サブネットアドレスの割り当て
サブネット内のリソースのアドレス割り当ては下記の2つのレベルで行われる。
Amazon VPC ENIのIPアドレス
VPC内に配置されたENIが必要なリソースの例
ENIには1つ以上のIPv4アドレスとIPv6アドレスを割り当てることができる。IPv6を有効にするために、ENIを追加でリソースにアタッチする必要ない。
- IPv6が有効なサブネットに配置されたENIは、IPv6アドレスが割り当てられた状態で作成される
- 割り当てはENIごとに設定することができ、AWSが自動で割り当てるか、サブネットに割り当てたCIDRより未使用のアドレスを指定するか選択できる
- いずれも割り当てられたアドレスは明示的に変更しない限り、ENIが存在している期間は一定となる
デュアルスタックVPC構成例
リソースのネットワークスタック構成
- IPv4とIPv6の両方について、DHCPによるアドレス設定をサポートしている
- ドメイン名やDNSサーバーなど設定するDHCPオプションセットも提供(デュアルスタックの場合、オプションセットで利用されるIPアドレスはIPv4である必要がる)
- 既存または移行したワークロードにIPv6を追加しようとしている場合、ホストOSがDHCPv6に対応する必要がある
- DHCPを使わずに静的にホストOSへIPアドレスを設定することも可能。ただし、ENIに割り当てされているIPアドレスと一致している必要がある(アンチスプーフィングによる強制)
Amazon VPCサービスのサポート
これまでIPv4では 169.254.0.0/16 から公開されていた Amazon VPC サービス。Nitroベースのインスタンスでは IPv6においては IPv6 ULA(ユニークローカルアドレス) を使って提供されている
Instance Metadata Service (IMDS)
Route 53 DNSリゾルバ
- fd00:ec2::253 でDNSリゾルバにアクセスできる
NTPサーバ
- fd00:ec2::123 でNTPサーバにアクセスできる
Amazon VPC IPv6接続オプション
ここでは下記のオプションに触れている
VPCピアリング
- ピアリング自体はIPプロトコルに依存しない。
- 到達可能なルートテーブル(プレフィックスに関するサブネットのルートテーブル)が必要
- 同じピアリング内では、IPv4とIPv6の両方のプレフィックスがルーティングされる。
AWSトランジットゲートウェイ
既存のVPCにトランジットゲートウェイのアタッチメントを使用してを導入する場合は、ENIにIPv6アドレスが自動的に割り当てられないため、明示的に設定する必要がある。
デュアルスタック トランジットゲートウェイ
以下のリソースにトランジットゲートウェイにアタッチできる
- VPC
- 1つまたは複数のVPN接続
- 1つまたは複数のAWS Direct Connectゲートウェイ
- 1つまたは複数のTransit Gateway Connectのアタッチメント
- 1つまたは複数のトランジットゲートウェイのピアリング接続
AWSトランジットゲートウェイコネクトのIPv6対応アタッチメント
3rdパーティーの仮想アプライアンスとトランジットゲートウェイ間の接続とダイナミックルーティングを確立するトランジットゲートウェイコネクトは IPv6 も対応している。
AWSプライベートリンク
VPCシェアリング
Amazon VPCのインターネットアクセス
インターネットで到達可能なIPv6リソース
- VPC内におけるIPv6はグローバルアドレスであるため、Elastic IPアドレスは不要
- Amazonで割り当てられたIPv6アドレスは自動的にアドバタイズされる(BYOIPv6の場合はオプション)
- サブネットのルートテーブルにインターネットゲートウェイ(もしくはEgress-Onlyインターネットゲートウェイ)がアタッチされていればインターネットへの到達性を持つ
ハイブリッド接続
ハイブリッド接続は下記の2つの方法がある。
AWS Direct Connect
- 物理接続、アグリゲーション、VLAN、ジャンボフレームなど多くのダイレクトコネクトの設定はIPv4アドレス利用時と変わらない
- IPv6アドレス利用時においては、ダイレクトコネクトサービスのうちVIFとBGPピアリングのアドレス設定と構成はIPv4アドレス利用時と異なる
- VIFは、プライベート、トランジット、パブリックの3タイプがあ
既存のVIFにIPv6を導入しても、VIFの再構築や新しいVIFを導入する必要はない
トランジットとプライベートVIFのIPv6ピアリング
- ダイレクトコネクトゲートウェイを仮想プライベートゲートウェイ(VGW)に接続する場合、「許可されたプレフィックス」で明示的に値を設定する必要がある(::/0は設定できない)
- 「許可されたプレフィックス」を設定しない場合、全てのアドバタイズがブロックされる
- オンプレミスからAWSへのプレフィックスのアドバイスにIPv6固有の制限はない(Direct Connectのクォータは除く)
- アドバタイズされたプレフィックスは自身のAWSネットワーク内でのみ使用される
パブリックVIF IPv6ピアリング
- BGPピアリング用のアドレスをAWSが自動的に割り当てる
- CIDRは/125であり、カスタムIPv6アドレスを指定することはできない
- ただし、ピアリング上で通信するには独自のIPv6プレフィックスを使用する必要がある(自動的に割り当てられるのはBGPピアリング用のIPアドレスのみ)
IPv6では、作成時にIPv6プレフィックスを所有・指定する必要があり、所有を証明可能になっていない場合はVIFのプロビジョニングに失敗する
パブリック、プライベートまたはトランジットVIF上でのIPv6のルーティング
- パブリックVIFのピアリングでは、VPCのCIDRを含むサマリープレフィックスを受信する
- パブリックVIFとプライベート/トランジットVIFを併用する場合、どちらのVIFも同じVPCのプレフィックスを受信する
- 異なるVIF上でトラフィックの対称性を確保できるようカスタマーデバイス側でルートフィルタリングを考慮する必要がある
AWSマネージド Site-to-Site VPN
カスタマーゲートウェイ
- AWSはIPsecトンネル内でIPv6をサポートしているが、基本的な接続はIPv4を介して行われるため、AWSとカスタマー側のVPN終端デバイスの両方が、パブリックIPv4アドレスで指定できる必要がある
VPN接続
- ダウンロード可能なIPsec用の設定は、現時点(2021年10月23日 IPv6 on AWSレポート公開時)でIPv4のみサポートしている
- ダウンロード可能なIPsec用の設定は、利用者がカスタマーゲートウェイのデバイス固有の設定を考慮し、IPv4特有の設定をIPv6特有の設定に置き換える形であれば利用可能
- IPsec Phase 2 のスコープに LOCAL, REMOTE IPv6 ネットワークCIDRを使用する場合、P2PのIPをCIDRブロックに含める必要がある
- VPNの両側でfd00::/8を使用する場合にのみSAスコープを区切ることができ、一意ではないローカルアドレスを使用する場合はSAを ::/0 としてネゴシエートを許容する必要がある
- BGPピアリングを確立するためには、AWS側のトンネルを指すスタティックルートを定義する必要がある
IPv6のためのDNSの設計
エイリアスレコード
- エイリアスレコードのターゲットとしてAAAAレコードをサポートしている
パブリックIPv6のDNS解決
- AレコードとAAAAレコードの両方を持つRoute 53パブリックホストゾーンを使用できる
- IPv6サービスのヘルスチェックをサポートしている
VPC内のDNS解決
プライベートDNS解決
- プライベートホストゾーンはAAAAレコードをサポートしている
IPv6のセキュリティとモニタリング
ネットワークレベルのアクセスコントロール
VPCフローログ
- IPv4と同じようにIPv6トラフィックに関する情報を取得可能
- ENIが複数のIPアドレスを持っていて、トラフィックがセカンダリのIPv6アドレスに送信されている場合、VPCフローログのデフォルトフォーマット内の「dstaddr」フィールドにはプライマリのIPv6アドレスが表示される(回避するにはカスタムフォーマットのログで「pkt-dstaddr」を使用する)
VPCトラフィックミラーリング
- Amazon EC2インスタンスに接続されているネットワークインターフェースからのインバウンドおよびアウトバウンドのIPv4およびIPv6トラフィックをコピーできる
- ソースVPCのIPv4ルートテーブルを使ってトラフィックミラーターゲットに送信される。このときミラーリングされたトラフィックはすべてIPv4パケットにカプセル化されている
- IPv6トラフィックのトラフィックミラーリングを有効にするための特別な設定は必要ない
AWS Web Application Firewall
Web ACL
AWSシールド
AWSシステムマネージャー
- AWS Systems Managerで管理されるリソースは、Systems ManagerのエンドポイントへのIPv4接続が必要
- たとえば、Systems Manager Session Managerを使用してEC2インスタンスに接続するには、インスタンスがデュアルスタックを実行している必要がある
- インターネットまたはVPC エンドポイントへIPv4の接続性がなければ使用できない
拡張性をもつAWSにおけるデュアルスタックネットワークデザイン
Elastic Load Balancing
- IPv6をサポートするには、アプリケーションロードバランサーまたはネットワークロードバランサーを「デュアルスタック」IPアドレスタイプで構成する
- デュアルスタック IP アドレスタイプでは、ロードバランサーのDNS 名が IPv4 と IPv6 の両方のアドレスを提供し、それぞれ A レコードと AAAA レコードが作成される
ELBのIPv6サポート一覧表やターゲットホストへのIPv6アドレス情報の出力など制限事項が記載されているが、IPv6 on AWSレポートがリリースされた後の下記アップデートでサポート状況が更新されている。
2021年11月23日 のアップデートで アプリケーションロードバランサー とネットワークロードバランサーのエンドツーエンドの IPv6 通信がサポートされた
(https://aws.amazon.com/jp/about-aws/whats-new/2021/11/application-load-balancer-network-load-balancer-end-to-end-ipv6-support/)
AWS Global Accelerator
Amazon CloudFront
- クライアントからCloudFrontのエッジロケーションまで、IPv4とIPv6の両方をサポートしている
- エッジロケーションは、エンドユーザーにIPv6でネイティブに応答する
- クライアントは、IPv4とIPv6のどちらを使用していても、同じコンテンツと同じセキュリティ、可用性、パフォーマンス、スケーラビリティを受けることができる
- オリジンサーバーとの通信はIPv4のみとなる
アドバンストなデュアルスタックネットワークデザイン
AWS トランジットゲートウェイ コネクトアタッチメント
- トランジットゲートウェイ コネクトは、GREトンネル上で MP-BGP(Multi-protocol BGP)をサポートしている(アドレスファミリーと呼ばれる)
- アドレスファミリーにより、複数のネットワークプロトコルのルーティング情報を伝送できる
- これにより既存のトンネルに対して後からIPv6をに追加できる
- SD-WAN仮想アプライアンスをAWS Transit Gatewayにネイティブに統合することで各ブランチの接続を簡素化するソリューションに対して、トランジットゲートウェイ コネクトがMP-BGPをサポートすることでIPv4からIPv6の移行をシンプルにする
参考:Integrate SD-WAN devices with AWS Transit Gateway and AWS Direct Connect(https://aws.amazon.com/jp/blogs/networking-and-content-delivery/integrate-sd-wan-devices-with-aws-transit-gateway-and-aws-direct-connect/)
インターネットのアウトバウンドをIPv6で集中管理
- IPv4と同じようにアウトバウンドトラフィックを一元化するパターン
- IPv6-to-IPv6 Network Prefix Translation(NPTv6またはNAT66)と呼ばれる技術を用いたIPv6によるトランスペアレントプロキシを使用するアプローチ
- OSやアプリケーションで明示的に設定されたフォワードプロキシを使用するアプローチ
- Transit GatewayでEgressをつかさどるVPCに転送され、NAT66もしくはフォワードプロキシを介してインターネットへトラフィックが送信される
IPv6でトランジットゲートウェイを使用してIPv4アドレスのオーバーラップを回避する
- トランジットゲートウェイはIPv4アドレスのCIDRが重複しているVPCを接続できる
- ただし、ルートテーブルは競合するルートを保持することはできない
- IPv6プレフィックスがグローバルな特性を利用し、IPv4 CIDRが重複しているVPCに存在するホストの接続を提供する
補足
本記事の元となるレポート(IPv6 on AWS: https://d1.awsstatic.com/whitepapers/IPv6-on-AWS.pdf)は、2021年10月26日 に公開されています。
2021年11月にIPv6に関する複数のアップデートがあり、該当のレポートに記載されている制限事項がいくつか解消されている。
今後も、IPv6に関するアップデートが随時提供される可能性があるため、本記事にならびに本記事の元となるレポートを参考とする際は、記載されている制限事項が解消されているかAWSのアップデート情報を確認することを推奨します。