複製鏈接
請複製以下鏈接發送給好友

nat

(網絡地址轉換)

鎖定
NAT(Network Address Translation),是指網絡地址轉換,1994年提出的。
當在專用網內部的一些主機本來已經分配到了本地IP地址(即僅在本專用網內使用的專用地址),但又想和因特網上的主機通信(並不需要加密)時,可使用NAT方法。
這種方法需要在專用網(私網IP)連接到因特網(公網IP)的路由器上安裝NAT軟件。裝有NAT軟件的路由器叫做NAT路由器,它至少有一個有效的外部全球IP地址(公網IP地址)。這樣,所有使用本地地址(私網IP地址)的主機在和外界通信時,都要在NAT路由器上將其本地地址轉換成全球IP地址,才能和因特網連接。
另外,這種通過使用少量的全球IP地址(公網IP地址)代表較多的私有IP地址的方式,將有助於減緩可用的IP地址空間的枯竭。在RFC 2663中有對NAT的説明。
中文名
網絡地址轉換
外文名
NAT(Network Address Translation)
可用於
專用網和因特網通信
簡    稱
nat
方    法
在專用網連接到因特網的路由器上安裝NAT軟件
提出時間
1994年
私網IP
局域網IP。路由器DHCP服務器分配的內網IP,僅連接者可以使用。
公網IP
因特網IP。所有人都可以使用的全球公用IP。

nat功能

NAT不僅能解決IP地址不足的問題,而且還能夠有效地避免來自網絡外部的攻擊,隱藏並保護網絡內部的計算機。
1.寬帶分享:這是 NAT 主機的最大功能。
2.安全防護:NAT 之內的 PC 聯機到 Internet 上面時,其所顯示的 IP 是 NAT 主機的公共 IP,所以 Client 端的 PC 當然就具有一定程度的安全了,外界在進行 portscan(端口掃描) 的時候,就偵測不到源Client 端的 PC 。

nat實現方式

NAT的實現方式有三種,即靜態轉換Static Nat、動態轉換Dynamic Nat和端口多路複用OverLoad。
靜態轉換是指將內部網絡的私有IP地址轉換為公有IP地址,IP地址對是一對一的,是一成不變的,某個私有IP地址只轉換為某個公有IP地址。藉助於靜態轉換,可以實現外部網絡對內部網絡中某些特定設備(如服務器)的訪問。
動態轉換是指將內部網絡的私有IP地址轉換為公用IP地址時,IP地址是不確定的,是隨機的,所有被授權訪問上Internet的私有IP地址可隨機轉換為任何指定的合法IP地址。也就是説,只要指定哪些內部地址可以進行轉換,以及用哪些合法地址作為外部地址時,就可以進行動態轉換。動態轉換可以使用多個合法外部地址集。當ISP提供的合法IP地址略少於網絡內部的計算機數量時。可以採用動態轉換的方式。
端口多路複用(Port address Translation,PAT)是指改變外出數據包的源端口並進行端口轉換,即端口地址轉換(PAT,Port Address Translation).採用端口多路複用方式。內部網絡的所有主機均可共享一個合法外部IP地址實現對Internet的訪問,從而可以最大限度地節約IP地址資源。同時,又可隱藏網絡內部的所有主機,有效避免來自internet的攻擊。因此,網絡中應用最多的就是端口多路複用方式。
ALG(Application Level Gateway),即應用程序級網關技術:傳統的NAT技術只對IP層和傳輸層頭部進行轉換處理,但是一些應用層協議,在協議數據報文中包含了地址信息。為了使得這些應用也能透明地完成NAT轉換,NAT使用一種稱作ALG的技術,它能對這些應用程序在通信時所包含的地址信息也進行相應的NAT轉換。例如:對於FTP協議的PORT/PASV命令、DNS協議的 "A" 和 "PTR" queries命令和部分ICMP消息類型等都需要相應的ALG來支持。
如果協議數據報文中不包含地址信息,則很容易利用傳統的NAT技術來完成透明的地址轉換功能,通常我們使用的如下應用就可以直接利用傳統的NAT技術:HTTP、TELNET、FINGER、NTP、NFS、ARCHIE、RLOGIN、RSH、RCP等。

nat相關介紹

nat技術背景

要真正瞭解NAT就必須先了解IP地址的使用情況,私有 IP 地址是指內部網絡或主機的IP 地址,公有IP 地址是指在因特網上全球地址。RFC 1918 為私有網絡預留出了三個IP 地址塊,如下:
A 類:10.0.0.0~10.255.255.255
B 類:172.16.0.0~172.31.255.255
C 類:192.168.0.0~192.168.255.255
上述三個範圍內的地址不會在因特網上被分配,因此可以不必向ISP 或註冊中心申請而在公司或企業內部自由使用。 [1] 
隨着接入Internet的計算機數量的不斷猛增,IP地址資源也就愈加顯得捉襟見肘。事實上,除了中國教育和科研計算機網(CERNET)外,一般用户幾乎申請不到整段的C類IP地址。在其他ISP那裏,即使是擁有幾百台計算機的大型局域網用户,當他們申請IP地址時,所分配的地址也不過只有幾個或十幾個IP地址。顯然,這樣少的IP地址根本無法滿足網絡用户的需求,於是也就產生了NAT技術。
雖然NAT可以藉助於某些代理服務器來實現,但考慮到運算成本和網絡性能,很多時候都是在路由器上來實現的。

natNAPT

