AWS での IPv4 から IPv6 への NAT

AWS での IPv4 から IPv6 への NAT

AWS は、NAT64 を使用して IPv6 のみのノードから外部の IPv4 のみのサービスに接続することをサポートしています。その逆の場合に相当するものはありますか?

コンテキストとして、私は EKS クラスターを持っていますが、これは現在すべてプライベート サブネット上の IPv4 のみです。外部 IP との通信は NAT ゲートウェイ経由で行われます (通常は Webhook または同様の送信要求用)。現在、一部の外部サービスは IPv6 のみに切り替わっています。クラスター全体を IPv6 に移行せずにそれらに接続する方法はありますか? EKS はデュアル スタック ネットワークをサポートしていないため、移行は非常に大規模でリスクの高いプロジェクトになる可能性があります。

答え1

いいえ、IPv4 ソースから IPv6 宛先への変換は、逆方向、つまりネイティブ IPv6 の場合と比べて、それほど簡単ではありません。

DNS64 + NAT64IPv6 のみのネットワークで v4 に接続するために使用する移行メカニズムはシンプルです。小さな v6 プレフィックスに v4 アドレス空間全体を含めることができます。Fancy DNS は、結果に A レコードしかない場合に、このプレフィックスに AAAA レコードを生成します。また、デュアル スタック NAT では、ステートレスな 1 対 1 の変換がシンプルに実行され、高速で構成も必要ありません。

反対方向の場合と対照的です。リモート サービスのアドレスが であるとします。32 2001:db8:114:6614:240e:6d9d:8a1d:59d3 ビット IPv4 アドレス空間全体は、最後の 2 桁のグループ、つまり 8a1d:59d3部分のみを含むことができます。そのため、高度な DNS トリックや変更されていないアプリケーションは機能しません。理論的には、デュアル スタック プロキシは v4 接続を終了し、v6 接続を送信できます。しかし、v6 アドレスを通過させるにはどうすればよいでしょうか。DNS または TLS で名前のアプリケーション トラフィックを解析するにはどうすればよいでしょうか。また、フローを継続するにはどうすればよいでしょうか。ステートフル NAT はどうでしょうか。

しかし、Kubernetesはネットワークに関して独自の考え方を持っており、EKSも例外ではありません。NAT64を導入するだけでなく、EKS はデュアル スタック設計を採用しています。v6 はポッドに割り当てられますが、v4 がインターネットに接続される場合は、ホストのみの v4 が数回 NAT されます。

アプリケーション上の v6 からインターネット上の v6 への移行が、NAT なしの出力インターネット ゲートウェイから非常にシンプルであることに注目してください。v6 外部リソースとの接続を確立することが、組織がこれを実行する理由です。さらに、ポッドの数に応じてサブネットのサイズを決定することに関する懸念も解消されます。

これを現代のインターネットに実装するのは確かにプロジェクトです。EKS 上の IPv6 のチェックリストクラスターは v6 で作成する必要があります。

このプロジェクトは実行できます。この新しい設計で 2 番目のクラスターを作成します。その上で新しいアプリケーションを起動し、メンテナンスの機会があるときに他のアプリケーションを移行します。問題が発生した場合に以前の状態に戻すための復元プランを用意します。最悪の場合でも、古いクラスターを元の状態に戻せます。結局のところ、これはコードとしてのインフラストラクチャです。

答え2

このオプションはドキュメントにはあまり記載されていませんが、IPv4 EKSクラスタからIPv6出力を行うことは可能です。これは、ENABLE_V6_EGRESSvpc-cni アドオンのオプション。

これにより、各ポッドは「fd00::ac:00/118」の範囲のノードプライベート アドレスで設定されます。外部エンドポイントの場合、ポッドはノード経由で NAT を実行します。

技術的には、これは「IPv4 から IPv6 への NAT」ではありませんが、IPv4 EKS クラスターでの IPv6 出力の目標は達成されます。

必要な手順:

  1. VPC とサブネットに IPv6 ブロックを割り当て、サブネットで「IPv6 アドレスの自動割り当て」を有効にします。出力専用のインターネット ゲートウェイを追加し、ルーティング テーブルを適切に構成します。
  2. すべてのノードをローテーションして、各ノードに IPv6 アドレスを割り当てます。
  3. vpc-cni アドオンがバージョン 1.13 以上であることを確認してください。
  4. vpc-cni アドオンを次の設定で更新します。{"env":{"ENABLE_V6_EGRESS":"true"},"init":{"env":{"ENABLE_V6_EGRESS":"true"}}}すべてのノードをローテーションした後にのみこれを実行してください。そうしないと、ロールアウトは失敗します。

関連情報