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.31.255.255
192.168.0.0——— 192.168.255.255
地址池:地址池是有一些外部地址(全球唯一的IP地址)組合而成,我們稱這樣的一個地址集合為地址池。在內部網絡的數據包通過地址轉換到達外部網絡時,將會在地址池中選擇某個IP地址作為數據包的源IP地址,這樣可以有效的利用用戶的外部地址,提高訪問外部網絡的能力。
1.1.2關於NAT
NAT英文全稱是“Network Address Translation”,中文意思是“網絡地址轉換”,它是一個IETF(Internet Engineering Task Force, Internet工程任務組)標准,允許一個整體機構以一個公用IP(Internet Protocol)地址出現在Internet上。顧名思義,它是一種把內部私有網絡地址(IP地址)翻譯成合法網絡IP地址的技術,如下圖所示。因此我們可以認為,NAT在一定程度上,能夠有效的解決公網地址不足的問題。
簡單地說,NAT就是在局域網內部網絡中使用內部地址,而當內部節點要與外部網絡進行通訊時,就在網關(可以理解為出口,打個比方就像院子的門一樣)處,將內部地址替換成公用地址,從而在外部公網(internet)上正常使用,NAT可以使多台計算機共享Internet連接,這一功能很好地解決了公共 IP地址緊缺的問題。通過這種方法,可以只申請一個合法IP地址,就把整個局域網中的計算機接入Internet中。這時,NAT屏蔽了內部網絡,所有內部網計算機對於公共網絡來說是不可見的,而內部網計算機用戶通常不會意識到NAT的存在。如下圖所示。這里提到的內部地址,是指在內部網絡中分配給節點的私有IP地址,這個地址只能在內部網絡中使用,不能被路由轉發。
NAT 功能通常被集成到路由器、防火牆、ISDN路由器或者單獨的NAT設備中。比如Cisco路由器中已經加入這一功能,網絡管理員只需在路由器的IOS中設置NAT功能,就可以實現對內部網絡的屏蔽。再比如防火牆將WEB Server的內部地址192.168.1.1映射為外部地址202.96.23.11,外部訪問202.96.23.11地址實際上就是訪問訪問 192.168.1.1。此外,對於資金有限的小型企業來說,現在通過軟件也可以實現這一功能。Windows 98 SE、Windows 2000 都包含了這一功能。
1.2 分類
NAT有三種類型:靜態NAT(Static NAT)、動態地址NAT(Pooled NAT)、網絡地址端口轉換NAPT(Port-Level NAT)。
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)的數據包經過路由器時,路由器通過查找NAT table 將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) 響應的數據包到達與內網相連接的路由器時,路由器同樣查找NAT table,將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的一樣,只是NAT table表中的記錄是動態的,若內網主機在一定時間內沒有和外部網絡通信,有關它的IP地址映射關系將會被刪除,並且會把該全局IP地址分配給新的IP數據包使用,形成新的NAT table映射記錄。
1.2.3網絡地址端口轉換NAPT
網絡地址端口轉換NAPT(Network Address Port Translation)則是把內部地址映射到外部網絡的一個IP地址的不同端口上。它可以將中小型的網絡隱藏在一個合法的IP地址后面。NAPT與 動態地址NAT不同,它將內部連接映射到外部網絡中的一個單獨的IP地址上,同時在該地址上加上一個由NAT設備選定的端口號。
NAPT是使用最普遍的一種轉換方式,它又包含兩種轉換方式:SNAT和DNAT。
(1)源NAT(Source NAT,SNAT):修改數據包的源地址。源NAT改變第一個數據包的來源地址,它永遠會在數據包發送到網絡之前完成,數據包偽裝就是一具SNAT的例子。
(2)目的NAT(Destination NAT,DNAT):修改數據包的目的地址。Destination NAT剛好與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的一種特例。
目的NAT舉例:這種方式適用於內網的某些服務器需要為外網提供某些服務的情況。例如以上拓撲結構,內網服務器群(ip地址分別為:10.1.1.1,10.1.1.2,10.1.1.3等)需要為外網提供WEB 服務,當外網主機HostB訪問內網時,所發送的數據包的目的IP地址為10.1.1.127,端口號為:80,當該數據包到達內網連接的路由器時,路由器查找NAT table,路由器通過修改目的IP地址和端口號,將外網的數據包平均發送到不同的主機上(10.1.1.1,10.1.1.2,10.1.1.3等),這樣就實現了負載均衡。
2 NAT原理
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)。
當IP包經過NAT網關時,NAT Gateway會將IP包的源IP轉換為NAT Gateway的公共IP並轉發到公共網,此時IP包(Dst=202.20.65.4,Src=202.20.65.5)中已經不含任何私有網IP的信息。由於IP包的源IP已經被轉換成NAT Gateway的公共IP,Web Server發出的響應IP包(Dst= 202.20.65.5,Src=202.20.65.4)將被發送到NAT Gateway。
這時,NAT Gateway會將IP包的目的IP轉換成私有網中主機的IP,然后將IP包(Des=192.168.1.2,Src=202.20.65.4)轉發到私有網。對於通信雙方而言,這種地址的轉換過程是完全透明的。轉換示意圖如下。
如果內網主機發出的請求包未經過NAT,那么當Web Server收到請求包,回復的響應包中的目的地址就是私有網絡IP地址,在Internet上無法正確送達,導致連接失敗。
2.2 連接跟蹤
在上述過程中,NAT Gateway在收到響應包后,就需要判斷將數據包轉發給誰。此時如果子網內僅有少量客戶機,可以用靜態NAT手工指定;但如果內網有多台客戶機,並且各自訪問不同網站,這時候就需要連接跟蹤(connection track)。如下圖所示:
在NAT Gateway收到客戶機發來的請求包后,做源地址轉換,並且將該連接記錄保存下來,當NAT Gateway收到服務器來的響應包后,查找Track Table,確定轉發目標,做目的地址轉換,轉發給客戶機。
2.3 端口轉換
以上述客戶機訪問服務器為例,當僅有一台客戶機訪問服務器時,NAT Gateway只須更改數據包的源IP或目的IP即可正常通訊。但是如果Client A和Client B同時訪問Web Server,那么當NAT Gateway收到響應包的時候,就無法判斷將數據包轉發給哪台客戶機,如下圖所示。
此時,NAT Gateway會在Connection Track中加入端口信息加以區分。如果兩客戶機訪問同一服務器的源端口不同,那么在Track Table里加入端口信息即可區分,如果源端口正好相同,那么在實行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站點重定向即可輕松的幫助我們搞定。
4 NAT的缺陷
NAT在最開始的時候是非常完美的,但隨着網絡的發展,各種新的應用層出不窮,此時NAT也暴露出了缺點。NAT的缺陷主要表現在以下幾方面:
(1) 不能處理嵌入式IP地址或端口
NAT設備不能翻譯那些嵌入到應用數據部分的IP地址或端口信息,它只能翻譯那種正常位於IP首部中的地址信息和位於TCP/UDP首部中的端口信息,如下圖,由於對方會使用接收到的數據包中嵌入的地址和端口進行通信,這樣就可能產生連接故障,如果通信雙方都是使用的公網IP,這不會造成什么問題,但如果那個嵌入式地址和端口是內網的,顯然連接就不可能成攻,原因就如開篇所說的一樣。MSN Messenger的部分功能就使用了這種方式來傳遞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設備上是不會有映射條目的,也就是說對方是不能向你發起一個連接的。現在已經有一種叫做P2P NAT穿越的技術來解決這個問題。
5.結語
NAT技術無可否認是在ipv4地址資源的短缺時候起到了緩解作用;在減少用戶申請ISP服務的花費和提供比較完善的負載平衡功能等方面帶來了不少好處。但是在ipv4地址在以后幾年將會枯竭,NAT技術不能改變ip地址空間不足的本質。然而在安全機制上也潛在着威脅,在配置和管理上也是一個挑戰。如果要從根本上解決ip地址資源的問題,ipv6才是最根本之路。在ipv4轉換到ipv6的過程中,NAT技術確實是一個不錯的選擇,相對其他的方案優勢也非常明顯。