目錄

簡介

必要條件

為什麼需要NAT64?

如何實現IPv4和IPv6之間的通訊？

NAT64轉換的型別

案例 1:如果要從IPv6網路中的主機與IPv4伺服器（位於IPv4網路中）通訊

有狀態NAT64情況下的資料包流

配置NAT64指南

NAT 46路由器上的配置

檢驗NAT64詳細資訊

案例 2:從僅IPv4客戶端發起到僅IPv6伺服器的流量

配置NAT46指南

NAT 46路由器上的配置

檢驗NAT46

轉換方案及其適用性

重要故障排除命令，以防在NAT64實施期間遇到任何問題

簡介

NAT64是IPv4到IPv6過渡和IPv4-IPv6共存的機制。與DNS64一起，NAT64的主要用途是允許僅使用IPv6的客戶端發起與僅使用IPv4的伺服器的通訊。NAT64還可以用於僅使用IPv4的客戶端，使用靜態或手動繫結發起與僅使用IPv6的伺服器的通訊。我已經在本檔案中解釋了這兩種情況。

必要條件

IPv6和NAT基礎知識

為什麼需要NAT64?

- 幾乎所有現代IP裝置都支援IPv6，但許多舊裝置僅支援IPv4。我們需要一種通過IPv6網路連線這些裝置的方法。

- 一些將IPv4地址併入上層的較舊應用程式預計仍會存在一段時間，並且必須適應IPv6。

- 當IPv4地址不可用時，IPv6地址會被分配給新裝置；但是，Internet上的大多數可訪問內容仍然是IPv4。這些新裝置必須到達該內容。

- 幾年後，情況將恰恰相反：大部分內容將是IPv6，但只有少數僅支援IPv4的裝置仍必須訪問它。

- 僅支援IPv4的裝置必須與僅支援IPv6的裝置通訊，且使用者感知極少或完全沒有使用者感知。

如何實現IPv4和IPv6之間的通訊？

因為IPv6不能向後相容IPv4，所以我們需要轉換機制，這可以分為三類：

- 雙堆疊介面:IPv4和IPv6共存的最簡單解決方案（非互通性）是使介面變成「雙語」，這樣它們就可以將IPv4與IPv4裝置以及IPv6與IPv6裝置通訊。它們使用的版本取決於從裝置接收的資料包的版本，或者取決於查詢裝置地址時DNS提供的地址型別。雙協定棧是從IPv4過渡到IPv6的預定方式，但假設過渡在IPv4耗盡之前完成。但實際情況並非如此，因此雙重堆疊變得更加複雜：如果可用的IPv4地址不足，如何為每個介面同時提供IPv4地址和IPv6地址？

- 通道:通道也是關於共存而不是互操作性的。它們允許一個版本的裝置或站點通過另一個版本的網段（包括Internet）通訊。因此，兩個IPv4裝置或站點可以通過IPv6網路交換IPv4資料包，或者兩個IPv6裝置或站點可以通過IPv4網路交換IPv6資料包。

- 翻譯員:轉換器通過將一個版本的資料包的報頭更改為另一個版本的報頭，在IPv4裝置和IPv6裝置之間建立互操作性。

#Like其他過渡方法中，轉換不是長期戰略，最終目標應該是本機IPv6。  但是，與隧道相比，轉換提供兩個主要優勢：

- 轉換提供了逐步無縫遷移到IPv6的方法。

- 內容提供商可以向IPv6 Internet使用者提供透明的服務。

NAT64轉換的型別

無狀態NAT64

在無狀態NAT64中，不會保留狀態，這意味著每個IPv6使用者都需要一個專用的IPv4地址。由於我們處於IPv4耗盡階段，因此很難採用NAT64的這種模式。當您擁有的IPv6地址數量較少時(NAT46)，使用無狀態NAT64的唯一優點就是，

有狀態NAT64

在有狀態NAT64中，狀態被維護。一個IP地址用於具有不同埠號的所有專用使用者。在上圖中，一個IPv4地址與不同的埠號一起使用，供該LAN中訪問公共IPv4伺服器的IPv6的所有使用者使用。

以下是有關有狀態和無狀態NAT64轉換之間差異的詳細資訊：

無狀態NAT64

有狀態NAT64

1:1翻譯

1:N翻譯

不保留IPv4地址

保留IPv4地址

確保端到端地址透明性和可擴充性

使用地址過載，因此缺少端到端地址透明性

轉換時未建立任何狀態或繫結

