NAT與內(nèi)網(wǎng)穿透

NAT是什么

網(wǎng)絡(luò)地址轉(zhuǎn)換,就是替換IP報(bào)文頭部的地址信息.由于IPv4地址有限,不可能為每一個(gè)上網(wǎng)設(shè)備分配一個(gè)ip,而NAT就是來解決這個(gè)問題的.我們?cè)谏暇W(wǎng)時(shí)很有可能處在一個(gè)NAT設(shè)備之后, NAT設(shè)備會(huì)在ip包通過時(shí)會(huì)修改其 源/目標(biāo)IP地址,有時(shí)還會(huì)修改TCP/UDP協(xié)議的端口號(hào),從而實(shí)現(xiàn)多臺(tái)設(shè)備使用同一外網(wǎng)IP進(jìn)行互聯(lián)網(wǎng)通訊

NAT映射表.png

如上,三臺(tái)設(shè)備都使用120.131.92.21這一公網(wǎng)IP. 而對(duì)于這三臺(tái)設(shè)備分別從各自端口發(fā)出的TCP/UDP請(qǐng)求,則映射至NAT設(shè)備不同的端口上,記錄在NAT表上.這樣就區(qū)分了某個(gè)請(qǐng)求試試來自哪個(gè)設(shè)備的哪個(gè)端口上.

NAT特點(diǎn)

1,網(wǎng)絡(luò)被分為私網(wǎng),公網(wǎng)兩部分,NAT網(wǎng)關(guān)設(shè)置私網(wǎng)到公網(wǎng)的路由出口.
2,網(wǎng)絡(luò)只能由私網(wǎng)側(cè)發(fā)起,公網(wǎng)無法主動(dòng)訪問私網(wǎng)主機(jī)(是這樣設(shè)計(jì)的,但是可以通過打洞)
3,NAT網(wǎng)關(guān)在兩個(gè)訪問方向上完成兩次地址的轉(zhuǎn)換,出口替換源地址,入口替換目的地址
4,NAT網(wǎng)關(guān)的存在對(duì)通信雙方保持透明
5,NAT網(wǎng)關(guān)為了實(shí)現(xiàn)雙向翻譯,需要維持一張關(guān)聯(lián)表,將會(huì)話信息保存

NAT的副作用

1,NAT表的淘汰

當(dāng)NAT表對(duì)應(yīng)的記錄在一段時(shí)間內(nèi)沒有通訊時(shí),網(wǎng)絡(luò)運(yùn)營商就會(huì)將其淘汰掉,若此時(shí)外網(wǎng)還通過原來記錄的外網(wǎng)IP地址和內(nèi)網(wǎng)設(shè)備進(jìn)行通訊則會(huì)不通.

2,NAT墻

當(dāng)外界對(duì)內(nèi)網(wǎng)的請(qǐng)求到達(dá)NAT設(shè)備時(shí),若不符合NAT設(shè)備和NAT表的要求,
則會(huì)被丟棄,這樣若想實(shí)現(xiàn)ip地址不固定客戶端間通訊則需要額外的打洞操作
(需要心跳包刷新NAT表重置時(shí)間)

3,端對(duì)端通信模型的破壞

NAT實(shí)現(xiàn)了將多個(gè)內(nèi)部主機(jī)發(fā)出的鏈接被復(fù)用到一個(gè)ip上,這樣無法基于ip對(duì)主機(jī)進(jìn)行追蹤,這樣服務(wù)器不能簡(jiǎn)單的將同一ip與主機(jī)掛鉤.這樣再統(tǒng)計(jì)信息和防止DDOS攻擊時(shí)都會(huì)變得復(fù)雜, 有時(shí),若-個(gè)NAT設(shè)備擁有多個(gè)IP地址時(shí),一組關(guān)聯(lián)的會(huì)話可能會(huì)被分配到不同公網(wǎng)ip里,總之NAT隱蔽了通訊的另一端.

NAT類型

1, Full Cone NAT(完全雛形NAT)

設(shè)備比較少,一旦內(nèi)部主機(jī)端口在NAT網(wǎng)關(guān)完成端口映射,則后續(xù)外網(wǎng)任一主機(jī)都可以通過這映射好的端口進(jìn)行訪問

2, Restricted Cone NAT (限制雛形NAT)

相較與全雛形NAT,在完成端口映射后,對(duì)IP地址有限制,只有內(nèi)網(wǎng)對(duì)外訪問過的ip地址才可以對(duì)該端口進(jìn)行連接

3, Port Restricted Cone NAT(端口限制雛形NAT)

相較于限制雛形NAT,在端口上也加以限制,
只有內(nèi)網(wǎng)向該ip與端口發(fā)送過信息才能對(duì)其訪問

