智匯華云 | VPP全錐型NAT實(shí)現(xiàn)
本期智匯華云,華云數(shù)據(jù)特別邀請(qǐng)到華云數(shù)據(jù)網(wǎng)絡(luò)組開(kāi)發(fā)工程師許猛為大家?guī)?lái)“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)行檢測(cè)以確認(rèn)它們之間能否進(jìn)行P2P通信以及如何通信。這種技術(shù)通常稱為NAT穿透(NAT Traversal)。最常見(jiàn)的NAT穿透是基于UDP的技術(shù),如RFC3489中定義的STUN協(xié)議。
RFC5780為了檢測(cè)NAT類型,對(duì)NAT定義了三種映射規(guī)則Mapping跟Filtering,組合形成9種類型,包含RFC3489種定義的4種類型:Full Cone NAT、Restricted Cone NAT、Port Restricted Cone NAT、Symmetric NAT。
根據(jù)NAT實(shí)現(xiàn)原理,對(duì)稱NAT安全性最高,全錐形NAT安全性最低,這也意味著對(duì)稱NAT實(shí)現(xiàn)P2P條件最苛刻。VPP作為網(wǎng)絡(luò)轉(zhuǎn)發(fā)平面,VPP默認(rèn)支持對(duì)稱型NAT,要實(shí)現(xiàn)P2P必須要求對(duì)方為全錐形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和端口號(hào)發(fā)送過(guò)來(lái)的請(qǐng)求都會(huì)被映射成同一個(gè)外網(wǎng)IP和端口號(hào),并且任何一個(gè)外網(wǎng)主機(jī)都可以通過(guò)這個(gè)映射的外網(wǎng)IP和端口號(hào)向這臺(tái)內(nèi)網(wǎng)主機(jī)發(fā)送包。
Restricted Cone NAT:
限制錐形NAT,它也是所有從同一個(gè)內(nèi)網(wǎng)IP和端口號(hào)發(fā)送過(guò)來(lái)的請(qǐng)求都會(huì)被映射成同一個(gè)外網(wǎng)IP和端口號(hào)。與完全錐形不同的是,外網(wǎng)主機(jī)只能夠向先前已經(jīng)向它發(fā)送過(guò)數(shù)據(jù)包的內(nèi)網(wǎng)主機(jī)發(fā)送包。
Port Restricted Cone NAT:
端口限制錐形NAT,與限制錐形NAT很相似,只不過(guò)它包括端口號(hào)。也就是說(shuō),一臺(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ā)送過(guò)數(shù)據(jù)包。
Symmetric NAT:
對(duì)稱NAT,所有從同一個(gè)內(nèi)網(wǎng)IP和端口號(hào)發(fā)送到一個(gè)特定的目的IP和端口號(hào)的請(qǐng)求,都會(huì)被映射到同一個(gè)IP和端口號(hào)。如果同一臺(tái)主機(jī)使用相同的源地址和端口號(hào)發(fā)送包,但是發(fā)往不同的目的地,NAT將會(huì)使用不同的映射。此外,只有收到數(shù)據(jù)的外網(wǎng)主機(jī)才可以反過(guò)來(lái)向內(nèi)網(wǎng)主機(jī)發(fā)送包。
RFC5780中9種NAT類型:
下面介紹一種Mapping Behavior(映射規(guī)則)和 Fieltering Behavior(過(guò)濾規(guī)則):
Mapping Behavior:
Endpoint-Independent Mapping:
對(duì)于一個(gè)內(nèi)網(wǎng)的EedpointP,其對(duì)應(yīng)的外網(wǎng)EndpointG是基本固定的,不會(huì)隨著通訊外部主機(jī)的不同而變化。
Filtering Behavior:
Endpoint-Independent Filtering:
對(duì)于這種過(guò)濾型,NAT在主機(jī)的一個(gè)外網(wǎng)EndpointG1收到包,只要找到與之對(duì)應(yīng)的內(nèi)網(wǎng)EndpointP1,NAT就會(huì)轉(zhuǎn)發(fā)這個(gè)資料包給相應(yīng)的內(nèi)網(wǎng)EndpointP1,不管這個(gè)資料包的來(lái)源是哪里。(安全性最低,穿透性最高)
VPP Full Cone NAT
VPP通過(guò)三元組(其實(shí)是四元組,fib用來(lái)做)記錄內(nèi)網(wǎng)IP跟出口網(wǎng)關(guān)的對(duì)應(yīng)關(guān)系以及協(xié)議,而不記錄對(duì)端IP以及PORT,所以回程不會(huì)檢查過(guò)濾源IP及PORT。
簡(jiǎn)化版NAT報(bào)文處理流程如下,文件in2out.c out2in.c:
1、 內(nèi)網(wǎng)發(fā)起的對(duì)外請(qǐng)求
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表,找到對(duì)應(yīng)映射關(guān)系
6、 根據(jù)映射關(guān)系替換原始包頭的IP、PORT重新計(jì)算校驗(yàn)和
7、 接受報(bào)文
8、 發(fā)送給內(nèi)網(wǎng)地址
In2out處理簡(jiǎn)化流程:
Out2in處理流程:
- 6-10· 華云大咖說(shuō) | 華云數(shù)據(jù)與福昕鯤鵬攜手共建國(guó)產(chǎn)云生態(tài)
- 5-7· 基于華云數(shù)據(jù)“信創(chuàng)云基座”的無(wú)錫市一體化協(xié)同辦公平臺(tái)榮獲2021數(shù)字中國(guó)創(chuàng)新大賽·鯤鵬賽道年度總決賽一等獎(jiǎng)及最佳實(shí)踐獎(jiǎng)!
- 2-4· 華云數(shù)據(jù)成為用戶首選品牌 蟬聯(lián)中國(guó)IT用戶滿意度兩項(xiàng)大獎(jiǎng)
- 1-8· 華云數(shù)據(jù)與中國(guó)電科云達(dá)成戰(zhàn)略合作 打造自主創(chuàng)新安全云
- 7-19· 智匯華云 | Openvswitch 防火墻是如何防止IP地址欺騙的