NAPT(Network Address Port Translation),即網絡地址端口轉換,可將多個內部地址映射為一個合法公網地址,但以不同的協議端口號與不同的內部地址相對應,也就是與之間的轉換。NAPT普遍用於接入設備中,它可以將中小型的網絡隱藏在一個合法的IP地址後面。NAPT也被稱為“多對一”的NAT,或者叫PAT(Port Address Translations,端口地址轉換)、地址超載(address overloading)。
NAPT與動態地址NAT不同,它將內部連接映射到外部網絡中的一個單獨的IP地址上,同時在該地址上加上一個由NAT設備選定的TCP端口號。NAPT算得上是一種較流行的NAT變體,通過轉換TCP或UDP協議端口號以及地址來提供併發性。除了一對源和目的IP地址以外,這個表還包括一對源和目的協議端口號,以及NAT盒使用的一個協議端口號。
NAPT的主要優勢在於,能夠使用一個全球有效IP地址獲得通用性。主要缺點在於其通信僅限於TCP或UDP。當所有通信都採用TCP或UDP,NAPT允許一台內部計算機訪問多台外部計算機,並允許多台內部主機訪問同一台外部計算機,相互之間不會發生衝突。 [2] 

nat穿透方法

常用的針對UDP的NAT 穿透(NAT Traversal)方法主要有:STUNTURNICEuPnP等。其中ICE方式由於其結合了STUN和TURN的特點,所以使用最為廣泛。針對TCP的NAT穿透技術仍為難點。實用的技術仍然不多。

nat工作原理

藉助於NAT,私有(保留)地址的"內部"網絡通過路由器發送數據包時,私有地址被轉換成合法的IP地址,一個局域網只需使用少量IP地址(甚至是1個)即可實現私有地址網絡內所有計算機與Internet的通信需求。
Nat-工作流程1 Nat-工作流程1
NAT將自動修改IP報文的源IP地址和目的IP地址,Ip地址校驗則在NAT處理過程中自動完成。有些應用程序將源IP地址嵌入到IP報文的數據部分中,所以還需要同時對報文的數據部分進行修改,以匹配IP頭中已經修改過的源IP地址。否則,在報文數據部分嵌入IP地址的應用程序就不能正常工作。
①如右圖1這個 client(終端) 的 gateway (網關)設定為 NAT 主機,所以當要連上 Internet 的時候,該封包就會被送到 NAT 主機,這個時候的封包 Header 之 source IP(源IP) 為 192.168.1.100 ;
圖1 Nat工作流程2 圖1 Nat工作流程2
②而透過這個 NAT 主機,它會將 client 的對外聯機封包的 source IP ( 192.168.1.100 ) 偽裝成 ppp0 ( 假設為撥接情況 )這個接口所具有的公共 IP ,因為是公共 IP 了,所以這個封包就可以連上 Internet 了,同時 NAT 主機並且會記憶這個聯機的封包是由哪一個 ( 192.168.1.100 ) client 端傳送來的;
③由 Internet 傳送回來的封包,當然由 NAT主機來接收了,這個時候, NAT 主機會去查詢原本記錄的路由信息,並將目標 IP 由 ppp0 上面的公共 IP 改回原來的 192.168.1.100 ;
④最後則由 NAT 主機將該封包傳送給原先發送封包的 Client [2] 

nat配置方式

在配置NAT(網絡地址轉換)之前,首先需要了解內部本地地址和內部全局地址的分配情況。根據不同的需求,執行以下不同的配置任務。
  • 內部源地址NAT配置
  • 內部源地址NAPT配置
  • 重疊地址NAT配置
  • TCP負載均衡
