全面總結NAT技術原理與應用

今天和一起來聊聊“NAT技術原理與應用”,由於個人原因講解的範圍有限,但還是可以幫助大家不少的,有需要的小夥伴,可以參考一下。

1概述

  1.1簡介

  1.1.1名詞解釋

  公有IP地址:也叫全局地址,是指合法的IP地址,它是由NIC(網絡信息中心)或者ISP(網絡服務提供商)分配的地址,對外代表一個或多個內部局部地址,是全球統一的可尋址的地址。

  私有IP地址:也叫內部地址,屬於非註冊地址,專門爲組織機構內部使用。因特網分配編號委員會(IANA)保留了3塊IP地址做爲私有IP地址:

  10.0.0.0———10.255.255.255

  172.16.0.0———172.16.255.255

  192.168.0.0———192.168.255.255

  地址池:地址池是有一些外部地址(全球唯一的IP地址)組合而成,我們稱這樣的一個地址集合爲地址池。在內部網絡的數據包通過地址轉換到達外部網絡時,將會在地址池中選擇某個IP地址作爲數據包的源IP地址,這樣可以有效的利用用戶的外部地址,提高訪問外部網絡的能力。

  1.1.2關於NAT

  NAT英文全稱是“NetworkAddressTranslation”,中文意思是“網絡地址轉換”,它是一個IETF(InternetEngineeringTaskForce,Internet工程任務組)標準,允許一個整體機構以一個公用IP(InternetProtocol)地址出現在Internet上。顧名思義,它是一種把內部私有網絡地址(IP地址)翻譯成合法網絡IP地址的技術,如下圖所示。因此我們可以認爲,NAT在一定程度上,能夠有效的解決公網地址不足的問題。

 NAT技術原理與應用_NAT技術_互聯網技術_網絡工程師_課課家教育

  簡單地說,NAT就是在局域網內部網絡中使用內部地址,而當內部節點要與外部網絡進行通訊時,就在網關(可以理解爲出口,打個比方就像院子的門一樣)處,將內部地址替換成公用地址,從而在外部公網(internet)上正常使用,NAT可以使多臺計算機共享Internet連接,這一功能很好地解決了公共IP地址緊缺的問題。通過這種方法,可以只申請一個合法IP地址,就把整個局域網中的計算機接入Internet中。這時,NAT屏蔽了內部網絡,所有內部網計算機對於公共網絡來說是不可見的,而內部網計算機用戶通常不會意識到NAT的存在。如下圖所示。這裏提到的內部地址,是指在內部網絡中分配給節點的私有IP地址,這個地址只能在內部網絡中使用,不能被路由轉發。

這裏提到的內部地址,是指在內部網絡中分配給節點的私有IP地址,這個地址只能在內部網絡中使用,不能被路由轉發。

  NAT功能通常被集成到路由器、防火牆、ISDN路由器或者單獨的NAT設備中。比如Cisco路由器中已經加入這一功能,網絡管理員只需在路由器的IOS中設置NAT功能,就可以實現對內部網絡的屏蔽。再比如防火牆將WEBServer的內部地址192.168.1.1映射爲外部地址202.96.23.11,外部訪問202.96.23.11地址實際上就是訪問訪問192.168.1.1。此外,對於資金有限的小型企業來說,現在通過軟件也可以實現這一功能。Windows98SE、Windows2000都包含了這一功能。

  NAT工作原理

  修改IP數據包中的源IP地址,或目的IP地址。主要目的是把RFC1918所提議的私有地址轉變成在Internet上可路由的公有合法地址。對於某些有限的應用(如DNS、FTP等),它也可以修改IP數據包有效載荷中的地址。由於應用的複雜性,NAT目前支持的應用有限,當然,如果需要,完全可以針對新的應用做相應的開發工作。

  從配置了NAT技術的一臺路由器上,把整個網絡分成兩部分:內部網絡和外部網絡。

  NAT技術中有四個術語:

  內部本地地址----局域網內部主機的擁有的一個真實地址,一般來說是一個私有地址

  內部全局地址----對於外部網絡來說,局域網內部主機所表現的IP地址。

  外部本地地址----外部網絡主機的真實地址。

  外部全局地址----對於內部網絡來說,外部網絡主機所表現的IP地址。

  對於網絡地址轉換技術來講,最重要的一點是,在配置NAT的路由器上形成了NAT轉換表,這個轉換表的形成是非常關鍵的。配置NAT後,能形成正確的轉換表,那麼我們的工作就算成功了。

  1.2分類

  NAT有三種類型:靜態NAT(StaticNAT)、動態地址NAT(PooledNAT)、網絡地址端口轉換NAPT(Port-LevelNAT)。

