邱耀 群,金光,江先亮,蘇成龍
(1.寧波大學(xué)信息科學(xué)與工程學(xué)院,浙江 寧波 315211;2.浙江大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,浙江 杭州 310027)
對(duì)稱型NAT穿越技術(shù)的研究*
邱耀 群1,金光1,江先亮2,蘇成龍1
(1.寧波大學(xué)信息科學(xué)與工程學(xué)院,浙江 寧波 315211;2.浙江大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,浙江 杭州 310027)
根據(jù)對(duì)稱型NAT的映射特點(diǎn),提出了一種改進(jìn)后的穿越對(duì)稱型NAT方案,并在具有對(duì)稱型NAT的應(yīng)用場(chǎng)景的相關(guān)實(shí)驗(yàn)測(cè)試中取得了較好的實(shí)驗(yàn)結(jié)果,達(dá)到了預(yù)期的目標(biāo)。新方案具有STUN方式無(wú)需更改NAT設(shè)備、協(xié)議相對(duì)簡(jiǎn)單等優(yōu)點(diǎn),能很好地滿足企業(yè)既能節(jié)約IP地址又具有較高安全性的NAT需求。
NAT穿越 端口預(yù)測(cè) STUN協(xié)議 對(duì)稱型NAT
現(xiàn)如今,網(wǎng)絡(luò)正在迅速發(fā)展,IPv4地址已經(jīng)被耗盡,而IPv6技術(shù)尚未完全成熟與普及。在IPv4到IPv6的過渡階段,NAT(Network Address Translators)技術(shù)[1-2]有效解決了IP地址短缺的問題,被廣泛地應(yīng)用于企業(yè)內(nèi)部網(wǎng)絡(luò)中。因NAT技術(shù)具有可隱藏內(nèi)部網(wǎng)絡(luò)結(jié)構(gòu)的特點(diǎn),所以可以有效保護(hù)內(nèi)部網(wǎng)絡(luò),避免來(lái)自網(wǎng)絡(luò)外部的攻擊,保障了使用內(nèi)部網(wǎng)絡(luò)的企業(yè)網(wǎng)或校園網(wǎng)的安全。
常用的穿越NAT的方法主要有STUN(Simple Traversal of UDP Through Network Address Translator)[3]、ALGs(Application Layer Gateways)、中間盒(Middlebox Communications)、TURN(Traversal Using Relay NAT)[4]、ICE(Interactive Connectivity Establishment)[5]等技術(shù),但這些技術(shù)都存在著一些問題。如STUN協(xié)議比其他協(xié)議都簡(jiǎn)單,但無(wú)法工作于對(duì)稱型NAT;ALGs需要修改現(xiàn)有的NAT設(shè)備;中間盒通過第三方設(shè)備來(lái)建立通信,要求對(duì)現(xiàn)有NAT設(shè)備進(jìn)行擴(kuò)展;TURN通過中繼轉(zhuǎn)發(fā)的方式來(lái)穿越NAT設(shè)備,會(huì)存在嚴(yán)重延時(shí)和丟包現(xiàn)象;ICE結(jié)合了STUN與TURN這2種協(xié)議,但同樣存在TURN中延時(shí)與丟包的現(xiàn)象,而且服務(wù)器工程量大。本文結(jié)合對(duì)稱型NAT存在的不同場(chǎng)景給出相應(yīng)的基于STUN的穿越方案,此方案無(wú)需對(duì)現(xiàn)有NAT設(shè)備做修改而且協(xié)議簡(jiǎn)單,其和TURN、ICE技術(shù)相比減輕了服務(wù)器負(fù)擔(dān)、解決了延時(shí)丟包等問題。
2.1 NAT技術(shù)原理
NAT是一個(gè)互聯(lián)網(wǎng)工程任 務(wù)組IETF(Internet Engineering Task Force)標(biāo)準(zhǔn)。NAT技術(shù)原理如圖1所示,其將只能限定在內(nèi)網(wǎng)中使用的IP地址群(A類10.0.0.0-10.255.255.255;B類172.16.0.0-172.16.255.255;C類192.168.0.0-192.168.255.255)轉(zhuǎn)化成能夠在公網(wǎng)中使用的IP地址。具體過程為當(dāng)私有網(wǎng)絡(luò)中的主機(jī)與外部網(wǎng)絡(luò)進(jìn)行通信且發(fā)送的UDP數(shù)據(jù)報(bào)經(jīng)過NAT時(shí),NAT設(shè)備會(huì)根據(jù)源地址、源端口、目標(biāo)地址、目標(biāo)端口這個(gè)四元組來(lái)給私有主機(jī)分配一個(gè)端口。同時(shí),將此端口與私有主機(jī)地址對(duì)應(yīng)起來(lái)放入映射表中,然后用NAT自身的公網(wǎng)IP和分配的端口來(lái)替換UDP報(bào)文中的源IP和源端口。當(dāng)目標(biāo)主機(jī)返回?cái)?shù)據(jù)時(shí),NAT設(shè)備可查詢之前所對(duì)應(yīng)的映射表,將報(bào)文發(fā)送到內(nèi)網(wǎng)的客戶端主機(jī)。根據(jù)上面的描述,可將內(nèi)網(wǎng)中的IPv4地址充分復(fù)用,以此來(lái)緩解IPv4地址短缺的現(xiàn)象[6]。
圖1 NAT技術(shù)原理
2.2 NAT分類及其特點(diǎn)
STUN協(xié)議是IETF提出的一種用UDP來(lái)穿越NAT的標(biāo)準(zhǔn)協(xié)議。根據(jù)STUN協(xié)議可以將NAT分為完全錐型(Full Cone NAT)、受限錐型(Restricted Cone)、端口限制型(Port Restricted Cone)和對(duì)稱型(Symmetric)這4種。
(1)完全錐型NAT:當(dāng)NAT中內(nèi)網(wǎng)主機(jī)A向外網(wǎng)主機(jī)B發(fā)送數(shù)據(jù)時(shí),內(nèi)網(wǎng)中的IP地址和端口號(hào)都將被映射成同一個(gè)外網(wǎng)IP地址和端口號(hào)。而且外網(wǎng)中的任何一個(gè)主機(jī)(包括主機(jī)B)都可通過這個(gè)映射的外網(wǎng)IP地址和端口號(hào)向內(nèi)網(wǎng)主機(jī)發(fā)送數(shù)據(jù),建立通信。
(2)受限錐型NAT:當(dāng)NAT中內(nèi)網(wǎng)主機(jī)A向外網(wǎng)主機(jī)B發(fā)送數(shù)據(jù)時(shí),內(nèi)網(wǎng)中的IP和端口號(hào)也將會(huì)被映射成同一個(gè)外網(wǎng)IP和端口號(hào)。先前已經(jīng)同主機(jī)A進(jìn)行過數(shù)據(jù)通信的主機(jī)B(可以用任何端口)才可以與主機(jī)A進(jìn)行通信,其他的外網(wǎng)主機(jī)都不能與A通信。
(3)端口受限型NAT:當(dāng)NAT中的內(nèi)網(wǎng)主機(jī)A向外網(wǎng)主機(jī)B發(fā)送數(shù)據(jù)時(shí),內(nèi)網(wǎng)中的IP和端口號(hào)會(huì)被映射成同一個(gè)外網(wǎng)IP和端口號(hào)。先前已經(jīng)同主機(jī)A進(jìn)行過數(shù)據(jù)通信的主機(jī)B(只能使用先前建立通信的端口)才可以與主機(jī)A進(jìn)行通信,其他外網(wǎng)以及主機(jī)B的其他任何端口都不能和主機(jī)A進(jìn)行通信。
(4)對(duì)稱型NAT:相比于所有的錐型NAT,對(duì)稱型更加的靈活。對(duì)稱型NAT的分配是由源地址、源端口、目標(biāo)地址、目標(biāo)端口這一個(gè)四元組來(lái)決定的。當(dāng)四元組中的任何一項(xiàng)變化時(shí),其映射關(guān)系都會(huì)改變。
3.1 錐型NAT的穿越
錐型NAT與對(duì)稱型NAT不同,其映射與目標(biāo)地址和端口無(wú)關(guān),即源地址相同,映射也就相同??墒褂幂^成熟的Hole Punching(打洞)技術(shù)[7-8]來(lái)實(shí)現(xiàn)穿越。NAT穿越技術(shù)流程如圖2所示。
步驟1:客戶端A、B分別向服務(wù)器S發(fā)送數(shù)據(jù)請(qǐng)求,進(jìn)行注冊(cè),這是一個(gè)創(chuàng)建實(shí)例和初始化的過程。該過程中,客戶端會(huì)獲得穿透服務(wù)器S返回的初始化信息,包括協(xié)議版本、回話名稱、該客戶端的內(nèi)網(wǎng)地址和端口、NAT映射地址和端口等。
步驟2:當(dāng)客戶端注冊(cè)完成之后,服務(wù)器S的數(shù)據(jù)庫(kù)中會(huì)保存每個(gè)客戶端相應(yīng)的地址和端口記錄。當(dāng)客戶端A要與客戶端B進(jìn)行通信時(shí),會(huì)請(qǐng)求服務(wù)器S,希望獲取客戶端B的IP地址和端口(包括內(nèi)網(wǎng)IP地址和端口、NAT映射地址和端口等)。同時(shí),客戶B也會(huì)向服務(wù)器S發(fā)送請(qǐng)求,希望獲取A的IP地址和端口等信息。
步驟3:服務(wù)器S返回客戶端信息,客戶端A獲得了客戶端B的信息后,會(huì)從這些信息里面提取出部分信息。提取的信息主要是客戶端B的內(nèi)網(wǎng)IP地址和端口、NAT映射地址和端口等,客戶端A會(huì)將這些數(shù)據(jù)存儲(chǔ)起來(lái),等待NAT穿透協(xié)商的時(shí)候使用,而客戶端B也會(huì)采取同樣的操作。
步驟4:客戶端B收到信息之后,將客戶端A的映射IP地址與端口作為目標(biāo)地址,并向此目標(biāo)地址發(fā)送Hole Punching UDP數(shù)據(jù)報(bào)。該數(shù)據(jù)報(bào)使NAT B可以接收之后來(lái)自于客戶端A的數(shù)據(jù)報(bào),使其能進(jìn)入到NAT B的內(nèi)部網(wǎng)絡(luò),形象地稱B向A打了一個(gè)“洞”。同樣的,客戶端A也向B打一個(gè)“洞”。之后雙方互相發(fā)送穿透信息,進(jìn)行穿透連接測(cè)試,這個(gè)過程實(shí)現(xiàn)的是STUN協(xié)議,會(huì)根據(jù)對(duì)方客戶端的候選地址,逐個(gè)發(fā)送穿透信息,等待連接成功。如果連接成功,將會(huì)返回成功通道的IP地址和端口號(hào),然后A、B雙方可以利用該通道進(jìn)行數(shù)據(jù)傳輸;如果連接失敗,說(shuō)明客戶端連接的NAT設(shè)備中存在對(duì)稱型NAT。
圖2 NAT穿越技術(shù)流程圖
3.2 穿越對(duì)稱型NAT
STUN協(xié)議無(wú)法工作于對(duì)稱型NAT[9],其原因是:對(duì)稱型NAT的映射分配規(guī)則是由源地址、源端口、目標(biāo)地址、目標(biāo)端口這個(gè)四元組來(lái)唯一確定的。當(dāng)四元組中的任何一項(xiàng)改變時(shí),其映射的端口都會(huì)相應(yīng)改變。而根據(jù)這種特性,文獻(xiàn)[10]提出了一種方案,實(shí)現(xiàn)了一方為對(duì)稱型NAT,而另一方為Cone NAT的穿越問題,但并不能穿越雙方都為對(duì)稱型NAT的場(chǎng)景[10]。本文提出了一種適用于雙方客戶端都在對(duì)稱型NAT場(chǎng)景的穿越方案。
對(duì)稱型NAT的映射分配規(guī)則分為以下3種,可以按照NAT設(shè)備中分配規(guī)則的常見程度來(lái)排序:
規(guī)則1:增量型,即在上一次映射的端口號(hào)上加一個(gè)特定的數(shù)值;
規(guī)則2:小范圍隨機(jī)型,即在上一次映射的端口號(hào)附近小范圍隨機(jī)變動(dòng)的一個(gè)數(shù)值V;
規(guī)則3:完全隨機(jī)型,即在端口號(hào)1024至65535中隨機(jī)生成。
本文采用以下方法來(lái)實(shí)現(xiàn)穿越雙方都為對(duì)稱型NAT的場(chǎng)景,具體如圖3所示:
圖3 穿越雙對(duì)稱型NAT流程圖
步驟1:客戶端A和客戶端B分別向穿越服務(wù)器S的2個(gè)端口(SPort1、SPort2)發(fā)送數(shù)據(jù),從而建立連接。而NAT A和NAT B分別為客戶端A、B分配的外部地址為Addressi以及2次NAT映射端口號(hào)為Pifirst,Pisecond(這里i=1、2,1代表客戶端A,2代表客戶端B)。在建立連接之后,服務(wù)器S記錄下相應(yīng)的信息。
步驟2:客戶端A請(qǐng)求服務(wù)器S,希望與客戶端B進(jìn)行通信,并希望獲取B的IP地址和端口號(hào)。服務(wù)器S計(jì)算出NAT B端口分配間距為并預(yù)測(cè)NAT B為B分配的下一次端口號(hào)為將 Address2和發(fā)送給A。同樣,服務(wù)器計(jì)算出NAT A端口間距為并預(yù)測(cè)NAT A為A分配的下一次端口號(hào)為=ΔP1,將Address1和發(fā)送給B。
步驟3:客戶端A獲取到信息之后,將Address2和端口P2next作為目的地址發(fā)送Hole Punching UDP數(shù)據(jù)報(bào)。同樣,B將Address1和端口P1next作為目標(biāo)地址發(fā)送Hole Punching數(shù)據(jù)報(bào)。如果雙方能夠建立通信,說(shuō)明雙方的對(duì)稱型NAT分配方式都為規(guī)則1;如果雙方不能建立連接,則說(shuō)明分配方式為規(guī)則2或者規(guī)則3。
步驟4:對(duì)規(guī)則2進(jìn)行猜測(cè),由于目標(biāo)端口很可能落在上一次映射端口(PL)的附近。猜測(cè)規(guī)則為在上一次的映射端口號(hào)PL的附近小范圍內(nèi),所以將PL增加或者減少V(1<V<50),即預(yù)測(cè)端口為Pnext=PL+V。A、B分別將所預(yù)測(cè)的端口作為目標(biāo)端口并向目標(biāo)端口發(fā)送UDP數(shù)據(jù)報(bào)。如果該過程中能建立通信,則連接成功;如不能建立通信,則繼續(xù)步驟5。
步驟5:將步驟4中V的范圍逐步增大,直至猜測(cè)成功,雙方能建立通信為止。從統(tǒng)計(jì)學(xué)角度出發(fā)并結(jié)合ΔP的特性來(lái)進(jìn)行分析,對(duì)一定范圍內(nèi)的端口進(jìn)行預(yù)測(cè)的時(shí)候,假設(shè)i次猜測(cè)中,1次成功的概率為P1,i次猜測(cè)中i次都失敗的概率為P2。設(shè)N=65535-1024,且預(yù)測(cè)的端口每一次都不一樣,所以i次猜測(cè)中i次都失敗的概率P2的計(jì)算公式為:
可以計(jì)算出i次猜測(cè)至少成功1次的概率為P1=1-P2,當(dāng)i≥439的時(shí)候,至少猜中1次的概率為95%。此結(jié)論證實(shí)了預(yù)測(cè)的可行性。
具體實(shí)驗(yàn)中的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖4所示。采用Linux(Ubuntu8.0.4)平臺(tái)構(gòu)建一個(gè)公網(wǎng)服務(wù)器,并分配一個(gè)公網(wǎng)IPv4地址(123.152.83.160)和2個(gè)端口。同時(shí)在該服務(wù)器上安裝了MySQL數(shù)據(jù)庫(kù),建立了clientInfo、reflectIP等表,分別用來(lái)記錄注冊(cè)信息和映射IP等信息。并用NAT設(shè)備A、B分別將2個(gè)公網(wǎng)IP(61.153.148.160和123.152.82.10)建成內(nèi)網(wǎng)環(huán)境。2個(gè)客戶端A、B采用Windows平臺(tái),客戶端A的內(nèi)網(wǎng)IP為192.168.1.100,位于NAT A的內(nèi)網(wǎng)環(huán)境中;客戶端B的內(nèi)網(wǎng)IP為10.22.71.35,位于NAT B的內(nèi)網(wǎng)環(huán)境中。
圖4 實(shí)驗(yàn)網(wǎng)絡(luò)拓?fù)鋱D
在實(shí)驗(yàn)過程中,選擇增量型、小范圍隨機(jī)型與完全隨機(jī)型這3種分配方式的對(duì)稱型NAT來(lái)進(jìn)行測(cè)試,即為NAT設(shè)備A和B分別替換不同分配方式的對(duì)稱型NAT。進(jìn)行多次實(shí)驗(yàn)之后,統(tǒng)計(jì)結(jié)果如表1所示:
表1 實(shí)驗(yàn)測(cè)試結(jié)果
上述結(jié)果較好地驗(yàn)證了本文所提改進(jìn)方案的可行性。
本文基于STUN協(xié)議,采用端口猜測(cè)來(lái)解決UDP穿越對(duì)稱型NAT的問題。在雙方都在對(duì)稱型NAT場(chǎng)景中的情況下,3個(gè)應(yīng)用場(chǎng)景的實(shí)驗(yàn)結(jié)果表明:對(duì)于雙方都在增量型或者小范圍隨機(jī)型映射規(guī)則的對(duì)稱型NAT下,能較好地穿越成功;但是對(duì)雙方都在完全隨機(jī)型映射規(guī)則的對(duì)稱型NAT下,會(huì)存在一些穿越不成功的情況,還有待進(jìn)一步的研究。
[1] Srisuresh P, Holdrege M. RFC2663 IP Network Address Tanslator (NAT) Terminology and Considerations[S]. 1999.
[2] 曹申會(huì). NAT穿越技術(shù)研究與實(shí)現(xiàn)[D]. 南京: 南京郵電大學(xué), 2013.
[3] Rosenberg J, Weinberger J, Huitema, et al. STUN Simple Traversal of User Datagram Protocol (UDP)Through Network Address Translators (NATs) [S]. 2003.
[4] Rosenberg J, Mahy R, Huitema C. Traversal using relay NAT (TURN) [R]. 2005.
[5] 劉磊. 基于ICE方式的SIP穿越NAT技術(shù)的研究[D].天津: 天津大學(xué), 2007.
[6] 朱光,張?jiān)迫A,盧娟. 基于ICE的VOIP穿越NAT方案的研究[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2011,28(10): 222-224.
[7] 龍湘君,邵棟,榮國(guó)平. 基于TUN/TAP與UDP打洞技術(shù)的虛擬局域網(wǎng)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2011(7): 224-226.
[8] 王止戈,彭宇峰,張?zhí)K靈,等. 一種基于預(yù)測(cè)的Symmetric NAT穿越解決方案[J]. 計(jì)算機(jī)工程, 2005,31(11): 122-123.
[9] 孫衛(wèi)喜,席少龍. P2P中NAT穿越問題的研究[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2014,24(2): 242-245.
[10] 王勇,崔修濤,呂釗,等. 基于探測(cè)對(duì)Symmetric NAT與端口受限NAT的穿透方案[J]. 計(jì)算機(jī)應(yīng)用, 2006,26(4): 922-925.★
Research on Symmetric NAT Traversal Technique
QIU Yao-qun1, JIN Guang1, JIANG Xian-liang2, SU Cheng-long1
(1. Faculty of Electrical Engineering and Computer Science, Ningbo University, Ningbo 315211, China; 2. College of Computer Science and Technology, Zhejiang University, Hangzhou 310027, China)
According to the feature of the symmetric NAT, an improved symmetric NAT traversal approach was proposed in this paper. In the application scene with symmetric NAT, good results were gotten in related experiments and tests and the expected goal was achieved. The proposed approach has the advantages of STUN protocol, such as simple protocol and no modifi cation of existing equipment. It well meets the demands of enterprises on both saving IP address and enhancing security of NAT.
NAT traversal port forecast STUN protocol symmetric NAT
10.3969/j.issn.1006-1010.2015.07.012
TP393
A
1006-1010(2015)07-0057-04
邱耀群,金光,江先亮,等. 對(duì)稱型NAT穿越技術(shù)的研究[J]. 移動(dòng)通信, 2015,39(7): 57-60.
浙江省自然科學(xué)基金(LY12F02013);浙江省寧波市移動(dòng)網(wǎng)絡(luò)應(yīng)用技術(shù)創(chuàng)新團(tuán)隊(duì)(2011B81002);浙江省科技廳公益技術(shù)應(yīng)用研究項(xiàng)目(2014C31059);寧波大學(xué)研究生重點(diǎn)課程建設(shè)項(xiàng)目(ZDKC2013003)
2014-12-04
責(zé)任編輯:劉妙 liumiao@mbcom.cn