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