每個唯一的轉換都會建立狀態或繫結

需要分配IPv4可轉換IPv6地址（強制性要求）

對IPv6地址分配的性質沒有要求

需要手動或基於DHCPv6的地址分配IPv6主機

自由選擇任意IPv6地址分配模式：手動、DHCPv6、SLAAC

- 在本文檔中，我通過實驗室練習演示了有狀態NAT64，其中IPv6主機希望與IPv4伺服器通訊。此外，我還演示了無狀態NAT64，其中IPv4主機希望連線到IPv6伺服器，這種情形也稱為NAT46。

案例 1:如果要從IPv6網路中的主機與IPv4伺服器（位於IPv4網路中）通訊

- 在上圖中，位於IPv6網路中的主機想要連線至Web伺服器(www.example.com)，而IPv4網路中的IP 10.1.113.2。

- 如果我們直接從ipv6網路中的主機ping ipv4地址(10.1.113.2)，裝置將不能理解此ipv4地址，因為它只理解ipv6地址。因此該封包會在主機上遭捨棄。

- 同樣，如果我們從ipv4網路ping ipv6地址，裝置將不能理解ip，並且裝置將引發錯誤，因為預設情況下只為ipv4網路配置了它。

- 此外，ipv4資料包無法僅通過ipv6網路路由，反之亦然。因此需要進行轉換，以便我們可以根據需要將邊緣裝置上的資料包轉換為ipv4或ipv6。

NAT64有三個主要元件

- NAT64字首：任何/32、/40、/48、/56、/64或/96字首，它們與轉換後的IPv4地址一起使用，用於在僅支援IPv6的網路上傳輸資料包。NAT64字首可以是網路特定字首(NSP)或公認字首(WKP)。 NSP由組織分配，通常是該組織的IPv6字首的子網。NAT64的WKP為64:ff9b::/96。如果未指定或配置NSP，NAT64將使用WKP優先於轉換的IPv4地址。NAT64字首也稱為Pref64::/n。

- DNS64伺服器：DNS64伺服器作為IPv6 AAAA記錄的普通DNS伺服器運行，但當AAAA記錄不可用時，還將嘗試查詢IPv4 A記錄。如果找到A記錄，DNS64會使用NAT64字首將IPv4 A記錄轉換為IPv6 AAAA記錄。這給僅支援IPv6的主機留下可以使用IPv6與伺服器通訊的印象。

- NAT64路由器：NAT64路由器將NAT64字首通告到僅IPv6網路，同時執行僅IPv6網路與僅IPv4網路之間的轉換。

有狀態NAT64情況下的資料包流

1.假設在上述圖中，IPv6網路中的主機希望與Web伺服器www.example.com(10.1.113.2)通訊，該伺服器是僅支援IPv4的伺服器。

2.要使此通訊成為可能，必須在我們的IPv6網路中安裝DNS64伺服器，該伺服器可以理解並解析DNS的ipv4請求。

3. DNS64伺服器作為IPv6 AAAA記錄的普通DNS伺服器運行，但當AAAA記錄不可用時，還將嘗試查詢IPv4 A記錄。如果找到A記錄，DNS64會使用NAT64字首將IPv4 A記錄轉換為IPv6 AAAA記錄。這給僅支援IPv6的主機留下可以使用IPv6與伺服器通訊的印象。

4.現在www.example.com的DNS解析請求將傳送到DNS64伺服器。它首先在其IPv6 AAAA記錄表中查詢，但找不到任何IPv6 AAAA記錄，因為此網站伺服器屬於Ipv4地址。之後，它會查詢其IPv4資料庫，並發現與此網站匹配的IPv4地址。現在，DNS64伺服器將此IPv4地址轉換為IPv6地址，方法是將此IPv4地址轉換為十六進位制並將字首NAT64字首。這樣，只會讓IPv6主機感覺它可以使用IPv6與Web伺服器通訊。

5.在僅IPv6網路中，藉助NAT64字首將資料包路由到執行NAT64的裝置，該字首為IPv4地址的十六進位制值。

6. NAT64路由器將NAT64字首通告到僅IPv6網路，同時執行僅IPv6網路和僅IPv4網路之間的轉換。

7.資料包到達執行NAT64轉換的裝置後，這些資料包將與我們為Nat64配置的ACL進行匹配。如果資料包與此ACL匹配，則進一步使用NAT64轉換資料包；如果資料包與配置的ACL不匹配，則使用常規IPv6路由將資料包路由到其目的地。

