NAT原理簡介
NAT英文全稱是“Network Address Translation”,中文意思是“網絡地址轉換”,它是一個IETF(Internet Engineering Task Force, Internet工程任務組)標准,允許一個整體機構以一個公用IP(Internet Protocol)地址出現在Internet上。顧名思義,它是一種把內部私有網絡地址(IP地址)翻譯成合法網絡IP地址的技術。如圖:
簡單地說,NAT就是在局域網內部網絡中使用內部地址,而當內部節點要與外部網絡進行通訊時,就在網關(可以理解為出口,打個比方就像院子的門一樣)處,將 內部地址替換成公用地址,從而在外部公網(internet)上正常使用,NAT可以使多台計算機共享Internet連接,這一功能很好地解決了公共 IP地址緊缺的問題。通過這種方法,您可以只申請一個合法IP地址,就把整個局域網中的計算機接入Internet中。這時,NAT屏蔽了內部網絡,所有 內部網計算機對於公共網絡來說是不可見的,而內部網計算機用戶通常不會意識到NAT的存在。如圖2所示。這里提到的內部地址,是指在內部網絡中分配給節點 的私有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。NAT將這些無法在互聯網上使用的保留IP地址翻譯成可以在互聯網上使用的合法IP地址。而全 局地址,是指合法的IP地址,它是由NIC(網絡信息中心)或者ISP(網絡服務提供商)分配的地址,對外代表一個或多個內部局部地址,是全球統一的可尋 址的地址。
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 都包含了這一功能。
NAT技術類型
NAT有三種類型:靜態NAT(Static NAT)、動態地址NAT(Pooled NAT)、網絡地址端口轉換NAPT(Port-Level NAT)。
其中靜態NAT設置起來最為簡單和最容易實現的一種,內部網絡中的每個主機都被永久映射成外部網絡中的某個合法的地址。而動態地址NAT則是在外部網絡中定 義了一系列的合法地址,采用動態分配的方法映射到內部網絡。NAPT則是把內部地址映射到外部網絡的一個IP地址的不同端口上。根據不同的需要,三種 NAT方案各有利弊。
動態地址NAT只是轉換IP地址,它為每一個內部的IP地址分配一個臨時的外部IP地址,主要應用於撥號,對於頻繁的遠程聯接也可以采用動態NAT。當遠程用戶聯接上之后,動態地址NAT就會分配給他一個IP地址,用戶斷開時,這個IP地址就會被釋放而留待以后使用。
網 絡地址端口轉換NAPT(Network Address Port Translation)是人們比較熟悉的一種轉換方式。NAPT普遍應用於接入設備中,它可以將中小型的網絡隱藏在一個合法的IP地址后面。NAPT與 動態地址NAT不同,它將內部連接映射到外部網絡中的一個單獨的IP地址上,同時在該地址上加上一個由NAT設備選定的TCP端口號。
在Internet 中使用NAPT時,所有不同的信息流看起來好像來源於同一個IP地址。這個優點在小型辦公室內非常實用,通過從ISP處申請的一個IP地址,將多個連接通 過NAPT接入Internet。實際上,許多SOHO遠程訪問設備支持基於PPP的動態IP地址。這樣,ISP甚至不需要支持NAPT,就可以做到多個 內部IP地址共用一個外部IP地址上Internet,雖然這樣會導致信道的一定擁塞,但考慮到節省的ISP上網費用和易管理的特點,用NAPT還是很值 得的。
virtualbox里的NAT實現
要實現NAT,主機一般有兩塊網卡,一塊負責外網連接,一塊負責和內部網路連接。但是在我本地台式機只有一塊網卡,安裝virtualbox后照樣能使用NAT,這是為什么呢?
我的宿主機是win7 64位(ip為192.168.52.238),虛擬機為centos7(ip為 10.0.2.15),只有一塊網卡,我們將虛擬機的22端口映射到4000端口,這樣就可以在宿主機里用通過ssh連接到虛擬機, NAT端口轉發設置如下:
設置好了之后,在win7宿主機里使用securecrt登陸虛擬機:
然后在在win7里執行cmd打開控制台,執行 netstat -an -b -p tcp 查看網絡連接情況:
可以清楚的看到,virtualbox 程序本身開了兩個服務:
1、在win7里啟一個監聽服務,監聽40000端口,接收從宿主機發往虛擬機的請求
2、virtualbox本身有另一個服務將收到的請求轉發給虛擬機的22端口,因為從虛擬機的netstat命令可以看出是從一個10.0.2.2的地址連接過來的,所以這里virtualbox本身充當了一個網 卡的作用,virtualbox用啟動一個tcp服務進行listen映射的端口,並將數據進行宿主機和虛擬機的轉發,邏輯上起到了一個網卡的作用。
3、因為實際起作用的是一個tcp連接,所以原則上只要網絡上能連接到宿主機也就能連接到宿主機上的虛擬機,這樣與宿主機同一個網段的其他機器也可以通過40000端口訪問虛擬機,實際測試也確實是這樣。
該博客前半部分的內容引用了:
http://www.emule.org.cn/topic/nat/