DNS64 和 NAT64 - Amazon Virtual Private Cloud

DNS64 和 NAT64

NAT 閘道支援從 IPv6 到 IPv4 的網路地址轉譯,通常稱為 NAT64。NAT64 能協助您的 IPv6 AWS 資源與內部部署網路或網際網路上相同 VPC 或不同 VPC 中的 IPv4 資源通訊。您可以搭配 Amazon Route 53 Resolver 上的 DNS64 來使用 NAT64,或使用您自己的 DNS64 伺服器。

什麼是 DNS64?

在 VPC 中執行的僅限 IPv6 工作負載只能傳送和接收 IPv6 網路封包。如果沒有 DNS64,僅限 IPv4 服務的 DNS 查詢將產生 IPv4 目的地地址作為回應,而且您的僅限 IPv6 服務無法與其通訊。若要銜接此通訊斷層,您可以針對子網啟用 DNS64,此動作將套用至子網內所有 AWS 資源。透過 DNS64,Amazon Route 53 Resolver 會查找您所查詢之服務的 DNS 記錄,並執行下列其中一項作業:

  • 如果記錄包含 IPv6 地址,就會傳回原始記錄且會建立沒有任何透過 IPv6 轉譯的連線。

  • 如果沒有與 DNS 記錄中的目的地關聯的 IPv6 地址,Route 53 Resolver 會合成一個 IPv6 地址,方法是在記錄中的 IPv4 地址預先加上已知的 /96 字首 (在 RFC6052 (64:ff9b::/96) 中定義)。您的僅限 IPv6 服務會將網路封包傳送到合成的 IPv6 地址。然後,您需要透過 NAT 閘道路由此流量,該閘道會對流量執行必要的轉譯,以允許子網中的 IPv6 服務存取該子網外的 IPv4 服務。

您可以使用 modify-subnet-attribute、使用 AWS CLI 或使用 VPC 主控台來啟用或停用子網上的 DNS64,方法是選取子網並選擇 Actions (動作) > Edit subnet settings (編輯子網設定)。

什麼是 NAT64?

NAT64 可讓 Amazon VPC 中的僅限 IPv6 服務與相同 VPC (位於不同子網中) 或連線的 VPC、現場部署網路或透過網際網路的僅限 IPv4 服務通訊。

NAT64 會自動在您現有的 NAT 閘道或您建立的任何新 NAT 閘道上提供。您無法啟用或停用此功能。NAT 閘道所在的子網路不需要是雙堆疊子網路 NAT64 才能運作。

啟用 DNS64 後,如果僅限 IPv6 的服務透過 NAT 閘道將網路封包傳送至合成的 IPv6 地址,就會發生下列情況:

  • NAT 閘道會從 64:ff9b::/96 字首辨識原始目的地是 IPv4,並將 IPv6 封包轉譯為 IPv4,方法是取代:

    • 具有自己的私有 IP 之來源 IPv6,由網際網路閘道轉譯為彈性 IP 地址。

    • 目的地 IPv6 到 IPv4 (藉由截斷 64:ff9b::/96 字首的方式)。

  • NAT 閘道會透過網際網路閘道、虛擬私有閘道或傳輸閘道,將轉譯的 IPv4 封包傳送至目的地並啟動連線。

  • 僅限 IPv4 主機會傳回 IPv4 回應封包。建立連線後,NAT 閘道就會接受來自外部主機的回應 IPv4 封包。

  • 回應 IPv4 封包的目的地是 NAT 閘道,閘道會接收封包並透過以主機的 IPv6 地址來取代其 IP (目的地 IP) 並將 64:ff9b::/96 預先加回來源 IPv4 地址的方式來取消其 NAT。然後,封包會依照本機路由流向主機。

這樣,子網路中僅限 IPv6 的工作負載就可以透過 NAT 閘道與子網路外僅限 IPv4 的服務通訊。

設定 DNS64 與 NAT64

請依照本節中的步驟設定 DNS64 和 NAT64,以啟用與僅限 IPv4 的服務之通訊。

透過 AWS CLI 來啟用與網際網路上僅限 IPv4 的服務之通訊

如果您的子網具有僅限 IPv6 的工作負載,而且需要與子網外僅限 IPv4 的服務通訊,此範例會示範如何啟用這些僅限 IPv6 的服務來與網際網路上僅限 IPv4 的服務通訊。