NAT有三種類型:靜態NAT(StaticNAT)、動態地址NAT(PooledNAT)、網絡地址端口轉換NAPT(Port-LevelNAT)

  1.2.1靜態NAT

  通過手動設置,使Internet客戶進行的通信能夠映射到某個特定的私有網絡地址和端口。如果想讓連接在Internet上的計算機能夠使用某個私有網絡上的服務器(如網站服務器)以及應用程序(如遊戲),那麼靜態映射是必需的。靜態映射不會從NAT轉換表中刪除。

  如果在NAT轉換表中存在某個映射,那麼NAT只是單向地從Internet向私有網絡傳送數據。這樣,NAT就爲連接到私有網絡部分的計算機提供了某種程度的保護。但是,如果考慮到Internet的安全性,NAT就要配合全功能的防火牆一起使用。

  對於以上網絡拓撲圖,當內網主機10.1.1.1如果要與外網的主機201.0.0.11通信時,主機(IP:10.1.1.1)的數據包經過路由器時,路由器通過查找NATtable將IP數據包的源IP地址(10.1.1.1)改成與之對應的全局IP地址(201.0.0.1),而目標IP地址201.0.0.11保持不變,這樣,數據包就能到達201.0.0.11。而當主機HostB(IP:201.0.0.11)響應的數據包到達與內網相連接的路由器時,路由器同樣查找NATtable,將IP數據包的目的IP地址改成10.1.1.1,這樣內網主機就能接收到外網主機發過來的數據包。在靜態NAT方式中,內部的IP地址與公有IP地址是一種一一對應的映射關係,所以,採用這種方式的前提是,機構能夠申請到足夠多的全局IP地址。

  1.2.2動態NAT

  動態地址NAT只是轉換IP地址,它爲每一個內部的IP地址分配一個臨時的外部IP地址,主要應用於撥號,對於頻繁的遠程聯接也可以採用動態NAT。當遠程用戶聯接上之後,動態地址NAT就會分配給他一個IP地址,用戶斷開時,這個IP地址就會被釋放而留待以後使用。

  動態NAT方式適合於當機構申請到的全局IP地址較少,而內部網絡主機較多的情況。內網主機IP與全局IP地址是多對一的關係。當數據包進出內網時,具有NAT功能的設備對IP數據包的處理與靜態NAT的一樣,只是NATtable表中的記錄是動態的,若內網主機在一定時間內沒有和外部網絡通信,有關它的IP地址映射關係將會被刪除,並且會把該全局IP地址分配給新的IP數據包使用,形成新的NATtable映射記錄。

  1.2.3網絡地址端口轉換NAPT

  網絡地址端口轉換NAPT(NetworkAddressPortTranslation)則是把內部地址映射到外部網絡的一個IP地址的不同端口上。它可以將中小型的網絡隱藏在一個合法的IP地址後面。NAPT與動態地址NAT不同,它將內部連接映射到外部網絡中的一個單獨的IP地址上,同時在該地址上加上一個由NAT設備選定的端口號。

  NAPT是使用最普遍的一種轉換方式,它又包含兩種轉換方式:SNAT和DNAT。

  (1)源NAT(SourceNAT,SNAT):修改數據包的源地址。源NAT改變第一個數據包的來源地址,它永遠會在數據包發送到網絡之前完成,數據包僞裝就是一具SNAT的例子。

  (2)目的NAT(DestinationNAT,DNAT):修改數據包的目的地址。DestinationNAT剛好與SNAT相反,它是改變第一個數據包的目的地地址,如平衡負載、端口轉發和透明代理就是屬於DNAT。

  源NAT舉例:對於以上網絡拓撲圖,內網的主機數量比較多,但是該組織只有一個合法的IP地址,當內網主機(10.1.1.3)往外發送數據包時,則需要修改數據包的IP地址和TCP/UDP端口號,例如將

  源IP:10.1.1.3

  源port:1493

  改成

  源IP:201.0.0.1

  源port:1492(注意:源端口號可以與原來的一樣也可以不一樣)

  當外網主機(201.0.0.11)響應內網主機(10.1.1.3)時,應將:

  目的IP:201.0.0.1

  目的port:1492

  改成

  目的IP:10.1.1.3

  目的port:1493

  這樣,通過修改IP地址和端口的方法就可以使內網中所有的主機都能訪問外網,此類NAT適用於組織或機構內只有一個合法的IP地址的情況,也是動態NAT的一種特例。