配置內部源地址靜態NAT
當內部網絡需要與外部網絡通訊時,需要配置NAT,將內部私有IP地址轉換成全局IP地址。可以配置靜態或動態的NAT來實現互聯互通的目的,或者需要同時配置靜態和動態的NAT。
靜態NAT,是建立內部本地地址和內部全局地址的一對一永久映射。當外部網絡需要通過固定的全局可路由地址訪問內部主機,靜態NAT就顯得十分重要。要配置靜態NAT,在全局配置模式中執行以下命令:
命令
作用
R(config)# ip nat inside source static
local-address global-address [permit-inside] [vrf vrf_name]
定義內部源地址靜態轉換關係
R(config)# interface interface-type
interface-number
進入接口配置模式
R(config-if)# ip nat inside
定義該接口連接內部網絡
R(config)# interface interface-type
interface-number
進入接口配置模式
R(config-if)# ip nat outside
定義該接口連接外部網絡
以上配置為較簡單配置,可以配置多個Inside和outside接口。
配置內部源地址動態NAT
動態NAT,是建立內部本地地址和內部全局地址池的臨時映射關係,過一段時間沒有用就會刪除映射關係。要配置動態NAT,在全局配置模式中執行以下命令:
命令
作用
R(config)# ip nat pool address-pool
start-address end-address{netmask mask |
prefix-length prefix-length}
定義全局IP地址池
R(config)# access-list access-list-number
permit ip-address wildcard
定義訪問列表,只有匹配該列表的地址才轉換
R(config)# ip nat inside source list
access-list-number pool address-pool [vrf vrf_name]
定義內部源地址動態轉換關係
R(config)# interface interface-type
interface-number
進入接口配置模式
R(config-if)# ip nat inside
定義接口連接內部網絡
R(config)# interface interface-type
interface-number
進入接口配置模式
R(config-if)#ip nat outside
定義接口連接外部網絡
需要注意的是:訪問列表的定義,使得只在列表中許可的源地址才可以被轉換,必須注意訪問列表最後一個規則是否定全部。訪問列表不能定義太寬,要儘量準確,否則將出現不可預知的結果。
配置內部源地址NAPT
傳統的NAT一般是指一對一的地址映射,不能同時滿足所有的內部網絡主機與外部網絡通訊的需要。使用NAPT(網絡地址端口轉換),可以將多個內部本地地址映射到一個內部全局地址。
NAPT分為靜態NAPT和動態NAPT。靜態NAPT一般應用在將內部網指定主機的指定端口映射到全局地址的指定端口上。而前一小節提及的靜態NAT,是將內部主機映射成全局地址。
要配置靜態NAPT,在全局配置模式中執行以下命令:
命令
作用
R(config)# ip nat inside source static
{UDP | TCP} local-address port global-address
port [permit-inside] [vrf vrf_name]
定義內部源地址靜態轉換關係
R(config)# interface interface-type
interface-number
進入接口配置模式
R(config-if)# ip nat inside
定義該接口連接內部網絡
R(config)# interface interface-type
interface-number
進入接口配置模式
R(config-if)# ip nat outside
定義接口連接外部網絡
前面所述的動態內部源地址轉換,已經自動完成內部源地址動態NAPT,配置是在全局配置模式中執行以下命令:
命令
作用
R(config)# ip nat pooladdress-pool
start-address end-address{netmask mask |
prefix-length prefix-length}
定義全局IP地址池,對於NAPT,一般就定義一個IP地址
R(config)# access-list access-list-number
permit ip-address wildcard
定義訪問列表,只有匹配該列表的地址才轉換
R(config)# ip nat inside source list
access-list-number{[pool address-pool] | [interface
interface-type interface-number]} overload [vrf vrf_name]
定義源地址動態轉換關係,overload有和沒有是一樣的效果,僅是兼容主流廠商的配置。
R(config)# interface interface-type
interface-number
進入接口配置模式
R(config-if)# ip nat inside
定義接口連接內部網絡
R(config)# interface interface-type
interface-number
進入接口配置模式
R(config-if)# ip nat outside
定義接口連接外部網絡
NAPT可以使用地址池中的IP地址,也可以直接使用接口的IP地址。一般來説一個地址就可以滿足一個網絡的地址轉換需要,一個地址最多可以提供64512個NAT地址轉換。如果地址不夠,地址池可以多定義幾個地址。
配置重疊地址NAT
兩個需要互聯的私有網絡分配了同樣IP地址,或者一個私有網絡和公有網絡分配了同樣的全局IP地址,這種情況稱為地址重疊。兩個重疊地址的網絡主機之間是不可能通信的,因為它們相互認為對方的主機在本地網絡。重疊地址NAT就是專門針對重疊地址網絡之間通信的問題,配置了重疊地址NAT,外部網絡主機地址在內部網絡表現為另一個網絡主機地址,反之一樣。
重疊地址NAT配置,其實分為兩個部分內容:(1)內部源地址轉換配置,如何配置請參見上文;(2)外部源地址轉換配置,只有與內部網絡地址重疊的外部網絡需要配置外部源地址轉換,外部源地址轉換可以採用靜態NAT配置或動態NAT配置。
要配置外部源地址的靜態NAT,在全局配置模式中執行以下命令:
命令
作用
R(config)#ip nat outside source static
global-address local-address [vrf vrf_name]
定義外部源地址靜態轉換關係
R(config)# interface interface-type
interface-number
進入接口配置模式
R(config-if)# ip nat inside
定義該接口連接內部網絡
R(config)# interface interface-type
interface-number
進入接口配置模式
R(config-if)# ip nat outside
定義接口連接外部網絡
配置NAT實現TCP負載均衡
當內部網絡某台主機TCP流量負載過重時,可用多台主機進行TCP業務的均衡負載。這時,可以考慮用NAT來實現TCP流量的負載均衡。NAT創建了一台虛擬主機提供TCP服務,該虛擬主機對應內部多台實際的主機,然後對目標地址進行輪詢置換,達到負載分流的目的。要配置目標地址輪詢轉換,在全局配置模式中執行以下命令:
命令
作用
R(config)# ip nat pool address-pool
start-address end-address {netmask mask |
prefix-length prefix-length}
定義IP地址池,包含所有實際主機地址
R(config)# access-list access-list-number
permitip-address wildcard
定義訪問列表,只匹配虛擬主機地址。注意應該使用匹配目標IP的擴展ACL。
R(config)# ip nat inside destination list
access-list-number pool address-pool [vrf vrf_name]
定義內部目標地址動態轉換關係
R(config)# interface interface-type
interface-number
進入接口配置模式
R(config-if)# ip nat inside
定義接口連接內部網絡
R(config)# interface interface-type
interface-number
進入接口配置模式
R(config-if)# ip nat outside
定義接口連接外部網絡
配置特殊協議網關
默認情況下,特殊協議網關是全部打開的,通過命令可以關閉指定特殊協議網關。除了ftp和dns帶有參數,其他每個特殊協議都只是開關命令。在全局配置模式中執行以下命令:
命令
作用
R(config)# no ip nat translation ftp
關閉FTP特殊協議網關
R(config)# ip nat translation ftp
開啓FTP特殊協議網關,默認端口21
R(config)# ip nat translation ftp 2121
開啓FTP特殊協議網關,指定端口2121

nat配置實例

