
本期智匯華云,華云數(shù)據(jù)特別邀請到華云數(shù)據(jù)網(wǎng)絡(luò)組開發(fā)工程師許猛為大家?guī)?ldquo;VPP全錐型NAT實(shí)現(xiàn)”。
內(nèi)容介紹
在現(xiàn)實(shí)Internet網(wǎng)絡(luò)環(huán)境中,大多數(shù)計(jì)算機(jī)主機(jī)都位于防火墻或NAT之后,只有少部分主機(jī)能夠直接接入Internet。很多時(shí)候,我們希望網(wǎng)絡(luò)中的兩臺(tái)主機(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實(shí)現(xiàn)原理,對稱NAT安全性最高,全錐形NAT安全性最低,這也意味著對稱NAT實(shí)現(xiàn)P2P條件最苛刻。VPP作為網(wǎng)絡(luò)轉(zhuǎn)發(fā)平面,VPP默認(rèn)支持對稱型NAT,要實(shí)現(xiàn)P2P必須要求對方為全錐形NAT,在現(xiàn)實(shí)網(wǎng)絡(luò)環(huán)境中,網(wǎng)絡(luò)路徑中幾乎不存在,為了最大程度支持P2P,VPP實(shí)現(xiàn)全錐形NAT,這種模式下,很適合類似視頻推流里P2P。
NAT類型分類
RFC3489NAT的UDP的實(shí)現(xiàn)方式有4種類型:
Full Cone NAT:
完全錐形NAT,所有從同一個(gè)內(nèi)網(wǎng)IP和端口號發(fā)送過來的請求都會(huì)被映射成同一個(gè)外網(wǎng)IP和端口號,并且任何一個(gè)外網(wǎng)主機(jī)都可以通過這個(gè)映射的外網(wǎng)IP和端口號向這臺(tái)內(nèi)網(wǎng)主機(jī)發(fā)送包。
Restricted Cone NAT:
限制錐形NAT,它也是所有從同一個(gè)內(nèi)網(wǎng)IP和端口號發(fā)送過來的請求都會(huì)被映射成同一個(gè)外網(wǎng)IP和端口號。與完全錐形不同的是,外網(wǎng)主機(jī)只能夠向先前已經(jīng)向它發(fā)送過數(shù)據(jù)包的內(nèi)網(wǎng)主機(jī)發(fā)送包。
Port Restricted Cone NAT:
端口限制錐形NAT,與限制錐形NAT很相似,只不過它包括端口號。也就是說,一臺(tái)IP地址X和端口P的外網(wǎng)主機(jī)想給內(nèi)網(wǎng)主機(jī)發(fā)送包,必須是這臺(tái)內(nèi)網(wǎng)主機(jī)先前已經(jīng)給這個(gè)IP地址X和端口P發(fā)送過數(shù)據(jù)包。
Symmetric NAT:
對稱NAT,所有從同一個(gè)內(nèi)網(wǎng)IP和端口號發(fā)送到一個(gè)特定的目的IP和端口號的請求,都會(huì)被映射到同一個(gè)IP和端口號。如果同一臺(tái)主機(jī)使用相同的源地址和端口號發(fā)送包,但是發(fā)往不同的目的地,NAT將會(huì)使用不同的映射。此外,只有收到數(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:
對于一個(gè)內(nèi)網(wǎng)的EedpointP,其對應(yīng)的外網(wǎng)EndpointG是基本固定的,不會(huì)隨著通訊外部主機(jī)的不同而變化。
Filtering Behavior:
Endpoint-Independent Filtering:
對于這種過濾型,NAT在主機(jī)的一個(gè)外網(wǎng)EndpointG1收到包,只要找到與之對應(yīng)的內(nèi)網(wǎng)EndpointP1,NAT就會(huì)轉(zhuǎn)發(fā)這個(gè)資料包給相應(yīng)的內(nèi)網(wǎng)EndpointP1,不管這個(gè)資料包的來源是哪里。(安全性最低,穿透性最高)
VPP Full Cone NAT
VPP通過三元組(其實(shí)是四元組,fib用來做)記錄內(nèi)網(wǎng)IP跟出口網(wǎng)關(guān)的對應(yīng)關(guān)系以及協(xié)議,而不記錄對端IP以及PORT,所以回程不會(huì)檢查過濾源IP及PORT。
簡化版NAT報(bào)文處理流程如下,文件in2out.c out2in.c:
1、 內(nèi)網(wǎng)發(fā)起的對外請求
2、 查找user的in2out表,如果不存在則根據(jù)映射算法計(jì)算出 NAT轉(zhuǎn)換后的IP、PORT,建立轉(zhuǎn)換關(guān)系in2out以及out2in表
3、 根據(jù)映射關(guān)系替換原始包頭的IP、PORT重新計(jì)算校驗(yàn)和
4、 發(fā)送報(bào)文
5、 外網(wǎng)回復(fù)報(bào)文,進(jìn)入到out2in流程,查找out2in表,找到對應(yīng)映射關(guān)系
6、 根據(jù)映射關(guān)系替換原始包頭的IP、PORT重新計(jì)算校驗(yàn)和
7、 接受報(bào)文
8、 發(fā)送給內(nèi)網(wǎng)地址
In2out處理簡化流程:

Out2in處理流程:

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