您應該先在公有子網中設定 NAT 閘道 (與包含僅限 IPv6 的工作負載之子網分開)。例如,包含 NAT 閘道的子網應該有指向網際網路閘道的 0.0.0.0/0 路由。

請完成下列步驟,讓這些僅限 IPv6 的服務與網際網路上僅限 IPv4 的服務連接:

  1. 將下列三個路由新增至包含僅限 IPv6 的工作負載之子網的路由表:

    • 指向 NAT 閘道的 IPv4 路由 (如果有的話)。

    • 指向 NAT 閘道的 64:ff9b::/96 路由。這將允許來自僅限 IPv6 的服務之工作負載的流量,透過 NAT 閘道路由傳送至僅限 IPv4 的服務。

    • 指向僅傳出之網際網路閘道 (或網際網路閘道) 的 IPv6 ::/0 路由。

    請注意,指向 ::/0 到網際網路閘道將允許外部 IPv6 主機 (VPC 外部) 透過 IPv6 啟動連線。

    aws ec2 create-route --route-table-id rtb-34056078 --destination-cidr-block 0.0.0.0/0 --nat-gateway-id nat-05dba92075d71c408

    aws ec2 create-route --route-table-id rtb-34056078 --destination-ipv6-cidr-block 64:ff9b::/96 --nat-gateway-id nat-05dba92075d71c408

    aws ec2 create-route --route-table-id rtb-34056078 --destination-ipv6-cidr-block ::/0 --egress-only-internet-gateway-id eigw-c0a643a9
  2. 在包含僅限 IPv6 的工作負載之子網中啟用 DNS64 功能。

    aws ec2 modify-subnet-attribute --subnet-id subnet-1a2b3c4d --enable-dns64

現在,私有子網中的資源可以同時與網際網路上的 IPv4 和 IPv6 服務建立狀態連線。妥善設定您的安全群組和 NACL 來允許 64:ff9b::/96 流量的傳出與傳入。

在您的內部部署環境啟用中啟用與僅限 IPv4 的服務之通訊

Amazon Route 53 Resolver 可讓您將 DNS 查詢從 VPC 轉發到內部部署網路,反之亦然。若要這麼做,請執行下列操作:

  • 您可以在 VPC 中建立 Route 53 Resolver 輸出端點,並將其指派至您要 Route 53 Resolver 轉發查詢的來源 IPv4 地址。對於您的內部部署 DNS 解析程式而言,這些是 DNS 查詢產生來源的 IP 地址,因此應該是 IPv4 地址。

  • 您要建立一或多項規則,指定您希望 Route 53 Resolver 轉送到您內部部署解析程式之 DNS 查詢的網域名稱。您也要指定內部部署解析程式的 IPv4 地址。

  • 既然您已經設定 Route 53 Resolver 輸出端點,您必須在包含僅限 IPv6 的工作負載之子網上啟用 DNS64,並透過 NAT 閘道路由路由目的地為內部部署網路的任何資料。

DNS64 針對內部部署網路中僅限 IPv4 的目的地之運作方式:

  1. 您可以將 IPv4 地址指派給 VPC 中 Route 53 Resolver 的輸出端點。

  2. 從您的 IPv6 服務的 DNS 查詢,會透過 IPv6 進入 Route 53 Resolver。Route 53 Resolver 會比對轉送規則的查詢,並取得內部部署解析程式的 IPv4 地址。

  3. Route 53 Resolver 會將查詢封包從 IPv6 轉換為 IPv4,並將其轉送到輸出端點。端點的每個 IP 地址都代表一個 ENI,會將要求轉送至 DNS 解析程式的內部部署 IPv4 地址。

  4. 內部部署解析程式會透過 IPv4 將回應封包藉由輸出端點傳回 Route 53 Resolver。

  5. 假設查詢是從啟用了 DNS64 的子網提出,Route 53 Resolver 會執行兩件事:

    1. 檢查回應封包的內容。如果記錄中有 IPv6 地址,則記錄會保持內容原貌,但如果僅包含 IPv4 記錄,就合成一個 IPv6 記錄,並且在 IPv4 地址前面加上 64:ff9b::/96

    2. 重新包裝內容,並透過 IPv6 將其傳送至 VPC 中的服務。