4, Symmetric NAT (對(duì)稱NAT)

也就是說,雖然是同一個(gè)內(nèi)網(wǎng)主機(jī),對(duì)不同的外網(wǎng)ip+端口訪問時(shí),在NAT表上會(huì)映射成不同的端口號(hào)

注意:

事實(shí)上,這些術(shù)語的引入是很多混淆的起源?,F(xiàn)實(shí)中的很多NAT設(shè)備是將這些轉(zhuǎn)換方式混合在一起工作的,而不單單使用一種,所以這些術(shù)語只適合描述一種工作方式,而不是一個(gè)設(shè)備。比如,很多NAT設(shè)備對(duì)內(nèi)部發(fā)出的連接使用對(duì)稱型NAT方式,而同時(shí)支持靜態(tài)的端口映射,后者可以被看作是全錐型NAT方式。而有些情況下,NAT設(shè)備的一個(gè)公網(wǎng)地址和端口可以同時(shí)映射到內(nèi)部幾個(gè)服務(wù)器上以實(shí)現(xiàn)負(fù)載分擔(dān),比如一個(gè)對(duì)外提供WEB服務(wù)器的站點(diǎn)可能是有成百上千個(gè)服務(wù)器在提供HTTP服務(wù),但是對(duì)外卻表現(xiàn)為一個(gè)或少數(shù)幾個(gè)IP地址。

內(nèi)網(wǎng)穿透

應(yīng)用層網(wǎng)管(ALG)

普通NAT實(shí)現(xiàn)了對(duì)UDP或TCP報(bào)文頭中的的IP地址及端口轉(zhuǎn)換功能,但對(duì)應(yīng)用層數(shù)據(jù)載荷中的字段無能為力,在許多應(yīng)用層協(xié)議中,比如多媒體協(xié)議(H.323、SIP等)、FTP、SQLNET等,TCP/UDP載荷中帶有地址或者端口信息,這些內(nèi)容不能被NAT進(jìn)行有效的轉(zhuǎn)換,就可能導(dǎo)致問題。而NAT ALG(Application Level Gateway,應(yīng)用層網(wǎng)關(guān))技術(shù)能對(duì)多通道協(xié)議進(jìn)行應(yīng)用層報(bào)文信息的解析和地址轉(zhuǎn)換,將載荷中需要進(jìn)行地址轉(zhuǎn)換的IP地址和端口或者需特殊處理的字段進(jìn)行相應(yīng)的轉(zhuǎn)換和處理,從而保證應(yīng)用層通信的正確性。

例如,F(xiàn)TP應(yīng)用就由數(shù)據(jù)連接和控制連接共同完成,而且數(shù)據(jù)連接的建立動(dòng)態(tài)地由控制連接中的載荷字段信息決定,這就需要ALG來完成載荷字段信息的轉(zhuǎn)換,以保證后續(xù)數(shù)據(jù)連接的正確建立。

圖片.png

圖中私網(wǎng)側(cè)的主機(jī)要訪問公網(wǎng)的FTP服務(wù)器。NAT設(shè)備上配置了私網(wǎng)地址192.168.1.2到公網(wǎng)地址8.8.8.11的映射,實(shí)現(xiàn)地址的NAT轉(zhuǎn)換,以支持私網(wǎng)主機(jī)對(duì)公網(wǎng)的訪問。組網(wǎng)中,若沒有ALG對(duì)報(bào)文載荷的處理,私網(wǎng)主機(jī)發(fā)送的PORT報(bào)文到達(dá)服務(wù)器端后,服務(wù)器無法根據(jù)私網(wǎng)地址進(jìn)行尋址,也就無法建立正確的數(shù)據(jù)連接。整個(gè)通信過程包括如下四個(gè)階段:

(1) 私網(wǎng)主機(jī)和公網(wǎng)FTP服務(wù)器之間通過TCP三次握手成功建立控制連接。

(2) 控制連接建立后,私網(wǎng)主機(jī)向FTP服務(wù)器發(fā)送PORT報(bào)文,報(bào)文中攜帶私網(wǎng)主機(jī)指定的數(shù)據(jù)連接的目的地址和端口,用于通知服務(wù)器使用該地址和端口和自己進(jìn)行數(shù)據(jù)連接。

(3) PORT報(bào)文在經(jīng)過支持ALG特性的NAT設(shè)備時(shí),報(bào)文載荷中的私網(wǎng)地址和端口會(huì)被轉(zhuǎn)換成對(duì)應(yīng)的公網(wǎng)地址和端口。即設(shè)備將收到的PORT報(bào)文載荷中的私網(wǎng)地址192.168.1.2轉(zhuǎn)換成公網(wǎng)地址8.8.8.11,端口1084轉(zhuǎn)換成12487。