在配置網絡地址轉換的過程之前,首先必須搞清楚內部接口和外部接口,以及在哪個外部接口上啓用NAT。通常情況下,連接到用户內部網絡的接口是NAT內部接口,而連接到外部網絡(如Internet)的接口是NAT外部接口。
靜態地址轉換的實現
假設內部局域網使用的lP地址段為192.168.0.1~192.168.0.254,路由器局域網端(即默認網關)的IP地址為192.168.0.1,子網掩碼為255.255.255.0。網絡分配的合法IP地址範圍為61.159.62.128~61.159.62.135,路由器廣域網中的IP地址為61.159.62.129,子網掩碼為255.255.255.248可用於轉換的IP地址範圍為61.159.62.130~61.159.62.134。要求將內部網址192.168.0.2~192.168.0.6分別轉換為合法IP地址61.159.62.130~61.159.62.134。
第一步,設置外部端口
interface serial 0
ip address 61.159.62.129 255.255.255.248
ip nat outside
第二步,設置內部端口。
interface ethernet 0
ip address 192.168.0.1 255.255.255.0
ip nat inside
第三步,在內部本地與外部合法地址之間建立靜態地址轉換
ip nat inside source static 內部本地地址 外部合法地址。
示例:
ip nat inside source static 192.168.0.2 61.159.62.130 //將內部網絡地址192.168.0.2轉換為合法IP地址61.159.62.130
ip nat inside source static 192.168.0.3 61.159.62.131 //將內部網絡地址192.168.0.3轉換為合法IP地址61.159.62.131
ip nat inside source static 192.168.0.4 61.159.62.132 //將內部網絡地址192.168.0.4轉換為合法IP地址61.159.62.132
ip nat inside source static 192.168.0.5 61.159.62.133 //將內部網絡地址192.168.0.5轉換為合法IP地址61.159.62.133
ip nat inside source static 192.168.0.6 61.159.62.134 //將內部網絡地址192.168.0.6轉換為合法IP地址61.159.62.134
至此,靜態地址轉換配置完畢。
動態地址轉換的實現
假設內部網絡使用的IP地址段為172.16.100.1~172.16.100.254,路由器局域網端口(即默認網關)的IP地址為172.16.100.1,子網掩碼為255.255.255.0。網絡分配的合法IP地址範圍為61.159.62.128~61.159.62.191,路由器在廣域網中的IP地址為61.159.62.129,子網掩碼為255.255.255.192,可用於轉換的IP地址範圍為61.159.62.130~61.159.62.190。要求將內部網址172.16.100.2~172.16.100.254動態轉換為合法IP地址61.159.62.130~61.159.62.190。
第一步,設置外部端口。
設置外部端口命令的語法如下:
ip nat outside
示例:
interface serial 0 //進入串行端口serial 0
ip address 61.159.62.129 255.255.255.192//將其IP地址指定為61.159.62.129,子網掩碼為255.255.255.192
ip nat outside //將串行口serial 0設置為外網端口
注意,可以定義多個外部端口
第二步,設置內部端口。
設置內部接口命令的語法如下:
ip nat inside
示例:
interface ethernet 0 //進入以太網端口Ethernet 0
ip address 172.16.100.1 255.255.255.0 // 將其IP地址指定為172.16.100.1,子網掩碼為255.255.255.0
ip nat inside //將Ethernet 0 設置為內網端口。
注意,可以定義多個內部端口。
第三步,定義合法IP地址池。
定義合法IP地址池命令的語法如下:
ip nat pool 地址池名稱起始IP地址 終止IP地址子網掩碼
其中,地址池名字可以任意設定。
示例:
ip nat pool chinanet 61.159.62.130 61.159.62.190 netmask 255.255.255.192 //指明地址緩衝池的名稱為chinanet,IP地址範圍為61.159.62.130~61.159.62.190,子網掩碼為255.255.255.192。需要注意的是,即使掩碼為255.255.255.0,也會由起始IP地址和終止IP地址對IP地址池進行限制。
或ip nat pool test 61.159.62.130 61.159.62.190 prefix-length 26
注意,如果有多個合法IP地址範圍,可以分別添加。例如,如果還有一段合法IP地址範圍為"211.82.216.1~211.82.216.254",那麼,可以再通過下述命令將其添加至緩衝池中。
ip nat pool cernet 211.82.216.1 211.82.216.254 netmask 255.255.255.0
ip nat pool test 211.82.216.1 211.82.216.254 prefix-length 24
第四步,定義內部網絡中允許訪問Internet的訪問列表
定義內部訪問列表命令的語法如下:
access-list 標號 permit 源地址通配符(其中,標號為1~99之間的整數)
access-list 1 permit 172.16.100.0 0.0.0.255 //允許訪問Internet的網段為172.16.100.0~172.16.100.255,反掩碼為0.0.0.255。需要注意的是,在這裏採用的是反掩碼,而非子網掩碼反掩碼子網掩碼的關係為:反掩碼+子網掩碼=255.255.255.255。例如,子網掩碼為255.255.0.0,則反掩碼為0.0.255.255;子網掩碼為255.0.0.0,則反掩碼為0.255.255.255;子網掩碼為255.252.0.0,則反掩碼為0.3.255.255;子網掩碼為255.255.255.192,則反掩碼為0.0.0.63。
另外,如果想將多個IP地址段轉換為合法IP地址,可以添加多個訪問列表。例如,當欲將172.16.98.0~172.16.98.255和172.16.99.0~172.16.99.255轉換為合法IP地址時,應當添加下述命令:
access-list2 permit 172.16.98.0 0.0.0.255
access-list3 permit 172.16.99.0 0.0.0.255
第五步,實現網絡地址轉換
在全局設置模式下,將第四步由access-list指定的內部本地地址列表與第三步指定的合法IP地址池進行地址轉換。命令語法如下:
ip nat inside source list 訪問列表標號 pool 內部合法地址池名字
示例:
ip nat inside source list 1 pool chinanet
如果有多個內部訪問列表,可以一一添加,以實現網絡地址轉換,如
ip nat inside source list 2 pool chinanet
ip nat inside source list 3 pool chinanet
如果有多個地址池,也可以一一添加,以增加合法地址池範圍,如
ip nat inside source list 1 pool cernet
ip nat inside source list 2 pool cernet
ip nat inside source list 3 pool cernet
至此,動態地址轉換設置完畢。
端口複用動態地址轉換(PAT)
內部網絡使用的IP地址段為10.100.100.1~10.100.100.254,路由器局域網端口(即默認網關)的IP地址為10.100.100.1,子網掩碼為255.255.255.0。網絡分配的合法IP地址範圍為202.99.160.0~202.99.160.3,路由器廣域網中的IP地址為202.99.160.1,子網掩碼為255.255.255.252,可用於轉換的IP地址為202.99.160.2。要求將內部網址10.100.100.1~10.100.100.254 轉換為合法IP地址202.99.160.2。
第一步,設置外部端口。
interface serial 0
ip address 202.99.160.1 255.255.255.252
ip nat outside
第二步,設置內部端口。
interface ethernet 0
ip address 10.100.100.1 255.255.255.0
ip nat inside
第三步,定義合法IP地址池。
ip nat pool onlyone 202.99.160.2 202.99.160.2 netmask 255.255.255.252
// 指明地址緩衝池的名稱為onlyone,IP地址範圍為202.99.160.2,子網掩碼為255.255.255.252。由於本例只有一個IP地址可用,所以,起始IP地址與終止IP地址均為202.99.160.2。如果有多個IP地址,則應當分別鍵入起止的IP地址。
第四步,定義內部訪問列表。
access-list 1 permit 10.100.100.0 0.0.0.255
允許訪問Internetr的網段為10.100.100.0~10.100.100.255,子網掩碼為255.255.255.0。需要注意的是,在這裏子網掩碼的順序跟平常所寫的順序相反,即0.0.0.255。
第五步,設置複用動態地址轉換
在全局設置模式下,設置在內部的本地地址與內部合法IP地址間建立複用動態地址轉換。命令語法如下:
ip nat inside source list訪問列表號pool內部合法地址池名字overload
示例:
ip nat inside source list1 pool onlyone overload //以端口複用方式,將訪問列表1中的私有IP地址轉換為onlyone IP地址池中定義的合法IP地址。
注意:overload是複用動態地址轉換的關鍵詞。
至此,端口複用動態地址轉換完成。
還可以這樣寫:
ip nat inside source list 1 interface serial 0 overload
全部採用端口複用地址轉換
當ISP分配的IP地址數量很少,網絡又沒有其他特殊需求,即無需為Internet提供網絡服務時,可採用端口複用地址轉換方式,使網絡內的計算機採用同一IP地址訪問Internet,在節約IP地址資源的同時,又可有效保護網絡內部的計算機。
網絡環境為:
局域網採用10Mb/s光纖,以城域網方式接入Internet。路由器選用擁有2個10/100 Mb/s自適應端口的Cisco 2611。內部網絡使用的IP地址段為192.168.100.1~192.168.100.254,局域網端口Ethernet 0的IP地址為192.168.100.1,子網掩碼為255.255.255.0。網絡分配的合法IP地址範圍為202.99.160.128~202.99.160.131,連接ISP的端口Ethernet 1的IP地址為202.99.160.129,子網掩碼為255.255.255.252。可用於轉換的IP地址為202.99.160.130。要求網絡內部的所有計算機均可訪問Internet。
案例分析:
既然只有一個可用的合法IP地址,同時處於局域網的服務器又只為局域網提供服務,而不允許Internet中的主機對其訪問,因此完全可以採用端口複用地址轉換方式實現NAT,使得網絡內的所有計算機均可獨立訪問Internet。
配置清單:
interface fastethernet0/0
ip address 192.168.100.1 255.255.0.0 //定義本地端口IP地址
duplex auto
speed auto
ip nat inside // 定義為本地端口
!
interface fastethernet0/1
ip address 202.99.160.129 255.255.255.252
duplex auto
speed auto
ip nat outside
!
ip nat pool onlyone 202.99.160.130 202.99.160.130 netmask 255.255.255.252 //定義合法IP地址池,名稱為onlyone
access-list 1 permit 192.168.100.0 0.0.0.255 //定義本地訪問列表
ip nat inside source list1 pool onlyone overload //採用端口複用動態地址轉換
動態地址+端口複用地址轉換
許多FTP網站考慮到服務器性能和Internet連接帶寬的佔用問題,都限制同一IP地址的多個進程訪問。如果採用端口復地址轉換方式,則網絡內的所有計算機都採用同一IP地址訪問Internet,那麼,將因此而被禁止對該網站的訪問。所以,當提供的合法IP地址數量稍多時,可同時採用端口複用動態地址轉換方式,從而既可保證所有用户都能夠獲得訪問Internet的權力,同時,又不致、某些計算機因使用同一IP地址而被限制權限。需要注意的是,由於所有計算機都採用動態地址轉換方式,因此Internet中的所有計算機將無法實現對網絡內部服務器的訪問。
網絡環境:
局域網以2Mb/s DDN專線接入Internet,路由器選用安裝了廣域網模塊的Cisco 2611,如圖4-2-2所示。內部網絡使用的IP地址段為172.16.100.1~172.16.102.254,局域網端口Ethernet 0的IP地址為172.16.100.1,子網掩碼為255.255.0.0。網絡分配的合法IP地址範圍為202.99.160.128~202.99.160.192,子網掩碼為255.255.255.192,可用於轉換的IP地址範圍為202.99.160.130~202.99.160.190。要求網絡部分的部分計算機可以不受任何限制地訪問Internet,服務器無需提供Internet訪問服務。
案例分析:
既然要求網絡中的部分計算機可以不受任何限制地訪問Internet,同時,服務器無需提供Internet訪問服務,那麼,只需採用動態地址轉換+端口複用地址轉換方式即可實現。部分有特殊需求的計算機採用動態地址轉換的NAT方式,其他計算機則採用端口複用地址轉換的NAT方式。因此,部分有特殊需求的計算機可採用內部網址172.16.100.1~172.16.100.254,並動態轉換為合法地址202.99.160.130~202.99.160.189,其他計算機採用內部網址172.16.101.1~172.16.102.254,全部轉換為202.99.160.190。
配置清單:
interface fastethernet0/1
ip address 172.16.100.1 255.255.0.0 //定義局域網端口IP地址
duplex auto
speed auto
ip nat inside //定義為局域端口
!
interface serial 0/0
ip address 202.99.160.129 255.255.255.192 //定義廣域網端口IP地址
!
duplex auto
speed auto
ip nat outside //定義為廣域端口
!
ip nat pool public 202.99.160.190 202.99.160.190 netmask 255.255.255.192 //定義合法IP地址池,名稱為public
ip nat pool super 202.99.160.130 202.99.160.189 netmask 255.255.255.192 //定義合法IP地址池,名稱為super
access-list1 permit 172.16.100.0 0.0.0.255 //定義本地訪問列表1
access-list2 permit 172.16.101.0 0.0.0.255 //定義本地訪問列表2
access-list2 permit 172.16.102.0 0.0.0.255
ip nat inside source list1 pool super //定義列表1採用動態地址轉換
ip nat inside source list2 pool public overload //定義列表2採用端口複用地址轉換
靜態地址轉換+端口複用地址轉換
其實在很多時候,網絡中的服務器既為網絡內部的客户提供網絡服務,又同時為Internet中的用户提供訪問服務。因此,如果採用端口複用地址轉換或動態地址轉換,將由於無法確定服務器的IP地址,而導致Internet用户無法實現對網絡內部服務器的訪問。此時,就應當採用靜態地址轉換+端口複用地址轉換的NAT方式。也就是説,對服務器採用靜態地址轉換,以確保服務器擁有固定的合法IP地址。而對普通的客户計算機則採用端口複用地址轉換,使所有用户都享有訪問Internet的權力。
網絡環境為:
局域網採用10Mb/s光纖,以城域網方式接入Internet。路由器選用擁有2個10/100 Mb/s自適應端口的Cisco 2611。內部網絡使用的IP地址段為10.18.100.1~10.18.104.254,局域網端口Ethernet 0的IP地址為10.18.100.1,子網掩碼為255.255.0.0。網絡分配的合法IP地址範圍為211.82.220.80~211.82.220.87,連接ISP的端口Ethernet 1的IP地址為211.82.220.81,子網掩碼為255.255.255.248。要求網絡內部的所有計算機均可訪問Internet,並且在Internet中提供Web、E-mail、FTP和Media等4種服務。
案例分析:
既然網絡內的服務器要求能夠被Internet訪問到,那麼,這部分主機必須擁有合法的IP地址,也就是説,服務器必須採用靜態地址轉換。其他計算機由於沒有任何限制,所以,可採用端口複用地址轉換的NAT方式。因此,服務器可採用內網址10.18.100.1~10.18.100.254,並分別映射為一個合法的IP地址。其他計算機則採用內部網址10.18.101.1~172.16.104.254,並全部轉換為一個合法的IP地址。
配置清單:
interface fastethernet0/0
ip address 10.18.100.1 255.255.0.0 //定義局域網口IP地址
duplex auto
speed auto
ip nat inside //定義局域網口
!
interface fastethernet0/1
ip address 211.82.220.81 255.255.255.248 //定義廣域網口IP地址
duplex auto
speed auto
ip nat outside //定義廣域網口
!
ip nat pool every 211.82.220.86 211.82.220.86 netmask 255.255.255.248 //定義合法IP地址池
access-list 1 permit 10.18.101.0 0.0.0.255 //定義本地訪問列表1
access-list 1 premit 10.18.102.0 0.0.0.255
access-list 1 premit 10.18.103.0 0.0.0.255
access-list 1 premit 10.18.104.0 0.0.0.255
ip nat inside source list1 pool every overload //定義列表達1採用端口複用地址轉換
ip nat inside source static 10.18.100.10 211.82.220.82 //定義靜態地址轉換
ip nat inside source static 10.18.100.11 211.82.220.83
ip nat inside source static 10.18.100.12 211.82.220.84
ip nat inside source static 10.18.100.13 211.82.220.85
TCP/UDP端口NAT映射
如果ISP提供的合法IP地址的數量較多,可以採用靜態地址轉換+端口複用動態地址轉換的方式得以完美實現。但如果ISP只提供4個IP地址,其中2個作為網絡號和廣播地址而不可使用,1個IP地址要用於路由器定義為默認網關,那麼將只剩下1個IP地址可用。當然也可以利用這個僅存的一個IP地址採用端口複用地址轉換技術,從而實現整個局域網的Internet接入。但是由於服務器也採用動態端口,因此,Internet中的計算機將無法訪問到網絡內部的服務器。好的解決問題的方案就是TCP/UDP端口NAT映射。
不同應用程序使用的TCP/UDP的端口是不同的,比如,Web服務使用80,FTP服務使用21,SMTP服務使用25,POP3服務使用110,等等。因此,可以將不同的TCP端口綁定至不同的內部IP地址,從而只使用一個合法的IP地址,即可在允許內部所有服務器被Internet訪問的同時,實現內部所有主機對Internet訪問。
網絡環境:
局域網採用10Mb/s光纖,以城域網方式接入Internet。路由器選用擁有2個10/100 Mb/s自適應端口的Cisco 2611。內部網絡使用的IP地址段為192.168.1.1~192.168.1.254,局域網端口Ethernet 0的IP地址為192.168.1.1,子網掩碼為255.255.255.0。網絡分配的合法IP地址範圍為,211.82.220.128~211.82.220.130,連接ISP的端口Ethernet 1的IP地址為211.82.220.129,子網掩碼為255.255.255.252,可用於轉換的IP地址為211.82.220.129。要求網絡內部的所有計算機均可訪問Internet。
案例分析:
既然只有一個可用的合法IP地址,當然只能採用端口複用方式實現NAT,不過,由於同時又要求網絡內部的服務器可以被Internet訪問到,因此,必須使用PAT創建TCP/UDP端口的NAT映射。需要注意的是,也可以直接使用廣域端口創建TCP/UDP端口的NAT映射,也就是説,即使只有一個IP地址,也可以完美實現端口複用。由於合法IP地址位於路由器端口上,所以,不再需要定義NAT池,只簡單地使用inside source list語句即可。
需要注意的是,由於每種應用服務都有自己默認的端口,所以,這種NAT方式下,網絡內部每種應用服務中只能各自有一台服務器成為Internet中的主機,例如,只能有一台Web服務器,一台E-mail服務,一台FTP服務器。儘管可以採用改變默認端口的方式創建多台應用服務器,但這種服務器在訪問時比較困難,要求用户必須先了解某種服務採用的新TCP端口。
配置清單:
interface fastethernet0/0
ip address 192.168.1.1 255.255.255.0//指定局域網口的IP地址
duplex auto
speed auto
ip nat inside //指定局域網接口
!
interface fastethernet0/1
ip address 211.82.220.129 255.255.255.252 //指定廣域網口的IP地址
access-list 1 permit 192.168.1.0 0.0.0.255
!
ip nat inside source list1 interface fastethernet0/1 overload //啓用端口複用地址轉換,並直接採用fastethernet0/1的IP地址。
ip nat inside source static tcp 192.168.1.11 80 211.82.220.129 80
ip nat inside source static tcp 192.168.1.12 21 211.82.220.129 21
ip nat inside source static tcp 192.168.1.13 25 211.82.220.129 25
ip nat inside source static tcp 192.168.1.13 110 211.82.220.129 110
利用地址轉換實現負載均衡
隨着訪問量的上升,當一台服務器難以勝任時,就必須採用負載均衡技術,將大量的訪問合理地分配至多台服務器上。當然,實現負載均衡的手段有許多種,比如可以採用服務器羣集負載均衡、交換機負載均衡、DNS解析負載均衡等等。
其實除此以外,也可以通過地址轉換方式實現服務器的負載均衡。事實上,這些負載均衡的實現大多是採用輪詢方式實現的,使每台服務器都擁有平等的被訪問機會。

