智匯華云 | VPP全錐型NAT實現(xiàn)
本期智匯華云,華云數(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處理流程:
- 6-10· 華云大咖說 | 華云數(shù)據(jù)與福昕鯤鵬攜手共建國產(chǎn)云生態(tài)
- 5-7· 基于華云數(shù)據(jù)“信創(chuàng)云基座”的無錫市一體化協(xié)同辦公平臺榮獲2021數(shù)字中國創(chuàng)新大賽·鯤鵬賽道年度總決賽一等獎及最佳實踐獎!
- 2-4· 華云數(shù)據(jù)成為用戶首選品牌 蟬聯(lián)中國IT用戶滿意度兩項大獎
- 1-8· 華云數(shù)據(jù)與中國電科云達(dá)成戰(zhàn)略合作 打造自主創(chuàng)新安全云
- 7-19· 智匯華云 | Openvswitch 防火墻是如何防止IP地址欺騙的