8.有狀態NAT64利用配置的訪問控制清單(ACL)和字首清單來過濾允許建立NAT64狀態的IPv6發起的流量。IPv6資料包的過濾是在IPv6到IPv4方向上完成的，因為IPv6主機和IPv4地址之間的對映的動態分配只能在此方向上完成。有狀態NAT64支援使用PAT配置的IPv4到IPv6資料包流的端點相關過濾。

9.在有狀態NAT64 PAT配置中，資料包流必須來自IPv6領域，並在NAT64狀態表中建立狀態資訊。來自IPv4端且沒有先前建立狀態的封包會遭捨棄。靜態網路地址轉換(NAT)和非PAT配置支援獨立於終端的過濾。

根據為有狀態字首配置的自動路由設定，將第一個IPv6資料包路由到NAT虛擬介面(NVI)。有狀態NAT64會執行一系列查詢，以根據訪問控制清單(ACL)查詢確定IPv6資料包是否與任何已配置的對映匹配。根據對映，IPv4地址（和埠）與IPv6目標地址相關聯。

轉換IPv6資料包並使用以下方法形成IPv4資料包：

1. 通過從IPv6地址中去除字首來提取目標IPv4地址。源地址將被分配的IPv4地址（和埠）替換。

2. 其餘欄位從IPv6轉換為IPv4，以形成有效的IPv4資料包。

10.在會話資料庫和繫結資料庫中建立新的NAT64轉換。根據配置更新池和埠資料庫。

11.IPv6資料包流的返回流量和後續流量將使用此會話資料庫條目進行轉換。

- 要使NAT64正常工作，必須具備從ipv6到ipv6網路中介面的ipv6地址的可達性，並且必須具備從NAT64路由器到ipv4伺服器地址的可達性。

配置NAT64指南

步驟1.主機A是隻使用IPv6的主機，希望與伺服器www.example.com進行通訊。這會觸發DNS查詢(AAAA:www.example.com)連線到DNS64伺服器。DNS64是此過程的關鍵元件。DNS64伺服器既是IPv6的DNS伺服器，也是IPv4的DNS伺服器。它為客戶端建立了一個幻覺：可以使用IPv6地址訪問IPv4伺服器。

主機A傳送DNS查詢(AAAA:www.example.com)連線到DNS64伺服器。對於主機A，這是對IPv6伺服器的正常DNS AAAA查詢。

步驟2. DNS64伺服器收到主機A的DNS AAAA查詢。為了解析域名，DNS64伺服器向DNS AAAA授權伺服器傳送有關www.example.com的查詢。

步驟3. IPv6 DNS AAAA授權伺服器返迴響應，指示它沒有www.example.com的AAAA資源記錄。

步驟4.收到對AAAA查詢的空應答（名稱錯誤）響應時，會觸發DNS64伺服器傳送A查詢(A:www.example.com)連線到IPv4 DNS A授權伺服器。

步驟5. IPv4 DNS A授權伺服器確實有www.example.com的A資源記錄，並返回帶有伺服器IPv4地址的響應(A:www.example.com 10.1.113.2)。

步驟6. DNS64伺服器從DNS A授權伺服器接收IPv4地址，並通過在地址前面新增其NAT64字首2800:1503:2000:1:1:/96來合成AAAA記錄，並將IPv4地址轉換為十六進位制0a01:7102。主機A將使用此地址作為到達www.example.com伺服器的目標IPv6地址。

步驟8.合成的AAAA記錄對主機A完全透明。對主機A，它看起來好像可以通過IPv6網路和網際網路訪問www.example.com。主機A現在具有將IPv6資料包傳輸到www.example.com所需的編址資訊，如下所示：

- IPv6目標地址：2800:1503:2000:1:1::0a01:7102

- IPv6源地址：2001:DB8:3001::9

步驟9. NAT64路由器在其啟用NAT64的介面上接收主機A傳送的IPv6資料包。它將傳入資料包與配置的ACL匹配。如果未找到匹配項，則使用常規IPv6路由以未轉換的方式轉發資料包。如果找到相符專案，則封包會進行以下轉譯：

- IPv6報頭轉換為IPv4報頭。

- 通過刪除IPv6有狀態NAT64字首2800:1503:2000:1:1::/96，將IPv6目標地址轉換為IPv4地址。IPv6地址的低32位0a01:7102表示為點分十進位制IPv4地址10.1.113.2。