nat網絡環境

局域網以2Mb/s DDN專線拉入Internet,路由器選用安裝了廣域網模塊的Cisco 2611。內部網絡使用的IP地址段為10.1.1.1~10.1.3.254,局域網端口Ethernet 0的IP地址為10.1.1.1,子網掩碼為255.255.252.0。網絡分配的合法IP地址範圍為202.110.198.80~202.110.198.87,連接ISP的端口Ethernet 1的IP地址為202.110.198.81,子網掩碼為255.255.255.248。要求網絡內部的所有計算機均可訪問Internet,並且在3台Web服務器和2台FTP服務器實現負載均衡

nat案例分析

既然要求網絡內所有計算機都可以接入Internet,而合法IP地址又只有5個可用,當然可採用端口複用地址轉換方式。本來對服務器通過採用靜態地址轉換,賦予其合法IP地址即可。但是,由於服務器的訪問量太大(或者是服務器的性能太差),不得不使用多台服務器作負載均衡,因此,必須將一個合法IP地址轉換成多相內部IP地址,以輪詢方式減輕每台服務器的訪問壓力。
配置文件:
interface fastethernet0/1
ip adderss 10.1.1.1 255.255.252.0 //定義局域網端口IP地址
duplex auto
speed auto
ip nat inside //定義為局域端口
!
interface serial 0/0
ip address 202.110.198.81 255.255.255.248 //定義廣域網端口IP地址
duplex auto
speed auto
ip nat outside //定義為廣域端口
!
access-list 1 permit 202.110.198.82 //定義輪詢地址列表1
access-list 2 permit 202.110.198.83 //定義輪詢地址列表2
access-list 3 permit 10.1.1.0 0.0.3.255 //定義本地訪問列表3
!
ip nat pool websev 10.1.1.2 10.1.1.4 255.255.255.248 type rotary //定義Web服務器的IP地址池,Rotary關鍵字表示準備使用輪詢策略從NAT池中取出相應的IP地址用於轉換進來的IP報文,訪問202.110.198.82的請求將依次發送給web服務器:10.1.1.2、10.1.1.3和10.1.1.4
ip nat pool ftpsev 10.1.1.8 10.1.1.9 255.255.255.248 type rotary //定義ftp服務器的IP地址池。
ip nat pool normal 202.110.198.84 202.110.198.84 netmask 255.255.255.248 //定義合法IP地址池,名稱為normal
ip nat inside destination list 1 pool websev //inside destination list 語句定義與列表1相匹配的IP地址的報文將使用輪詢策略
ip nat inside destination list 2 pool ftpsev

