一、概述
新的IPv6網絡的部署已經在全球范圍內展開,在此過程中我們不可能立即放棄原有的已經成熟的IPv4網絡。在將來很長一段時間之內,兩種網絡必然是共存的,我們現在需要考慮的就是我們如何能夠平穩地從IPv4網絡過渡到IPv6網絡。
網絡地址和協議轉換(NAT-PT)就是我們的選擇之一,它能夠解決我們在過渡過程中所能碰到的一些問題。
二、NAT-PT介紹
NAT-PT是一種純IPv6節點和IPv4節點間的互通方式,所有包括地址、協議在內的轉換工作都由網絡設備來完成。支持NAT-PT的網關路由器應具有IPv4地址池,在從IPv6向IPv4域中轉發包時使用,地址池中的地址是用來轉換IPv6報文中的源地址的。此外網關路由器需要DNS-ALG和FTP-ALG這兩種常用的應用層網關的支持,在IPv6節點訪問IPv4節點時發揮作用。如果沒有DNS-ALG的支持,只能實現由IPv6節點發起的與IPv4節點之間的通信,反之則不行。如果沒有FTP-ALG的支持,IPv4網絡中的主機將不能用FTP軟件從IPv6網絡中的服務器上下載文件或者上傳文件,反之亦然。
采用NAT-PT方式進行過渡的優點是不需要進行IPv4,IPv6節點的升級改造,缺點是IPv4節點訪問IPv6節點的實現方法比較復雜,網絡設備進行協議轉換、地址轉換的處理開銷較大,一般在其他互通方式無法使用的情況下使用。
三、SIIT介紹
在NAT-PT的實現中最重要的一部分就是協議部分的轉換算法,也就是無狀態IP/ICMP轉換算法(SIIT)。轉換方法包括如下幾個大的方面:
IPv4->IPv6:
¨ IPv4頭部到IPv6頭部的轉換
¨ IPv4 UDP頭部的轉換
¨ IPv4的ICMP頭部轉換為IPv6的ICMP頭部
¨ IPv4的ICMP錯誤消息轉換為IPv6的ICMP錯誤消息
IPv6->IPv4:
¨ IPv6頭部到IPv4頭部的轉換
¨ IPv4的ICMP頭部轉換為IPv6的ICMP頭部
¨ IPv4的ICMP錯誤消息轉換為IPv6的ICMP錯誤消息
上述轉換中,IPv4頭部和IPv6頭部的相互轉換比較簡單,請參看RFC2765。下面重點描述一下IPv4->IPv6轉換過程中UDP頭部的轉換以及ICMP報文的轉換。
3.1、IPv4報文中UDP頭部的轉換
在IPv4報文中,UDP頭部校驗和可以不填寫,即UDP頭部校驗和可以是0。但是在IPv6協議中,IPv6頭部沒有校驗和,為了保證UDP數據包的正確性,UDP頭部中校驗和字段必須填寫。
如果一個UDP包被分片,但是UDP頭部的校驗和為0,作為一個無狀態的轉換設備來說,它不可能計算出一個有效的校驗和。不過,我們認為這種情況是惡意的攻擊。當轉換設備收到這種報文的時候,轉換設備應該丟棄該報文并生成一個系統相關事件(事件至少需要記錄IP地址和端口號)。
如果轉換設備收到一個未分片的IPv4 UDP報文并且校驗和為0,轉換設備必須計算UDP校驗和,而且轉換設備應該記錄有多少個這樣的UDP校驗和被計算。
3.2、ICMP頭部的轉換
在IPv6中,ICMP的校驗和計算包含一個偽頭部(源地址,目的地址,協議號,ICMP包長度),而在IPv4中,ICMP的頭部校驗和的計算不包含偽頭部。所以,所有經過轉換設備的ICMP的校驗和都需要重新計算。
說到ICMP頭部的轉換,除了校驗和之外,剩下的就是ICMP的Type值和Code值需要轉換,下面給出一個轉換表(表一),請大家參考。
3.3、ICMP錯誤消息的轉換
對于ICMP錯誤消息,它頭部中的Type值和Code值的轉換也需要參照(表一)進行轉換。
ICMP錯誤消息中包含了IP頭部,錯誤消息中的IP頭部也需要被轉換,就像普通的IP頭部被轉換一樣。轉換錯誤消息中的IP頭部可能導致數據包的長度變化,那么正常的IPv6頭部的有效載荷長度也需要更新。如圖一所示:
ICMP錯誤消息中的IP頭部的轉換能夠第歸調用轉換外部IP頭部的轉換函數。只不過轉換之前,內部的IP頭部中,源地址、目的地址和上層協議(TCP,UDP)的源端口號、目的端口號需要互換。只有這樣才能保證ICMP ERROR報文的正確轉換。
四、應用層網關(ALG)
4.1、DNS-ALG
在組網的時候,如果處于V6網絡的主機需要連接到V4網絡中的主機,V6主機可以認為V4主機的所對應的IPv6地址為NATPT前綴+IPv4主機地址。如:V4主機地址為10.18.34.1,NATPT設備設定的前綴為2222::/64,則V4主機對應的IPv6地址就是2222::10.18.34.1或2222::0a12:2201。
但是當V4網絡中的主機需要訪問V6網絡中的主機的時候就不能按照這種方法來做,V4主機可以按照V6主機所對應的域名來訪問,這就需要用到DNS-ALG功能。如(圖二)所示:
V4端主機10.18.34.117需要訪問V6端主機2000::1,V4主機所對應的域名為www.ipv4.com.cn,V6主機所對應的域名為www.ipv6.com.cn。
首先V4主機發送DNS請求1給它的DNS服務器,請求www.ipv6.com.cn這個域名所對應的IPv4地址,V4的DNS服務器發現沒有這個資源記錄,于是它轉發這個DNS請求給V6的DNS服務器。需要注意到,NATPT設備上必須配置兩個DNS服務器的地址映射關系,如:10.18.34.252 => 2000::2,即V6的DNS服務器所對應的IPv4地址為10.18.34.252。
NATPT發送經過轉換的DNS請求2給V6的DNS服務器。
V6的DNS服務器收到經過NATPT設備轉換之后的DNS請求之后,它作出響應,發送DNS應答3給V4的DNS服務器。NATPT在收到應答3之后,對之進行轉換。因為www.ipv6.com.cn這個域名對應的IPv6地址為2000::1,所以應答報文中的資源記錄為AAAA,地址為2000::1,經過轉換之后,資源記錄變為A,2000::1這個IPv6地址所對應的IPv4地址就從地址池中獲取。假如獲取的IPv4地址為10.18.34.11,則在地址映射表中增加了一條新的地址映射表項2000::1=>10.18.34.11,此記錄為一動態記錄,超時之后將被自動刪除。
NATPT設備發送經過轉換之后的DNS應答報文給V4的DNS服務器。
V4的DNS服務器收到應答報文之后在它的DNS緩存中增加一條記錄,表明www.ipv6.com.cn這個域名所對應的IPv4地址為10.18.34.11。在此之后,IPv4主機要和IPv6主機進行通信,只需要訪問IPv6主機的域名即可。
從V6端訪問V4端主機的域名也按照同樣的步驟。
4.2、FTP-ALG
當IPv4網絡中的用戶需要訪問IPv6網絡中的FTP服務器的時候,對應的FTP請求報文和相應報文需要進行轉換,FTP-ALG就是解決此問題的。一般來說,我們只需要對目的端口或源端口為21的TCP報文進行轉換,因為這些報文屬于FTP的控制報文,只有FTP控制報文中包含了地址和端口的信息。我們只需要轉換這些地址和端口。
FTP的請求分很多類型,如PORT 、PASV、EPRT、EPSV等等。對于大多數支持IPv4的FTP客戶端來說,它們一般都只支持PORT和PASV請求模式,經過升級之后可能支持EPRT和EPSV請求模式。但是現在支持IPv6的FTP客戶端一般是支持EPRT和EPSV這兩種請求模式。
從上面的描述中我們可以知道,對于IPv4網絡中的FTP客戶端來說,它們即可以支持PORT和PASV請求模式也可以支持EPRT和EPSV請求模式。對于IPv6網絡中的FTP客戶端來說,它們肯定都支持EPRT和EPSV請求模式。但是,這時將會出現一個問題,如(圖三)所示:
IPv4的FTP請求轉換成IPv6的FTP請求是二對一的關系,反之是一對二的關系。也就是說,我們現在需要考慮,在轉換IPv6側的FTP請求的時候我們應該怎么轉換呢?兩種都可以!但是兩種都有不足的地方。
1、EPRT->PORT EPSV->PASV
這種轉換中,FTP-ALG不能轉換“ EPSVALL“這種指令。這樣將導致FTP Server返回一個錯誤信息。
2、EPRT->EPRT EPSV->EPSV
這種轉換要求IPv4側的主機升級FTP軟件以支持EPRT和EPSV兩種請求模式。
鑒于這種情況,我們建議在缺省情況下采用第一種轉換方式,因為第一種轉換方式不需要IPv4側的主機進行升級,雖然有個指令不能轉換,但是我們認為該指令出現的幾率不是很頻繁,就算出現該指令,大多數情況下我們的FTP連接還是能夠建立起來,不影響文件的傳輸。我們還建議在NATPT轉換設備上設置一條命令,把IPv6側的FTP請求的轉換方式當作可配置的。
在經過FTP-ALG模塊轉換之后FTP報文的數據部分長度可能發生變化,此時TCP頭部的校驗和需要重新計算,同時TCP包中的Seq Number和Ack Number需要調整。
六、NATPT設備應用范圍的考慮
NATPT只是作為IPv4網絡向IPv6網絡過渡的時候采用的一種手段,NATPT自身有一定的局限性,由于轉換相當耗費系統資源和時間,所以NATPT設備注定不能作為核心的設備,只能用于邊緣協議和地址的轉換。而且NATPT對于系統安全不能夠很好的支持,而系統安全這一點對于下一代網絡來將非常重要。所以網絡中采用NATPT設備只能暫時作為一種解決問題的方案。
七、總結
本文簡單地描述了NAT-PT轉換中所需要注意的幾個方面,但要從真正實現NAT-PT協議的角度來講,這些遠遠不夠。武漢郵科院烽火網絡公司的Fengine系列路由器已經實現了NATPT轉換,包括DNS-ALG、FTP-ALG、SIP-ALG等。能夠為用戶提供從IPv4到IPv6網絡平滑進行過渡的解決方案。眾所周知,在進行NATPT轉換之后,系統的性能將大大降低,但是烽火網絡公司的R8000系列路由器能夠實現硬件的轉換,大大提高了NATPT的轉換性能和可靠性。
參考資料:
[FTP-IPV6] Allman, M., Ostermann, S. and C. Metz, "FTP Extensions for IPv6 and NATs", RFC 2428, September 1998.
[DNS-ALG] Srisuresh, P., Tsirtsis, G., Akkiraju, P. and A. Heffernan, "DNS extensions to Network Address Translators (DNS_ALG)", RFC 2694, September 1999.
[NAT-PT] George Tsirtsis., "Network Address Translation - Protocol Translation", RFC 2766, February 2000.
[SIIT] Nordmark, E., "Stateless IP/ICMP Translator (SIIT)", RFC 2765, February 2000.
[ICMPv4] Postel, J., "Internet Control Message Protocol", STD 5, RFC 792, September 1981.
[ICMPv6] Conta, A. and S. Deering, "Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6)", RFC 2463, December 1998.