OpenWrt(一):NAT技術(shù)應(yīng)用
?????????今年忙著備考,比較忙,但是還是想花點時間,記錄一下這幾年我所自學(xué)到的可能不是很有用(以及準(zhǔn)確)的知識,更希望的是,對有想學(xué)習(xí)這方面知識的大家有一定的幫助。其中,學(xué)習(xí)OpenWrt有一段時間了,期間用所學(xué)知識幫助了不少同學(xué),親戚朋友改善網(wǎng)絡(luò),也給一些小公司做過網(wǎng)絡(luò)優(yōu)化,本系列記錄一下我所學(xué)習(xí)到的OpenWrt項目的細(xì)節(jié)。

NAT介紹
NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)技術(shù)目前已被廣泛應(yīng)用在家庭網(wǎng)絡(luò)環(huán)境中,通常用于IPv4協(xié)議。簡單來說NAT技術(shù)的誕生,就是因為IPv4地址數(shù)量稀少,為了緩解v4網(wǎng)絡(luò)地址緊張,出現(xiàn)了NAT技術(shù)以供一個地址多臺設(shè)備共用。
在絕大多數(shù)應(yīng)用場景中,幾乎感受不到NAT的存在,但對于個別應(yīng)用場景,NAT會嚴(yán)重影響網(wǎng)絡(luò)使用體驗。
NAT根據(jù)轉(zhuǎn)換方式可分為:
靜態(tài)NAT
動態(tài)NAT
端口復(fù)用NAT(NAPT? ?主流)
而根據(jù)轉(zhuǎn)換后端口連通性可分為(STUN定義):
完全錐型
限制型錐型
端口限制型
對稱型
通常家庭寬帶為完全錐型或?qū)ΨQ型,外部連通性根據(jù)類型1-4遞減。

NAT優(yōu)缺點
優(yōu)點:
是一道天然防火墻,外部公網(wǎng)無法直接訪問私網(wǎng)主機(jī)
共享網(wǎng)絡(luò),理論上最多可共享給65535臺主機(jī)
極大程度緩解IPv4地址稀少
作為NAT主機(jī),是私網(wǎng)唯一網(wǎng)絡(luò)出口,可以靈活程度管理私網(wǎng)主機(jī)聯(lián)網(wǎng)
缺點:
嚴(yán)重影響個別應(yīng)用場景,例如P2P技術(shù)(包括P2P游戲聯(lián)機(jī)互動)
NAT主機(jī)性能會嚴(yán)重影響所控制的內(nèi)部網(wǎng)絡(luò)性能,導(dǎo)致延遲,丟包,網(wǎng)絡(luò)不穩(wěn)定等
外網(wǎng)訪問內(nèi)網(wǎng)會受限,如果內(nèi)網(wǎng)有提供服務(wù),默認(rèn)下不能被外部網(wǎng)絡(luò)訪問
對于某些數(shù)據(jù)包嚴(yán)格的應(yīng)用(不允許修改數(shù)據(jù)包),則無法使用

根據(jù)使用場景,選擇適合您的NAT類型
通常情況下,為了確保網(wǎng)絡(luò)安全性,強(qiáng)烈建議使用對稱型NAT,但是包括但不限于如下場景建議盡可能選擇完全錐型NAT:
直播,其中需要推流,VTS聯(lián)動,游戲聯(lián)動,以及對網(wǎng)絡(luò)要求較高的游戲或應(yīng)用等
游戲,尤其是對網(wǎng)絡(luò)延遲敏感,需要很高的網(wǎng)絡(luò)穩(wěn)定性
P2P下載,完全錐型可能會獲得更高的下載速度,當(dāng)然還有上傳速度
多人使用(多連接數(shù)),完全錐型NAT會一定程度上減輕NAT主機(jī)負(fù)擔(dān),帶來網(wǎng)絡(luò)質(zhì)量提升,但現(xiàn)如今NAT主機(jī)性能完足夠,幾乎沒有影響

檢測您的NAT類型
BitComet-菜單欄-工具-檢測NAT類型
https://github.com/HMBSbige/NatTypeTester/releases項目
上述兩種工具使用都很簡單,一鍵式自動檢測并匯報結(jié)果。

OpenWrt NAT實現(xiàn)原理
1.防火墻(firewall C?&& firewall4)
????OpenWrt防火墻屬于包過濾類型防火墻,根據(jù)設(shè)定規(guī)則(源地址,目標(biāo)地址,連接協(xié)議,端口甚至是不同時間段等等),對于數(shù)據(jù)包選擇性入站/出站/轉(zhuǎn)發(fā)。然而改變NAT類型即意味著改變端口數(shù)據(jù)包選擇性,所以需要改變firewall及其后端,以支持不同NAT(默認(rèn)情況下OpenWrt為對稱型NAT)
2.Netfilter/iptables &&?Netfilter/nftables
????OpenWrt firewall C由iptables實現(xiàn),firewall 4由nftables(可改為iptables)實現(xiàn),所以fullcone補(bǔ)丁二者默認(rèn)情況下不能通用。
3.Linux?Netfilter框架
????2中的項目補(bǔ)丁通過對Linux內(nèi)核下netfilter/nftable 或 netfilter/iptables進(jìn)行擴(kuò)展,在內(nèi)核態(tài)進(jìn)行NAT端口映射表刷新和修改,以實現(xiàn)高效的fullcone,具體原理可查閱:
????同時,lean's/lede中給出了另一種fullcone實現(xiàn)方式(高性能fullcone,上述fullcone的實現(xiàn)被稱為兼容模式fullcone),能實現(xiàn)超高并發(fā)吞吐量和超多連接數(shù)(感謝lean)。
????當(dāng)然改完之后需要對firewall源碼打patch,以使用fullcone模塊,實現(xiàn)fullcone。

小結(jié)
????????對于大多數(shù)小伙伴來說,不太需要關(guān)心NAT類型,因為多數(shù)情況下家庭網(wǎng)絡(luò)環(huán)境很簡單,設(shè)備數(shù)量和連接數(shù)通常很少,但是對于某些高效性或安全性應(yīng)用場景,則需要考慮采用何種NAT,以在相對高效和相對安全中權(quán)衡。
????????NAT技術(shù)的貢獻(xiàn)很大,極大程度上緩解了IPv4網(wǎng)絡(luò)地址緊張的問題,但是NAT的廣泛應(yīng)用,卻違背了網(wǎng)絡(luò)互聯(lián)互通的這個最基本且最重要的特性,且最重要的是,NAT改變了人們對網(wǎng)絡(luò)的看法,也嚴(yán)重影響IPv6協(xié)議的推廣,甚至出現(xiàn)NAT6(應(yīng)用在IPv6層的NAT)這種有些讓人摸不到頭腦的技術(shù),但是NAT,并不能改變IPv4緊張的本質(zhì),未來,網(wǎng)絡(luò)發(fā)展到相當(dāng)規(guī)模后,NAT勢必會成為阻礙。