簡介
本文說明如何瞭解和設定網路位址轉譯(NAT)。
必要條件
需求
思科建議您瞭解以下主題:
採用元件
本文件所述內容不限於特定軟體和硬體版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
NAT64 是一種用於 IPv4 至 IPv6 轉換與 IPv4-IPv6 共存的機制。與DNS64一起,NAT64的主要用途是允許僅使用IPv6的客戶端發起與僅使用IPv4的伺服器的通訊。NAT64還可用於使用靜態或手動繫結發起與僅IPv6伺服器通訊的僅IPv4客戶端。這兩種情況都將在本文檔中說明。
為什麼需要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地址分配的性質沒有要求 |
需要為IPv6主機手動分配地址或基於DHCPv6的地址分配 |
自由選擇任意IPv6地址分配模式:手動、DHCPv6、SLAAC |
- 在本文檔中,通過實驗室練習演示了有狀態NAT64,其中IPv6主機希望與IPv4伺服器通訊。此外,它還演示了無狀態NAT64,其中IPv4主機希望連線到IPv6伺服器。此方案也稱為NAT46。
場景1:如何從IPv6網路中的主機與IPv4伺服器(位於IPv4網路中)通訊
- 如果可以從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資料包:
- 通過從IPv6地址中去除字首來提取目標IPv4地址。來源位址由分配的IPv4位址(和連線埠)取代。
- 其餘欄位從IPv6轉換為IPv4,以形成有效的IPv4資料包。
10.在會話資料庫和繫結資料庫中建立新的NAT64轉換。根據配置更新池和埠資料庫。
11.IPv6資料包流的返回流量和後續流量可使用此會話資料庫條目進行轉換。
- 對於NAT64工作,可以從ipv6到ipv6網路中介面的ipv6地址的可達性,也可以從NAT64路由器到伺服器的ipv4地址的可達性。
配置NAT64指南
步驟 1.主機A是僅支援IPv6的主機,它想與伺服器www.example.com通訊。這將向DNS64伺服器觸發DNS查詢(AAAA: www.example.com)。DNS64是此過程的關鍵元件。DNS64伺服器既是IPv6的DNS伺服器,也是IPv4的DNS伺服器。它為客戶端營造了一個幻覺,即可以使用IPv6地址訪問IPv4伺服器。
主機A向DNS64伺服器傳送DNS查詢(AAAA: www.example.com)。就主機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伺服器向IPv4 DNS A授權伺服器傳送A查詢(A: www.example.com)。
步驟 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地址。
步驟 7.合成的AAAA記錄對主機A完全透明。對於主機A,它看起來好像可以通過IPv6網路和Internet訪問www.example.com。主機A現在具有將IPv6資料包傳輸到www.example.com所需的編址資訊,如下所示:
- IPv6目的地址:2800:1503:2000:1:1::0a01:7102
- IPv6源地址:2001:DB8:3001::9
步驟 8.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地址將轉換為IPv4地址。
- 有狀態NAT64為源地址和目標地址建立IP地址轉換狀態。這些狀態是在第一次對資料包執行轉換時建立的。流中的後續資料包將保持此狀態。當流量和狀態維護計時器到期時,狀態結束。
步驟 9.NAT64轉換後,使用常規IPv4路由查詢過程轉發轉換後的IPv4資料包。在此案例中,IPv4目的地位址10.1.113.2用於轉送封包。
步驟 10.位於10.1.113.2的www.example.com伺服器會做出應答,最終由NAT64路由器接收。
步驟 11.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地址轉換為2001:DB8:3001::9。
步驟 12.轉換後,使用常規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地址的對映。
- #nat64 v4池池1 10.50.50.50 --------------->原始ipv6源地址可以轉換為此池的ip,而資料包可以進入ipv4網路。
- #nat64 v6v4 list nat64acl pool1 overload --------------->這樣可以將與nat64acl匹配的ipv6地址轉換為池中的ipv4地址
- 十六進位制值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地址10.50.50.50需要註冊為DNS伺服器上www.examplev6.com的DNS資源記錄。靜態NAT64對映使用以下命令建立:
NAT64-Router(config)# nat64 v6v4 static 2001:DB8:3001::9 10.50.50.50
步驟 2.PC A是僅支援IPv4的主機,需要與伺服器www.examplev6.com通訊。這會觸發DNS查詢(A: www.examplev6.com)到其IPv4 DNS授權伺服器。
步驟 3.DNS伺服器使用www.examplev6.com(10.50.50.50)的A資源記錄進行響應。
步驟 4.主機A現在具有將IPv4封包傳輸到www.examplev6.com所需的定址資訊,
- IPv4目的地址:10.50.50.50
- IPv4源地址:10.1.113.2
步驟 5.NAT64路由器在其啟用NAT64的介面上接收IPv4資料包,並執行下列任務:
- IPv4報頭轉換為IPv6報頭。
- 使用步驟1中的靜態配置建立的現有NAT64轉換狀態,將IPv4目標地址轉換為IPv6地址。目的IPv4地址10.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源地址轉換為10.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路由器上的配置
- 面向IPv4的介面:
- 面向IPv6的介面:
- 路由器上成功將流量從IPv4轉換到IPv6所需的其他配置:
配置成功後,從IPv4主機ping 10.50.50.50。
#ping 10.50.50.50
檢驗NAT46
#show nat64轉換
#show nat46統計資訊
轉換方案及其適用性
IPv6/IPv4轉換方案 |
適用性 |
範例 |
場景1:IPv6網路連線到IPv4 Internet |
·僅支援IPv6的網路,希望透明地訪問IPv6和現有的IPv4內容。 ·從IPv6主機和網路啟動。 |
· ISP為僅支援IPv6的智慧手機(第三代[3G]、長期演化[LTE]等)推出新的服務和網路。 ·部署純IPv6網路的企業。 |
場景2:將IPv4網際網路連線到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網路 |
IPv4網路和IPv6網路都位於同一組織中。 |
類似於場景2,面向內聯網而不是Internet。 |
場景7:從IPv6 Internet到IPv4 Internet |
會受到吞吐量不佳的影響。 |
無 |
場景8:從IPv4 Internet到IPv6 Internet |
沒有可行的轉換技術來處理無限制的IPv6地址轉換。 |
無 |
重要故障排除命令,以防實施NAT64時出現問題
#show platform hardware qfp active statistics drop(檢視是否有任何NAT64丟棄)
#show running-config | 包括nat64(檢視是否在Cisco IOS®上配置了所有內容)
#show platform hardware qfp active feature nat64 datapath statistics(檢查丟棄計數器的原因)
#show platform hardware qfp active功能nat64 datapath pool(檢查池是否配置正確)
#show platform hardware qfp active feature nat64 datapath map(檢查並檢視pool to mapping config是否正確完成)
#show platform software object-manager F0 pending-ack-update(用於檢查是否存在任何掛起的對象)