(4) 公網(wǎng)的FTP服務(wù)器收到PORT報(bào)文后,解析其內(nèi)容,并向私網(wǎng)主機(jī)發(fā)起數(shù)據(jù)連接,該數(shù)據(jù)連接的目的地址為8.8.8.11,目的端口為12487(注意:一般情況下,該報(bào)文源端口為20,但由于FTP協(xié)議沒有嚴(yán)格規(guī)定,有的服務(wù)器發(fā)出的數(shù)據(jù)連接源端口為大于1024的隨機(jī)端口,如本例采用的是wftpd服務(wù)器,采用的源端口為3004)。由于該目的地址是一個(gè)公網(wǎng)地址,因此后續(xù)的數(shù)據(jù)連接就能夠成功建立,從而實(shí)現(xiàn)私網(wǎng)主機(jī)對(duì)公網(wǎng)服務(wù)器的訪問。

總而言之,在ALG中配置的支持的協(xié)議,可以實(shí)現(xiàn)逆向訪問

中間件技術(shù)

這也是一種通過開發(fā)通用方法解決NAT穿越問題的努力。與前者不同之處是,NAT網(wǎng)關(guān)是這一解決方案的參與者。與ALG的不同在于,客戶端會(huì)參與網(wǎng)關(guān)公網(wǎng)映射信息的維護(hù),此時(shí)NAT網(wǎng)關(guān)只要理解客戶端的請(qǐng)求并按照要求去分配轉(zhuǎn)換表,不需要自己去分析客戶端的應(yīng)用層數(shù)據(jù)。其中UPnP就是這樣一種方法。UPnP中文全稱為通用即插即用,是一個(gè)通用的網(wǎng)絡(luò)終端與網(wǎng)關(guān)的通信協(xié)議,具備信息發(fā)布和管理控制的能力。其中,網(wǎng)關(guān)映射請(qǐng)求可以為客戶動(dòng)態(tài)添加映射表項(xiàng)。此時(shí),NAT不再需要理解應(yīng)用層攜帶的信息,只轉(zhuǎn)換IP地址和端口信息。而客戶端通過控制消息或信令發(fā)到公網(wǎng)側(cè)的信息中,直接攜帶公網(wǎng)映射的IP地址和端口,接收端可以按照此信息建立數(shù)據(jù)連接。NAT網(wǎng)關(guān)在收到數(shù)據(jù)或連接請(qǐng)求時(shí),按照UPnP建立的表項(xiàng)只轉(zhuǎn)換地址和端口信息,不關(guān)心內(nèi)容,再將數(shù)據(jù)轉(zhuǎn)發(fā)到內(nèi)網(wǎng)。這種方案需要網(wǎng)關(guān)、內(nèi)部主機(jī)和應(yīng)用程序都支持UPnP技術(shù),且組網(wǎng)允許內(nèi)部主機(jī)和NAT網(wǎng)關(guān)之間可以直接交換UPnP信令才能實(shí)施。

中繼代理技術(shù)

準(zhǔn)確說它不是NAT穿越技術(shù),而是NAT旁路技術(shù)。簡(jiǎn)單說,就是在NAT網(wǎng)關(guān)所在的位置旁邊放置一個(gè)應(yīng)用服務(wù)器,這個(gè)服務(wù)器在內(nèi)部網(wǎng)絡(luò)和外部公網(wǎng)分別有自己的網(wǎng)絡(luò)連接??蛻舳颂囟ǖ膽?yīng)用產(chǎn)生網(wǎng)絡(luò)請(qǐng)求時(shí),將定向發(fā)送到應(yīng)用代理服務(wù)器。應(yīng)用代理服務(wù)器根據(jù)代理協(xié)議解析客戶端的請(qǐng)求,再從服務(wù)器的公網(wǎng)側(cè)發(fā)起一個(gè)新的請(qǐng)求,把客戶端請(qǐng)求的內(nèi)容中繼到外部網(wǎng)絡(luò)上,返回的相應(yīng)反方向中繼。這項(xiàng)技術(shù)和ALG有很大的相似性,它要求為每個(gè)應(yīng)用類型部署中繼代理業(yè)務(wù),中間服務(wù)器要理解這些請(qǐng)求。

特定協(xié)議的自穿越技術(shù)

