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 + NAT64是一種在純 IPv6 網路中用於連接到 v4 的轉換機制,非常簡單。一個微小的 v6 前綴可以包含整個 v4 位址空間。當結果只有 A 記錄時,Fancy DNS 會在前前綴中產生 AAAA 記錄。而且雙棧NAT可以進行簡單的無狀態1對1轉換,速度快且不需要設定。

與走另一條路相反。假設遠端服務的位址是 2001:db8:114:6614:240e:6d9d:8a1d:59d3 整個 32 位元 IPv4 位址空間只能包含最後兩個數字組,即 8a1d:59d3部分。因此,花哨的 DNS 技巧和未經修改的應用程式將無法運作。理論上,雙堆疊代理可以終止 v4 連接並使 v6 連接出去。但是,您將如何取得 v6 位址,解析應用程式流量以尋找 DNS 或 TLS 中的名稱?如何保持流量持續進行,有狀態 NAT?

然而,Kubernetes 對於網路有自己的想法,EKS 也不例外。雖然它不只是落在 NAT64 中,EKS 採用雙堆疊設計。v6 分配給 pod,但也只是主機 v4,在 v4 到互聯網的情況下,它會經過幾次 NAT。

請注意應用程式上的 v6 到互聯網上的 v6 是多麼簡單,在沒有 NAT 的出口互聯網網關之外。獲得與 v6 外部資源的連接是您的組織這樣做的原因。除了消除根據 Pod 數量調整子網路大小的擔憂之外。

是的,在現代互聯網上實現這一點是一個項目。首先要做的就是EKS 上的 IPv6 清單集群必須使用 v6 建立。

你可以做這個專案。使用這個新設計建立第二個叢集。在其上啟動新應用程序,並在有維護機會時遷移其他應用程式。如果出現問題,制定恢復計劃,恢復到之前的狀態。在最壞的情況下,舊集群可以按原樣重建。畢竟,這是基礎設施即程式碼。

答案2

此選項完全隱藏在文件中,但可以從 IPv4 EKS 叢集進行 IPv6 出口。這可以使用以下方法完成啟用_V6_出口vpc-cni 插件上的選項。

這會為每個 pod 配置一個「fd00::ac:00/118」範圍內的節點私有位址。對於外部端點,pod 然後透過節點執行 NAT。

從技術上講,這不是“IPv4 到 IPv6 NAT”,但它確實實現了 IPv4 EKS 叢集上的 IPv6 出口的目標。

所需步驟:

  1. 在VPC和子網路上分配IPv6區塊,並在子網路上啟用「自動分配IPv6位址」。新增僅出口 Internet 閘道並適當設定路由表。
  2. 輪換所有節點以獲得為每個節點分配的 IPv6 位址。
  3. 確保 vpc-cni 插件版本為 1.13+。
  4. 使用以下配置更新 vpc-cni 插件:{"env":{"ENABLE_V6_EGRESS":"true"},"init":{"env":{"ENABLE_V6_EGRESS":"true"}}}。僅在輪轉所有節點後執行此操作,否則轉出將失敗。

相關內容