這樣,通過修改IP地址和端口的方法就可以使內網中所有的主機都能訪問外網,此類NAT適用於組織或機構內只有一個合法的IP地址的情況,也是動態NAT的一種特例

  目的NAT舉例:這種方式適用於內網的某些服務器需要爲外網提供某些服務的情況。例如以上拓撲結構,內網服務器羣(ip地址分別爲:10.1.1.1,10.1.1.2,10.1.1.3等)需要爲外網提供WEB服務,當外網主機HostB訪問內網時,所發送的數據包的目的IP地址爲10.1.1.127,端口號爲:80,當該數據包到達內網連接的路由器時,路由器查找NATtable,路由器通過修改目的IP地址和端口號,將外網的數據包平均發送到不同的主機上(10.1.1.1,10.1.1.2,10.1.1.3等),這樣就實現了負載均衡。

  2NAT原理

  2.1地址轉換

  NAT的基本工作原理是,當私有網主機和公共網主機通信的IP包經過NAT網關時,將IP包中的源IP或目的IP在私有IP和NAT的公共IP之間進行轉換。

  如下圖所示,NAT網關有2個網絡端口,其中公共網絡端口的IP地址是統一分配的公共IP,爲202.20.65.5;私有網絡端口的IP地址是保留地址爲192.168.1.1。私有網中的主機192.168.1.2向公共網中的主機202.20.65.4發送了1個IP包(Dst=202.20.65.4,Src=192.168.1.2)。

如下圖所示,NAT網關有2個網絡端口,其中公共網絡端口的IP地址是統一分配的公共IP,爲202.20.65.5;私有網絡端口的IP地址是保留地址爲192.168.1.1。私有網中的主機192.168.1.2向公共網中的主機202.20.65.4發送了1個IP包(Dst=202.20.65.4,Src=192.168.1.2)

  clip_image011當IP包經過NAT網關時,NATGateway會將IP包的源IP轉換爲NATGateway的公共IP並轉發到公共網,此時IP包(Dst=202.20.65.4,Src=202.20.65.5)中已經不含任何私有網IP的信息。由於IP包的源IP已經被轉換成NATGateway的公共IP,WebServer發出的響應IP包(Dst=202.20.65.5,Src=202.20.65.4)將被髮送到NATGateway。

  這時,NATGateway會將IP包的目的IP轉換成私有網中主機的IP,然後將IP包(Des=192.168.1.2,Src=202.20.65.4)轉發到私有網。對於通信雙方而言,這種地址的轉換過程是完全透明的。轉換示意圖如下。