nat轉換方法

Full cone NAT
Full cone NAT示意圖 Full cone NAT示意圖
即著名的一對一(one-to-one)NAT,一旦一個內部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有發自iAddr:port1的包都經由eAddr:port2向外發送。任意外部主機都能通過給eAddr:port2發包到達iAddr:port1
Address-Restricted cone NAT
Address-Restricted cone NAT示意圖 Address-Restricted cone NAT示意圖
限制地址,即只接收曾經發送到對端的IP地址來的數據包。一旦一個內部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有發自iAddr:port1的包都經由eAddr:port2向外發送。任意外部主機(hostAddr:any)都能通過給eAddr:port2發包到達iAddr:port1的前提是:iAddr:port1之前發送過包到hostAddr:any. "any"也就是説端口不受限制
Port-Restricted cone NAT
Port-Restricted cone NAT示意圖 Port-Restricted cone NAT示意圖
類似受限制錐形NAT(Restricted cone NAT),但是還有端口限制。
一旦一個內部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有發自iAddr:port1的包都經由eAddr:port2向外發送。一個外部主機(hostAddr:port3)能夠發包到達iAddr:port1的前提是:iAddr:port1之前發送過包到hostAddr:port3.
Symmetric NAT(對稱NAT)
Symmetric NAT(對稱NAT)示意圖 Symmetric NAT(對稱NAT)示意圖
每一個來自相同內部IP與port的請求到一個特定目的地的IP地址和端口,映射到一個獨特的外部來源的IP地址和端口。
同一個內部主機發出一個信息包到不同的目的端,使用不同的映射。外部主機收到了一封包從一個內部主機可以送一封包回來。

