
本期智匯華云,華云數(shù)據(jù)特別邀請到華云數(shù)據(jù)網(wǎng)絡(luò)組開發(fā)工程師許猛為大家?guī)?ldquo;VPP全錐型NAT實現(xiàn)”。
內(nèi)容介紹
在現(xiàn)實Internet網(wǎng)絡(luò)環(huán)境中,大多數(shù)計算機(jī)主機(jī)都位于防火墻或NAT之后,只有少部分主機(jī)能夠直接接入Internet。很多時候,我們希望網(wǎng)絡(luò)中的兩臺主機(jī)能夠直接進(jìn)行通信,即所謂的P2P通信,而不需要其他公共服務(wù)器的中轉(zhuǎn)。由于主機(jī)可能位于防火墻或NAT之后,在進(jìn)行P2P通信之前,我們需要進(jìn)行檢測以確認(rèn)它們之間能否進(jìn)行P2P通信以及如何通信。這種技術(shù)通常稱為NAT穿透(NAT Traversal)。最常見的NAT穿透是基于UDP的技術(shù),如RFC3489中定義的STUN協(xié)議。
RFC5780為了檢測NAT類型,對NAT定義了三種映射規(guī)則Mapping跟Filtering,組合形成9種類型,包含RFC3489種定義的4種類型:Full Cone NAT、Restricted Cone NAT、Port Restricted Cone NAT、Symmetric NAT。
根據(jù)NAT實現(xiàn)原理,對稱NAT安全性最高,全錐形NAT安全性最低,這也意味著對稱NAT實現(xiàn)P2P條件最苛刻。VPP作為網(wǎng)絡(luò)轉(zhuǎn)發(fā)平面,VPP默認(rèn)支持對稱型NAT,要實現(xiàn)P2P必須要求對方為全錐形NAT,在現(xiàn)實網(wǎng)絡(luò)環(huán)境中,網(wǎng)絡(luò)路徑中幾乎不存在,為了最大程度支持P2P,VPP實現(xiàn)全錐形NAT,這種模式下,很適合類似視頻推流里P2P。
NAT類型分類
RFC3489NAT的UDP的實現(xiàn)方式有4種類型:
Full Cone NAT:
完全錐形NAT,所有從同一個內(nèi)網(wǎng)IP和端口號發(fā)送過來的請求都會被映射成同一個外網(wǎng)IP和端口號,并且任何一個外網(wǎng)主機(jī)都可以通過這個映射的外網(wǎng)IP和端口號向這臺內(nèi)網(wǎng)主機(jī)發(fā)送包。
Restricted Cone NAT:
限制錐形NAT,它也是所有從同一個內(nèi)網(wǎng)IP和端口號發(fā)送過來的請求都會被映射成同一個外網(wǎng)IP和端口號。與完全錐形不同的是,外網(wǎng)主機(jī)只能夠向先前已經(jīng)向它發(fā)送過數(shù)據(jù)包的內(nèi)網(wǎng)主機(jī)發(fā)送包。
Port Restricted Cone NAT:
端口限制錐形NAT,與限制錐形NAT很相似,只不過它包括端口號。也就是說,一臺IP地址X和端口P的外網(wǎng)主機(jī)想給內(nèi)網(wǎng)主機(jī)發(fā)送包,必須是這臺內(nèi)網(wǎng)主機(jī)先前已經(jīng)給這個IP地址X和端口P發(fā)送過數(shù)據(jù)包。
Symmetric NAT:
對稱NAT,所有從同一個內(nèi)網(wǎng)IP和端口號發(fā)送到一個特定的目的IP和端口號的請求,都會被映射到同一個IP和端口號。如果同一臺主機(jī)使用相同的源地址和端口號發(fā)送包,但是發(fā)往不同的目的地,NAT將會使用不同的映射。此外,只有收到數(shù)據(jù)的外網(wǎng)主機(jī)才可以反過來向內(nèi)網(wǎng)主機(jī)發(fā)送包。
RFC5780中9種NAT類型:

下面介紹一種Mapping Behavior(映射規(guī)則)和 Fieltering Behavior(過濾規(guī)則):
Mapping Behavior:
Endpoint-Independent Mapping:
對于一個內(nèi)網(wǎng)的EedpointP,其對應(yīng)的外網(wǎng)EndpointG是基本固定的,不會隨著通訊外部主機(jī)的不同而變化。
Filtering Behavior:
Endpoint-Independent Filtering:
對于這種過濾型,NAT在主機(jī)的一個外網(wǎng)EndpointG1收到包,只要找到與之對應(yīng)的內(nèi)網(wǎng)EndpointP1,NAT就會轉(zhuǎn)發(fā)這個資料包給相應(yīng)的內(nèi)網(wǎng)EndpointP1,不管這個資料包的來源是哪里。(安全性最低,穿透性最高)
VPP Full Cone NAT
VPP通過三元組(其實是四元組,fib用來做)記錄內(nèi)網(wǎng)IP跟出口網(wǎng)關(guān)的對應(yīng)關(guān)系以及協(xié)議,而不記錄對端IP以及PORT,所以回程不會檢查過濾源IP及PORT。
簡化版NAT報文處理流程如下,文件in2out.c out2in.c:
1、 內(nèi)網(wǎng)發(fā)起的對外請求
2、 查找user的in2out表,如果不存在則根據(jù)映射算法計算出 NAT轉(zhuǎn)換后的IP、PORT,建立轉(zhuǎn)換關(guān)系in2out以及out2in表
3、 根據(jù)映射關(guān)系替換原始包頭的IP、PORT重新計算校驗和
4、 發(fā)送報文
5、 外網(wǎng)回復(fù)報文,進(jìn)入到out2in流程,查找out2in表,找到對應(yīng)映射關(guān)系
6、 根據(jù)映射關(guān)系替換原始包頭的IP、PORT重新計算校驗和
7、 接受報文
8、 發(fā)送給內(nèi)網(wǎng)地址
In2out處理簡化流程:

Out2in處理流程:

特別提醒:本網(wǎng)內(nèi)容轉(zhuǎn)載自其他媒體,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實,對本文以及其中全部或者部分內(nèi)容、文字的真實性、完整性、及時性本站不作任何保證或承諾,并請自行核實相關(guān)內(nèi)容。本站不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。如若本網(wǎng)有任何內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系我們,本站將會在24小時內(nèi)處理完畢。