這時,NATGateway會將IP包的目的IP轉換成私有網中主機的IP,然後將IP包(Des=192.168.1.2,Src=202.20.65.4)轉發到私有網。對於通信雙方而言,這種地址的轉換過程是完全透明的。轉換示意圖如下

  如果內網主機發出的請求包未經過NAT,那麼當WebServer收到請求包,回覆的響應包中的目的地址就是私有網絡IP地址,在Internet上無法正確送達,導致連接失敗。

  2.2連接跟蹤

  在上述過程中,NATGateway在收到響應包後,就需要判斷將數據包轉發給誰。此時如果子網內僅有少量客戶機,可以用靜態NAT手工指定;但如果內網有多臺客戶機,並且各自訪問不同網站,這時候就需要連接跟蹤(connectiontrack)。如下圖所示:

 在上述過程中,NATGateway在收到響應包後,就需要判斷將數據包轉發給誰。此時如果子網內僅有少量客戶機,可以用靜態NAT手工指定;但如果內網有多臺客戶機,並且各自訪問不同網站,這時候就需要連接跟蹤(connectiontrack)。如下圖所示

  在NATGateway收到客戶機發來的請求包後,做源地址轉換,並且將該連接記錄保存下來,當NATGateway收到服務器來的響應包後,查找TrackTable,確定轉發目標,做目的地址轉換,轉發給客戶機。

  2.3端口轉換

  以上述客戶機訪問服務器爲例,當僅有一臺客戶機訪問服務器時,NATGateway只須更改數據包的源IP或目的IP即可正常通訊。但是如果ClientA和ClientB同時訪問WebServer,那麼當NATGateway收到響應包的時候,就無法判斷將數據包轉發給哪臺客戶機,如下圖所示。

以上述客戶機訪問服務器爲例,當僅有一臺客戶機訪問服務器時,NATGateway只須更改數據包的源IP或目的IP即可正常通訊。但是如果ClientA和ClientB同時訪問WebServer,那麼當NATGateway收到響應包的時候,就無法判斷將數據包轉發給哪臺客戶機,如下圖所示

  clip_image017此時,NATGateway會在ConnectionTrack中加入端口信息加以區分。如果兩客戶機訪問同一服務器的源端口不同,那麼在TrackTable里加入端口信息即可區分,如果源端口正好相同,那麼在實行SNAT和DNAT的同時對源端口也要做相應的轉換,如下圖所示。