nat常見問題

1. NAT的作用是什麼?
NAT的作用是把內網的私有地址,轉化成外網的公有地址。使得內部網絡上的(被設置為私有IP地址的)主機可以訪問Internet。
2. NAT分為哪幾種?
NAT可以分為Basic NAT和PAT:
- Basic NAT只轉化IP,不映射端口
- PAT除了轉化IP,還做端口映射,可以用於多個內部地址映射到少量(甚至一個)外部地址。
NAT還可以分為靜態NAT和動態NAT:
- 靜態NAT,將內部網絡中的每個主機都永久映射成外部網絡中的某個合法的地址,多用於服務器。
- 動態NAT,則是在外部網絡中定義了一個或多個合法地址,採用動態分配的方法映射到內部網絡。
3.為什麼需要有NAT?
NAT的主要作用,是解決IP地址數量緊缺。當大量的內部主機只能使用少量的合法的外部地址,就可以使用NAT把內部地址轉化成外部地址。
NAT還可以防止外部主機攻擊內部主機(或服務器)。
4. 怎樣映射?
如何將大量的內部地址,映射成少量的外部地址?
對於第四層是TCP或UDP的數據包,NAT通過更改源端口號,來實現多對少的映射。
例如:內部IP1~IP4,4個地址映射成外部一個地址IP5。
(IP1,Port1)映射成(IP5,Port1)
(IP2,Port1)映射成(IP5,Port2)
(IP3,Port2)映射成(IP5,Port3)
(IP4,Port2)映射成(IP5,Port4)
對於ICMP包,NAT通過更改ICMP的ID,來實現多對少的映射。
5.TCP或UDP的端口,原本是用來做什麼的?
端口號是用來連接上層程序的。例如,端口號23,對應了Telnet;端口號80,對應了Http等等。
因此,在本動畫中,當R1轉化H1發送給Server的TCP包的時候,不能轉化目的地端口。Server正是通過端口號23,才知道把收到的TCP交給Telnet處理。
6. NAT有什麼弊端?
在一個具有NAT功能的路由器下的主機並沒有建立真正的端對端連接,並且不能參與一些因特網協議。一些需要初始化從外部網絡建立的TCP連接,和使用無狀態協議(比如UDP)的服務將被中斷。除非NAT路由器作一些具體的努力,否則送來的數據包將不能到達正確的目的地址。(一些協議有時可以在應用層網關的輔助下,在參與NAT的主機之間容納一個NAT的實例,比如FTP。)NAT也會使安全協議變的複雜。
7.NAT侷限性
(1)NAT違反了IP地址結構模型的設計原則。IP地址結構模型的基礎是每個IP地址均標識了一個網絡的連接。Internet的軟件設計就是建立在這個前提之上,而NAT使得有很多主機可能在使用相同的地址,如10.0.0.1。
(2)NAT使得IP協議從面向無連接變成面向連接。NAT必須維護專用IP地址與公用IP地址以及端口號的映射關係。在TCP/IP協議體系中,如果一個路由器出現故障,不會影響到TCP協議的執行。因為只要幾秒收不到應答,發送進程就會進入超時重傳處理。而當存在NAT時,最初設計的TCP/IP協議過程將發生變化,Internet可能變得非常脆弱。
(3)NAT違反了基本的網絡分層結構模型的設計原則。因為在傳統的網絡分層結構模型中,第N層是不能修改第N+1層的報頭內容的。NAT破壞了這種各層獨立的原則。
(4)有些應用是將IP地址插入到正文的內容中,例如標準的FTP協議與IP Phone協議H.323。如果NAT與這一類協議一起工作,那麼NAT協議一定要做適當地修正。同時,網絡的傳輸層也可能使用TCP與UDP協議之外的其他協議,那麼NAT協議必須知道並且做相應的修改。由於NAT的存在,使得P2P應用實現出現困難,因為P2P的文件共享與語音共享都是建立在IP協議的基礎上的。
(5)NAT同時存在對高層協議和安全性的影響問題。RFC對NAT存在的問題進行了討論。NAT的反對者認為這種臨時性的緩解IP地址短缺的方案推遲了Ipv6遷移的進程,而並沒有解決深層次的問題,他們認為是不可取的。
參考資料
  • 1.    (美)J.D.Wegner,(美)Robert Rockell等著;趙英等譯. IP地址管理與子網劃分. 機械工業出版社, 2001.
  • 2.    韓毅剛等編著. 計算機網絡技術實踐教程. 機械工業出版社, 2012.04.