在所有方法中最復(fù)雜也最可靠的就是自己解決自己的問題。比如IKE和IPsec技術(shù),在設(shè)計(jì)時(shí)就考慮了到如何穿越NAT的問題。因?yàn)檫@個(gè)協(xié)議是一個(gè)自加密的協(xié)議并且具有報(bào)文防修改的鑒別能力,其他通用方法愛莫能助。因?yàn)閷?shí)際應(yīng)用的NAT網(wǎng)關(guān)基本都是NAPT方式,所有通過傳輸層協(xié)議承載的報(bào)文可以順利通過NAT。IKE和IPsec采用的方案就是用UDP在報(bào)文外面再加一層封裝,而內(nèi)部的報(bào)文就不再受到影響。IKE中還專門增加了NAT網(wǎng)關(guān)是否存在的檢查能力以及繞開NAT網(wǎng)關(guān)檢測(cè)IKE協(xié)議的方法。

探針技術(shù)STUN和TURN

所謂探針技術(shù),是通過在所有參與通信的實(shí)體上安裝探測(cè)插件,以檢測(cè)網(wǎng)絡(luò)中是否存在NAT網(wǎng)關(guān),并對(duì)不同NAT模型實(shí)施不同穿越方法的一種技術(shù)。STUN服務(wù)器被部署在公網(wǎng)上,用于接收來自通信實(shí)體的探測(cè)請(qǐng)求,服務(wù)器會(huì)記錄收到請(qǐng)求的報(bào)文地址和端口,并填寫到回送的響應(yīng)報(bào)文中??蛻舳烁鶕?jù)接收到的響應(yīng)消息中記錄的地址和端口與本地選擇的地址和端口進(jìn)行比較,就能識(shí)別出是否存在NAT網(wǎng)關(guān)。如果存在NAT網(wǎng)關(guān),客戶端會(huì)使用之前的地址和端口向服務(wù)器的另外一個(gè)IP發(fā)起請(qǐng)求,重復(fù)前面的探測(cè)。然后再比較兩次響應(yīng)返回的結(jié)果判斷出NAT工作的模式。由前述的一對(duì)多轉(zhuǎn)換模型得知,除對(duì)稱型NAT以外的模型,NAT網(wǎng)關(guān)對(duì)內(nèi)部主機(jī)地址端口的映射都是相對(duì)固定的,所以比較容易實(shí)現(xiàn)NAT穿越。而對(duì)稱型NAT為每個(gè)連接提供一個(gè)映射,使得轉(zhuǎn)換后的公網(wǎng)地址和端口對(duì)不可預(yù)測(cè)。此時(shí)TURN可以與STUN綁定提供穿越NAT的服務(wù),即在公網(wǎng)服務(wù)器上提供一個(gè)“地址端口對(duì)”,所有此“地址端口對(duì)”接收到的數(shù)據(jù)會(huì)經(jīng)由探測(cè)建立的連接轉(zhuǎn)發(fā)到內(nèi)網(wǎng)主機(jī)上。TURN分配的這個(gè)映射“地址端口對(duì)”會(huì)通過STUN響應(yīng)發(fā)給內(nèi)部主機(jī),后者將此信息放入建立連接的信令中通知通信的對(duì)端。這種探針技術(shù)是一種通用方法,不用在NAT設(shè)備上為每種應(yīng)用協(xié)議開發(fā)功能,相對(duì)于ALG方式有一定普遍性。但是TURN中繼服務(wù)會(huì)成為通信瓶頸。而且在客戶端中增加探針功能要求每個(gè)應(yīng)用都要增加代碼才能支持。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. OSI,TCP/IP,五層協(xié)議的體系結(jié)構(gòu),以及各層協(xié)議 OSI分層 (7層):物理層、數(shù)據(jù)鏈路層、...
    iCaptain閱讀 2,595評(píng)論 0 4
  • 文/上庸山人 站牌下,很多人,焦急的,張望的,說笑的。我望著718來的方向,我的耳里只有樂音。我靜默的等,靜默的...
    李想主義閱讀 421評(píng)論 0 1
  • 我猜我現(xiàn)在的狀態(tài)就像人們臨死之前,因?yàn)椴]有經(jīng)歷過臨死的掙扎。此刻不斷回憶過去, 回憶那些感動(dòng),回憶感動(dòng)背后潛伏的...
    Wandaha閱讀 244評(píng)論 0 1
  • 又是一個(gè)周檢視的到來。這周的主題是人生的八大關(guān)注,分別是家庭、健康、效能、休閑、社交、讀書、事業(yè)、財(cái)富。這周的作...
    嗨233閱讀 136評(píng)論 2 1
  • 在我無衣可加,無燈可點(diǎn)時(shí) 我免不了受你的蠱惑 一步一步接近出口,尋找 光明的天地 你是誰。到底誰是你。 為什么在我...
    糧食和花圈閱讀 245評(píng)論 6 7

友情鏈接更多精彩內(nèi)容