clip_image017此時,NATGateway會在ConnectionTrack中加入端口信息加以區分。如果兩客戶機訪問同一服務器的源端口不同,那麼在TrackTable里加入端口信息即可區分,如果源端口正好相同,那麼在實行SNAT和DNAT的同時對源端口也要做相應的轉換,如下圖所示

  3應用

  NAT主要可以實現以下幾個功能:數據包僞裝、平衡負載、端口轉發和透明代理。

  數據僞裝:可以將內網數據包中的地址信息更改成統一的對外地址信息,不讓內網主機直接暴露在因特網上,保證內網主機的安全。同時,該功能也常用來實現共享上網。例如,內網主機訪問外網時,爲了隱藏內網拓撲結構,使用全局地址替換私有地址。

  端口轉發:當內網主機對外提供服務時,由於使用的是內部私有IP地址,外網無法直接訪問。因此,需要在網關上進行端口轉發,將特定服務的數據包轉發給內網主機。例如公司小王在自己的服務器上架設了一個Web網站,他的IP地址爲192.168.0.5,使用默認端口80,現在他想讓局域網外的用戶也能直接訪問他的Web站點。利用NAT即可很輕鬆的解決這個問題,服務器的IP地址爲210.59.120.89,那麼爲小王分配一個端口,例如81,即所有訪問210.59.120.89:81的請求都自動轉向192.168.0.5:80,而且這個過程對用戶來說是透明的。

  負載平衡:目的地址轉換NAT可以重定向一些服務器的連接到其他隨機選定的服務器。例如1.2.3所講的目的NAT的例子。

  失效終結:目的地址轉換NAT可以用來提供高可靠性的服務。如果一個系統有一臺通過路由器訪問的關鍵服務器,一旦路由器檢測到該服務器當機,它可以使用目的地址轉換NAT透明的把連接轉移到一個備份服務器上,提高系統的可靠性。

  透明代理:例如自己架設的服務器空間不足,需要將某些鏈接指向存在另外一臺服務器的空間;或者某臺計算機上沒有安裝IIS服務,但是卻想讓網友訪問該臺計算機上的內容,這個時候利用IIS的Web站點重定向即可輕鬆的幫助我們搞定。

  4NAT的缺陷

  NAT在最開始的時候是非常完美的,但隨着網絡的發展,各種新的應用層出不窮,此時NAT也暴露出了缺點。NAT的缺陷主要表現在以下幾方面:

  (1)不能處理嵌入式IP地址或端口

  NAT設備不能翻譯那些嵌入到應用數據部分的IP地址或端口信息,它只能翻譯那種正常位於IP首部中的地址信息和位於TCP/UDP首部中的端口信息,如下圖,由於對方會使用接收到的數據包中嵌入的地址和端口進行通信,這樣就可能產生連接故障,如果通信雙方都是使用的公網IP,這不會造成什麼問題,但如果那個嵌入式地址和端口是內網的,顯然連接就不可能成攻,原因就如開篇所說的一樣。MSNMessenger的部分功能就使用了這種方式來傳遞IP和端口信息,這樣就導致了NAT設備後的客戶端網絡應用程序出現連接故障。

原因就如開篇所說的一樣。MSNMessenger的部分功能就使用了這種方式來傳遞IP和端口信息,這樣就導致了NAT設備後的客戶端網絡應用程序出現連接故障。

  (2)不能從公網訪問內部網絡服務

  由於內網是私有IP,所以不能直接從公網訪問內部網絡服務,比如WEB服務,對於這個問題,我們可以採用建立靜態映射的方法來解決。比如有一條靜態映射,是把218.70.201.185:80與192.168.0.88:80映射起的,當公網用戶要訪問內部WEB服務器時,它就首先連接到218.70.201.185:80,然後NAT設備把請求傳給192.168.0.88:80,192.168.0.88把響應返回NAT設備,再由NAT設備傳給公網訪問用戶。

  (3)有一些應用程序雖然是用A端口發送數據的,但卻要用B端口進行接收,不過NAT設備翻譯時卻不知道這一點,它仍然建立一條針對A端口的映射,結果對方響應的數據要傳給B端口時,NAT設備卻找不到相關映射條目而會丟棄數據包。

  (4)一些P2P應用在NAT後無法進行

  對於那些沒有中間服務器的純P2P應用(如電視會議,娛樂等)來說,如果大家都位於NAT設備之後,雙方是無法建立連接的。因爲沒有中間服務器的中轉,NAT設備後的P2P程序在NAT設備上是不會有映射條目的,也就是說對方是不能向你發起一個連接的。現在已經有一種叫做P2PNAT穿越的技術來解決這個問題。

  5.結語

  NAT技術無可否認是在ipv4地址資源的短缺時候起到了緩解作用;在減少用戶申請ISP服務的花費和提供比較完善的負載平衡功能等方面帶來了不少好處。但是在ipv4地址在以後幾年將會枯竭,NAT技術不能改變ip地址空間不足的本質。然而在安全機制上也潛在着威脅,在配置和管理上也是一個挑戰。如果要從根本上解決ip地址資源的問題,ipv6纔是最根本之路。在ipv4轉換到ipv6的過程中,NAT技術確實是一個不錯的選擇,相對其他的方案優勢也非常明顯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章