- 使用配置的IPv4地址池將IPv6源地址轉換為IPv4地址。根據NAT64配置，這可能是1:1地址轉換或使用IPv4地址過載。這類似於IPv4的NAT。在此方案中，主機A的源IPv6地址被轉換為50.50.50.50 IPv4地址。

- 有狀態NAT64為源地址和目標地址建立IP地址轉換狀態。這些狀態是在第一次對資料包執行轉換時建立的。流中的後續資料包將保持此狀態。當流量和狀態維護計時器到期時，狀態結束。

步驟10. NAT64轉換後，使用常規IPv4路由查詢過程轉發轉換後的IPv4資料包。在此案例中，IPv4目的地位址10.1.113.2用於轉送封包。

步驟11. 10.1.113.2處的www.example.com伺服器會做出應答，最終由NAT64路由器接收。

步驟12. NAT64路由器在其一個啟用NAT64的介面上接收來自www.example.com伺服器的IPv4資料包。路由器檢查IPv4資料包，以確定IPv4目標地址是否存在NAT64轉換狀態。如果轉換狀態不存在，則丟棄該資料包。如果IPv4目標地址的轉換狀態確實存在，NAT64路由器將執行以下任務：

- IPv4報頭轉換為IPv6報頭。

- 使用現有的NAT64轉換狀態將IPv4源地址轉換為IPv6源地址。在此場景中，源地址從IPv4地址10.1.113.2轉換為IPv6地址2800:1503:2000:1:1::0a01:7102。目的地址從IPv4地址50.50.50.50轉換為2001:DB8:3001::9。

步驟13.轉換後，使用常規IPv6路由查詢過程轉發IPv6資料包。

NAT 46路由器上的配置

1.面向IPv6的介面：

2.面向IPv4的介面：

3.建立匹配ipv6流量的ACL

4.啟用NAT64 IPv6到IPv4地址對映：

#nat64 prefix stateful 2800:1503:2000:1:1::/96 --------------->伺服器IP將對映到此ipv6 ip地址。您可以在此處配置任何ipv6網路地址，但此ipv6網路地址應可從您的ipv6網路訪問。此外，DNS64伺服器必須具有此ipv6網路地址到伺服器ipv4地址的對映。

5. #nat64 v4池池1 50.50.50.50 50.50.50.50 --------------->原始ipv6源地址將轉換為此池的ip，而資料包將進入ipv4網路。

6. #nat64 v6v4 list nat64acl pool1 overload --------------->這會將與nat64acl匹配的ipv6地址轉換為池中的ipv4地址

7. 十六進位制值10.1.113.2為0a01:7102。完成此配置後，從PC A對2800:1503:2000:1:1::0a01:7102地址執行ping操作。

#ping 2800:1503:2000:1:1::0a01:7102

檢驗NAT64詳細資訊

#show nat64轉換

#show nat64統計資訊

案例 2:從僅IPv4客戶端發起到僅IPv6伺服器的流量

- 上圖顯示了一個場景，即僅IPv4網路中的客戶端使用NAT64與僅IPv6伺服器通訊。目標是提供對對IPv4客戶端透明的IPv6服務的訪問。在此場景中，不需要DNS64伺服器。在NAT64路由器上配置IPv6和IPv4地址之間的靜態對映。

- 請注意，在可預見的將來，這種情況不太可能發生。大多數啟用了IPv6的伺服器也將支援IPv4。IPv6伺服器運行雙協定棧的時間可能更長。僅使用IPv6的伺服器最終會變得更加常見，但不會很快出現。

配置NAT46指南

步驟1.第一步是在NAT46路由器上配置IPv6到IPv4靜態對映，以便從IPv4地址10.1.113.2訪問IPv6伺服器2001:DB8:3001::9/64。此外，IPv4地址50.50.50需要註冊為DNS伺服器上www.examplev6.com的DNS資源記錄。靜態NAT64對映使用以下命令建立：

NAT64-Router(config)# nat64 v6v4 static 2001:DB8:3001::9 50.50.50.50

步驟2. PC A是隻使用IPv4的主機，它想與伺服器www.examplev6.com進行通訊。這將觸發DNS查詢(A:www.examplev6.com)到其IPv4 DNS授權伺服器。

步驟3. DNS伺服器使用www.examplev6.com, 50.50.50.50的A資源記錄進行響應。

步驟4.主機A現在具有將IPv4封包傳輸到www.examplev6.com所需的定址資訊,

- IPv4目的地位址：50.50.50.50

- IPv4來源位址：10.1.113.2

步驟5. NAT64路由器在其啟用NAT64的介面上接收IPv4資料包，並執行下列任務：

- IPv4報頭轉換為IPv6報頭。

- 使用步驟1中的靜態配置建立的現有NAT64轉換狀態，將IPv4目標地址轉換為IPv6地址。將目標IPv4地址50.50.50.50轉換為IPv6目標地址2001:DB8:3001::9。

- 通過將有狀態NAT64字首2800:1503:2000:1:1::/96新增到IPv4地址，將IPv4源地址轉換為IPv6地址。這會導致IPv6源地址為2800:1503:2000:1:1::0a01:7102。（0a01:7102相當於10.1.113.2。）

步驟6.轉換後，使用常規IPv6路由過程路由IPv6資料包。資料包最終被路由到www.examplev6.com伺服器，地址為2001:DB8:3001::9。

步驟7.伺服器www.examplev6.com以目的地為主機A的封包回覆。

步驟8. NAT64路由器在其啟用NAT64的介面上接收IPv6伺服器傳送的IPv6資料包，並執行下列任務：

- IPv6報頭轉換為IPv4報頭。

- 使用狀態轉換表將IPv6源地址轉換為50.50.50.50。

- 通過刪除IPv6有狀態NAT64字首2800:1503:2000:1:1::/96，將IPv6目標地址轉換為IPv4地址。IPv6地址的低32位0a01:7102表示為點分十進位制IPv4地址10.1.113.2。

步驟9.轉換後，NAT64路由器使用常規IPv4路由過程將資料包轉發到10.1.113.2。

- 與先前的場景類似，使用有狀態NAT64在僅IPv4客戶端和僅IPv6伺服器之間建立透明通訊。除了步驟1中討論的static mapping命令，其他配置也類似。

NAT 46路由器上的配置

1. 面向IPv4的介面：

2. 面向IPv6的介面：

3. 路由器上成功將流量從IPv4轉換到IPv6所需的其他配置：

配置成功後，從IPv4主機ping 50.50.50.50。

#ping 50.50.50.50

檢驗NAT46

#show nat64轉換

#show nat46統計資訊

轉換方案及其適用性

IPv6/IPv4轉換方案

適用性

範例

案例 1:連線到IPv4 Internet的IPv6網路

·僅支援IPv6的網路，希望透明地訪問IPv6和現有的IPv4內容

·從IPv6主機和網路啟動

· ISP為僅支援IPv6的智慧手機（第三代[3G]、長期演化[LTE]等）推出新的服務和網路

·部署純IPv6網路的企業

案例 2:IPv4 Internet到IPv6網路

·僅支援IPv6網路的伺服器希望透明地同時為IPv4和IPv6使用者提供服務

·從IPv4主機和網路啟動

即將推出或現有的內容提供商在僅支援IPv6的環境中推出服務

案例 3:IPv6 Internet連線到IPv4網路

·現有僅支援IPv4的網路中的伺服器希望為IPV6 Internet使用者提供服務

·從IPv6主機和網路啟動

現有內容提供商遷移到IPv6，因此希望作為共存戰略的一部分向IPv6 Internet使用者提供服務

案例 4:連線到IPv6 Internet的IPv4網路

在不久的將來不會成為可行的案例；此情況可能只在IPv6/IPv4過渡早期階段之後發生

無

案例 5:IPv6網路到IPv4網路

IPv4網路和IPv6網路都位於同一組織中

類似於場景1，滿足於Intranet而不是Internet

案例 6:IPv4網路到IPv6網路

與上面相同

類似於場景2，面向內聯網而不是網際網路

案例 7:IPv6 Internet到IPv4 Internet

會受到吞吐量不足的影響

無

案例 8:IPv4 Internet到IPv6 Internet

沒有可行的轉換技術來處理無限制的IPv6地址轉換

無

重要故障排除命令，以防在NAT64實施期間遇到任何問題

#show platform hardware qfp active statistics drop（檢視是否有任何nat64丟棄）

#show running-config |包括nat64（檢視是否在IOS上配置了所有內容）

#show platform hardware qfp active feature nat64 datapath statistics（檢查丟棄計數器的原因）

#show platform hardware qfp active feature nat64 datapath pool（檢查池是否配置正確）

#show platform hardware qfp active feature nat64 datapath map（檢查池到對映配置的操作是否正確完成）

#show platform software object-manager F0 pending-ack-update（檢查是否有任何未決對象）