網路地址轉換

網路地址轉換

網路地址轉換(NAT,Network Address Translation)屬接入廣域網(WAN)技術,是一種將私有(保留)地址轉化為合法IP位址的轉換技術,它被廣泛套用於各種類型Internet接入方式和各種類型的網路中。原因很簡單,NAT不僅完美地解決了lP地址不足的問題,而且還能夠有效地避免來自網路外部的攻擊,隱藏並保護網路內部的計算機。

基本信息

功能

網路地址轉換網路地址轉換
NAT不僅能解決了lP地址不足的問題,而且還能夠有效地避免來自網路外部的攻擊,隱藏並保護網路內部的計算機。

1.寬頻分享:這是NAT主機的最大功能。

2.安全防護:NAT之內的PC在線上到Internet上面時,他所顯示的IP是NAT主機的公共IP,所以Client端的PC當然就具有一定程度的安全了,外界在進行portscan(連線埠掃描)的時候,就偵測不到源Client端的PC。

實現方式

網路地址轉換網路地址轉換
NAT的實現方式有三種,即靜態轉換StaticNat、動態轉換DynamicNat和連線埠多路復用OverLoad。

靜態轉換是指將內部網路的私有IP位址轉換為公有IP位址,IP位址對是一對一的,是一成不變的,某個私有IP位址只轉換為某個公有IP位址。藉助於靜態轉換,可以實現外部網路對內部網路中某些特定設備(如伺服器)的訪問。

動態轉換是指將內部網路的私有IP位址轉換為公用IP位址時,IP位址是不確定的,是隨機的,所有被授權訪問上Internet的私有IP位址可隨機轉換為任何指定的合法IP位址。也就是說,只要指定哪些內部地址可以進行轉換,以及用哪些合法地址作為外部地址時,就可以進行動態轉換。動態轉換可以使用多個合法外部地址集。當ISP提供的合法IP位址略少於網路內部的計算機數量時。可以採用動態轉換的方式。

連線埠多路復用(PortaddressTranslation,PAT)是指改變外出數據包的源連線埠並進行連線埠轉換,即連線埠地址轉換(PAT,PortAddressTranslation).採用連線埠多路復用方式。內部網路的所有主機均可共享一個合法外部IP位址實現對Internet的訪問,從而可以最大限度地節約IP位址資源。同時,又可隱藏網路內部的所有主機,有效避免來自internet的攻擊。因此,目前網路中套用最多的就是連線埠多路復用方式。

ALG(ApplicationLevelGateway),即應用程式級網關技術:傳統的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就必須先了解現在IP位址的適用情況,私有IP位址是指內部網路或主機的IP位址,公有IP位址是指在網際網路上全球唯一的IP位址。RFC1918為私有網路預留出了三個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或註冊中心申請而在公司或企業內部自由使用。

隨著接入Internet的計算機數量的不斷猛增,IP位址資源也就愈加顯得捉襟見肘。事實上,除了中國教育和科研計算機網(CERNET)外,一般用戶幾乎申請不到整段的C類IP位址。在其他ISP那裡,即使是擁有幾百台計算機的大型區域網路用戶,當他們申請IP位址時,所分配的地址也不過只有幾個或十幾個IP位址。顯然,這樣少的IP位址根本無法滿足網路用戶的需求,於是也就產生了NAT技術。

雖然NAT可以藉助於某些代理伺服器來實現,但考慮到運算成本和網路性能,很多時候都是在路由器上來實現的。

NAPT

NAPT(NetworkAddressPortTranslation),即網路連線埠地址轉換,可將多個內部地址映射為一個合法公網地址,但以不同的協定連線埠號與不同的內部地址相對應,也就是<內部地址+內部連線埠>與<外部地址+外部連線埠>之間的轉換。NAPT普遍用於接入設備中,它可以將中小型的網路隱藏在一個合法的IP位址後面。NAPT也被稱為“多對一”的NAT,或者叫PAT(PortAddressTranslations,連線埠地址轉換)、地址超載(addressoverloading)。

NAPT與動態地址NAT不同,它將內部連線映射到外部網路中的一個單獨的IP位址上,同時在該地址上加上一個由NAT設備選定的TCP連線埠號。NAPT算得上是一種較流行的NAT變體,通過轉換TCP或UDP協定連線埠號以及地址來提供並發性。除了一對源和目的IP位址以外,這個表還包括一對源和目的協定連線埠號,以及NAT盒使用的一個協定連線埠號。

NAPT的主要優勢在於,能夠使用一個全球有效IP位址獲得通用性。主要缺點在於其通信僅限於TCP或UDP。當所有通信都採用TCP或UDP,NAPT允許一台內部計算機訪問多台外部計算機,並允許多台內部主機訪問同一台外部計算機,相互之間不會發生衝突。

穿透方法

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

工作原理

NAT工作流程NAT工作流程
藉助於NAT,私有(保留)地址的“內部”網路通過路由器傳送數據包時,私有地址被轉換成合法的IP位址,一個區域網路只需使用少量IP位址(甚至是1個)即可實現私有地址網路內所有計算機與Internet的通信需求。

NAT將自動修改IP報文的源IP位址和目的IP位址,Ip地址校驗則在NAT處理過程中自動完成。有些應用程式將源IP位址嵌入到IP報文的數據部分中,所以還需要同時對報文的數據部分進行修改,以匹配IP頭中已經修改過的源IP位址。否則,在報文數據部分嵌入IP位址的應用程式就不能正常工作。

①如右圖這個client(終端)的gateway(網關)設定為NAT主機,所以當要連上Internet的時候,該封包就會被送到NAT主機,這個時候的封包Header之sourceIP(源IP)為192.168.1.100;

②而透過這個NAT主機,它會將client的對外在線上封包的sourceIP(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。

配置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] [ vrfvrf_ 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[ vrfvrf_ 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 portglobal-address port[ permit- inside] [ vrfvrf_ 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 pool address-pool start-address end-address{ netmask mask| prefix-length prefix-length} 定義全局IP位址池,對於NAPT,一般就定義一個IP位址
R(config)# access-listaccess-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[ vrfvrf_ 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[ vrfvrf_ 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 permit ip-addresswildcard 定義訪問列表,只匹配虛擬主機地址。注意應該使用匹配目標IP的擴展ACL。
R(config)# ip nat inside destination list access-list-number pool address-pool[ vrfvrf_ 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內部接口,而連線到外部網路(如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。

第一步,設定外部連線埠
interfaceserial0
ipaddress61.159.62.129255.255.255.248
ipnatoutside

第二步,設定內部連線埠。
interfaceethernet0
ipaddress192.168.0.1255.255.255.0
ipnatinside

第三步,在內部本地與外部合法地址之間建立靜態地址轉換。
ipnatinsidesourcestatic內部本地地址外部合法地址。

示例:
ipnatinsidesourcestatic192.168.0.261.159.62.130//將內部網路地址192.168.0.2轉換為合法IP位址61.159.62.130
ipnatinsidesourcestatic192.168.0.361.159.62.131//將內部網路地址192.168.0.3轉換為合法IP位址61.159.62.131
ipnatinsidesourcestatic192.168.0.461.159.62.132//將內部網路地址192.168.0.4轉換為合法IP位址61.159.62.132
ipnatinsidesourcestatic192.168.0.561.159.62.133//將內部網路地址192.168.0.5轉換為合法IP位址61.159.62.133
ipnatinsidesourcestatic192.168.0.661.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。

第一步,設定外部連線埠。

設定外部連線埠命令的語法如下:

ipnatoutside

示例:

interfaceserial0//進入串列連線埠serial0

ipaddress61.159.62.129255.255.255.192 //將其IP位址指定為61.159.62.129,子網掩碼為255.255.255.192

ipnatoutside//將串列口serial0設定為外網連線埠

注意,可以定義多個外部連線埠。

第二步,設定內部連線埠。

設定內部接口命令的語法如下:

ipnatinside

示例:

interfaceethernet0//進入乙太網連線埠Ethernet0

ipaddress172.16.100.1255.255.255.0//將其IP位址指定為172.16.100.1,子網掩碼為255.255.255.0

ipnatinside//將Ethernet0設定為區域網路連線埠。

注意,可以定義多個內部連線埠。

第三步,定義合法IP位址池。

定義合法IP位址池命令的語法如下:

ipnatpool地址池名稱起始IP位址終止IP位址子網掩碼

其中,地址池名字可以任意設定。

示例:

ipnatpoolchinanet61.159.62.13061.159.62.190netmask255.255.255.192//指明地址緩衝池的名稱為chinanet,IP位址範圍為61.159.62.130~61.159.62.190,子網掩碼為255.255.255.192。需要注意的是,即使掩碼為255.255.255.0,也會由起始IP位址和終止IP位址對IP位址池進行限制。

或ipnatpooltest61.159.62.13061.159.62.190prefix-length26

注意,如果有多個合法IP位址範圍,可以分別添加。例如,如果還有一段合法IP位址範圍為"211.82.216.1~211.82.216.254",那么,可以再通過下述命令將其添加至緩衝池中。

ipnatpoolcernet211.82.216.1211.82.216.254netmask255.255.255.0

ipnatpooltest211.82.216.1211.82.216.254prefix-length24

第四步,定義內部網路中允許訪問Internet的訪問列表

定義內部訪問列表命令的語法如下:

access-list標號permit源地址通配符(其中,標號為1~99之間的整數)

access-list1permit172.16.100.00.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-list2permit172.16.98.00.0.0.255

access-list3permit172.16.99.00.0.0.255

第五步,實現網路地址轉換。

在全局設定模式下,將第四步由access-list指定的內部本地地址列表與第三步指定的合法IP位址池進行地址轉換。命令語法如下:
ipnatinsidesourcelist訪問列表標號pool內部合法地址池名字

示例:

ipnatinsidesourcelist1poolchinanet

如果有多個內部訪問列表,可以一一添加,以實現網路地址轉換,如

ipnatinsidesourcelist2poolchinanet

ipnatinsidesourcelist3poolchinanet

如果有多個地址池,也可以一一添加,以增加合法地址池範圍,如

ipnatinsidesourcelist1poolcernet

ipnatinsidesourcelist2poolcernet

ipnatinsidesourcelist3poolcernet

至此,動態地址轉換設定完畢。

連線埠復用動態地址轉換(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。

第一步,設定外部連線埠。

interfaceserial0

ipaddress202.99.160.1255.255.255.252

ipnatoutside

第二步,設定內部連線埠。

interfaceethernet0

ipaddress10.100.100.1255.255.255.0

ipnatinside

第三步,定義合法IP位址池。

ipnatpoolonlyone202.99.160.2202.99.160.2netmask255.255.255.252

//指明地址緩衝池的名稱為onlyone,IP位址範圍為202.99.160.2,子網掩碼為255.255.255.252。由於本例只有一個IP位址可用,所以,起始IP位址與終止IP位址均為202.99.160.2。如果有多個IP位址,則應當分別鍵入起止的IP位址。

第四步,定義內部訪問列表。

access-list1permit10.100.100.00.0.0.255

允許訪問Internetr的網段為10.100.100.0~10.100.100.255,子網掩碼為255.255.255.0。需要注意的是,在這裡子網掩碼的順序跟平常所寫的順序相反,即0.0.0.255。

第五步,設定復用動態地址轉換。

在全局設定模式下,設定在內部的本地地址與內部合法IP位址間建立復用動態地址轉換。命令語法如下:

ipnatinsidesourcelist訪問列表號pool內部合法地址池名字overload

示例:

ipnatinsidesourcelist1poolonlyoneoverload//以連線埠復用方式,將訪問列表1中的私有IP位址轉換為onlyoneIP位址

池中定義的合法IP位址。

注意:overload是復用動態地址轉換的關鍵字。

至此,連線埠復用動態地址轉換完成。

還可以這樣寫:

ipnatinsidesourcelist1interfaceserial0overload

全部採用連線埠復用地址轉換

當ISP分配的IP位址數量很少,網路又沒有其他特殊需求,即無需為Internet提供網路服務時,可採用連線埠復用地址轉換方式,使網路內的計算機採用同一IP位址訪問Internet,在節約IP位址資源的同時,又可有效保護網路內部的計算機。
網路環境為:

區域網路採用10Mb/s光纖,以城域網方式接入Internet。路由器選用擁有2個10/100Mb/s自適應連線埠的Cisco2611。內部網路使用的IP位址段為192.168.100.1~192.168.100.254,區域網路連線埠Ethernet0的IP位址為192.168.100.1,子網掩碼為255.255.255.0。網路分配的合法IP位址範圍為202.99.160.128~202.99.160.131,連線ISP的連線埠Ethernet1的IP位址為202.99.160.129,子網掩碼為255.255.255.252。可用於轉換的IP位址為202.99.160.130。要求網路內部的所有計算機均可訪問Internet。

案例分析:

既然只有一個可用的合法IP位址,同時處於區域網路的伺服器又只為區域網路提供服務,而不允許Internet中的主機對其訪問,因此完全可以採用連線埠復用地址轉換方式實現NAT,使得網路內的所有計算機均可獨立訪問Internet。

配置清單:
interfacefastethernet0/0
ipaddress192.168.100.1255.255.0.0//定義本地連線埠IP位址
duplexauto
speedauto
ipnatinside//定義為本地連線埠

interfacefastethernet0/1
ipaddress202.99.160.129255.255.255.252
duplexauto
speedauto
ipnatoutside

ipnatpoolonlyone202.99.160.130202.99.160.130netmask255.255.255.252//定義合法IP位址池,名稱為onlyone
access-list1permit192.168.100.00.0.0.255//定義本地訪問列表
ipnatinsidesourcelist1poolonlyoneoverload//採用連線埠復用動態地址轉換

動態地址+連線埠復用地址轉換

許多FTP網站考慮到伺服器性能和Internet連線頻寬的占用問題,都限制同一IP位址的多個進程訪問。如果採用連線埠復地址轉換方式,則網路內的所有計算機都採用同一IP位址訪問Internet,那么,將因此而被禁止對該網站的訪問。所以,當提供的合法IP位址數量稍多時,可同時採用連線埠復用動態地址轉換方式,從而既可保證所有用戶都能夠獲得訪問Internet的權力,同時,又不致、某些計算機因使用同一IP位址而被限制許可權。需要注意的是,由於所有計算機都採用動態地址轉換方式,因此Internet中的所有計算機將無法實現對網路內部伺服器的訪問。

網路環境:

區域網路以2Mb/sDDN專線接入Internet,路由器選用安裝了廣域網模組的Cisco2611,如圖4-2-2所示。內部網路使用的IP位址段為172.16.100.1~172.16.102.254,區域網路連線埠Ethernet0的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。

配置清單:
interfacefastethernet0/1
ipaddress172.16.100.1255.255.0.0//定義區域網路連線埠IP位址
duplexauto
speedauto
ipnatinside//定義為局域連線埠

interfaceserial0/0
ipaddress202.99.160.129255.255.255.192//定義廣域網連線埠IP位址

duplexauto
speedauto
ipnatoutside//定義為廣域連線埠

ipnatpoolpublic202.99.160.190202.130.160.190netmask255.255.255.192//定義合法IP位址池,名稱為public
ipnatpoolsuper202.99.160.130202.130.160.189netmask255.255.255.192//定義合法IP位址池,名稱為super
access-list1permit172.16.100.00.0.0.255//定義本地訪問列表1
access-list2permit172.16.101.00.0.0.255//定義本地訪問列表2
access-list2permit172.16.102.00.0.0.255
ipnatinsidesourcelist1poolsuper//定義列表1採用動態地址轉換
ipnatinsidesourcelist2poolpublicoverload//定義列表2採用連線埠復用地址轉換

靜態地址轉換+連線埠復用地址轉換

其實在很多時候,網路中的伺服器既為網路內部的客戶提供網路服務,又同時為Internet中的用戶提供訪問服務。因此,如果採用連線埠復用地址轉換或動態地址轉換,將由於無法確定伺服器的IP位址,而導致Internet用戶無法實現對網路內部伺服器的訪問。此時,就應當採用靜態地址轉換+連線埠復用地址轉換的NAT方式。也就是說,對伺服器採用靜態地址轉換,以確保伺服器擁有固定的合法IP位址。而對普通的客戶計算機則採用連線埠復用地址轉換,使所有用戶都享有訪問Internet的權力。

網路環境為:

區域網路採用10Mb/s光纖,以城域網方式接入Internet。路由器選用擁有2個10/100Mb/s自適應連線埠的Cisco2611。內部網路使用的IP位址段為10.18.100.1~10.18.104.254,區域網路連線埠Ethernet0的IP位址為10.18.100.1,子網掩碼為255.255.0.0。網路分配的合法IP位址範圍為211.82.220.80~211.82.220.87,連線ISP的連線埠Ethernet1的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位址。

配置清單:
interfacefastethernet0/0
ipaddress10.18.100.1255.255.0.0//定義區域網路口IP位址
duplexauto
speedauto
ipnatinside//定義區域網路口

interfacefastethernet0/1
ipaddress211.82.220.81255.255.255.248//定義廣域網口IP位址
duplexauto
speedauto
ipnatoutside//定義廣域網口

ipnatpoolevery211.82.220.86211.82.220.86netmask255.255.255.248//定義合法IP位址池
access-list1permit10.18.101.00.0.0.255//定義本地訪問列表1
access-list1premit10.18.102.00.0.0.255
access-list1premit10.18.103.00.0.0.255
access-list1premit10.18.104.00.0.0.255
ipnatinsidesourcelist1pooleveryoverload//定義列表達1採用連線埠復用地址轉換
ipnatinsidesourcestatic10.18.100.10211.82.220.82//定義靜態地址轉換
ipnatinsidesourcestatic10.18.100.11211.82.220.83
ipnatinsidesourcestatic10.18.100.12211.82.220.84
ipnatinsidesourcestatic10.18.100.13211.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/100Mb/s自適應連線埠的Cisco2611。內部網路使用的IP位址段為192.168.1.1~192.168.1.254,區域網路連線埠Ethernet0的IP位址為192.168.1.1,子網掩碼為255.255.255.0。網路分配的合法IP位址範圍為,211.82.220.128~211.82.220.130,連線ISP的連線埠Ethernet1的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池,只簡單地使用insidesourcelist語句即可。

需要注意的是,由於每種套用服務都有自己默認的連線埠,所以,這種NAT方式下,網路內部每種套用服務中只能各自有一台伺服器成為Internet中的主機,例如,只能有一台Web伺服器,一台E-mail服務,一台FTP伺服器。儘管可以採用改變默認連線埠的方式創建多台套用伺服器,但這種伺服器在訪問時比較困難,要求用戶必須先了解某種服務採用的新TCP連線埠。

配置清單:

interfacefastethernet0/0
ipaddress192.168.1.1255.255.255.0//指定區域網路口的IP位址
duplexauto
speedauto
ipnatinside//指定區域網路接口

interfacefastethernet0/1
ipaddress211.82.220.129255.255.255.252//指定廣域網口的IP位址
access-list1permit192.168.1.00.0.0.255

ipnatinsidesourcelist1interfacefastethernet0/1overload//啟用連線埠復用地址轉換,並直接採用fastethernet0/1的IP位址。
ipnatinsidesourcestatictcp192.168.1.1180211.82.220.12980
ipnatinsidesourcestatictcp192.168.1.1221211.82.220.12921
ipnatinsidesourcestatictcp192.168.1.1325211.82.220.12925
ipnatinsidesourcestatictcp192.168.1.13110211.82.220.129110

利用地址轉換實現負載均衡

隨著訪問量的上升,當一台伺服器難以勝任時,就必須採用負載均衡技術,將大量的訪問合理地分配至多台伺服器上。當然,實現負載均衡的手段有許多種,比如可以採用伺服器群集負載均衡、交換機負載均衡、DNS解析負載均衡等等。

其實除此以外,也可以通過地址轉換方式實現伺服器的負載均衡。事實上,這些負載均衡的實現大多是採用輪詢方式實現的,使每台伺服器都擁有平等的被訪問機會。

網路環境:

區域網路以2Mb/sDDN專線拉入Internet,路由器選用安裝了廣域網模組的Cisco2611。內部網路使用的IP位址段為10.1.1.1~10.1.3.254,區域網路連線埠Ethernet0的IP位址為10.1.1.1,子網掩碼為255.255.252.0。網路分配的合法IP位址範圍為202.110.198.80~202.110.198.87,連線ISP的連線埠Ethernet1的IP位址為202.110.198.81,子網掩碼為255.255.255.248。要求網路內部的所有計算機均可訪問Internet,並且在3台Web伺服器和2台FTP伺服器實現負載均衡。

案例分析:

既然要求網路內所有計算機都可以接入Internet,而合法IP位址又只有5個可用,當然可採用連線埠復用地址轉換方式。本來對伺服器通過採用靜態地址轉換,賦予其合法IP位址即可。但是,由於伺服器的訪問量太大(或者是伺服器的性能太差),不得不使用多台伺服器作負載均衡,因此,必須將一個合法IP位址轉換成多相內部IP位址,以輪詢方式減輕每台伺服器的訪問壓力。

配置檔案:
interfacefastethernet0/1
ipadderss10.1.1.1255.255.252.0//定義區域網路連線埠IP位址
duplexauto
speedauto
ipnatinside//定義為局域連線埠

interfaceserial0/0
ipaddress202.110.198.81255.255.255.248//定義廣域網連線埠IP位址
duplexauto
speedauto
ipnatoutside//定義為廣域連線埠

access-list1permit202.110.198.82//定義輪詢地址列表1
access-list2permit202.110.198.83//定義輪詢地址列表2
access-list3permit10.1.1.00.0.3.255//定義本地訪問列表3

ipnatpoolwebsev10.1.1.210.1.1.4255.255.255.248typerotary//定義Web伺服器的IP位址池,Rotary關鍵字表示準備使用輪詢策略從NAT池中取出相應的IP位址用於轉換進來的IP報文,訪問202.110.198.82的請求將依次傳送給web伺服器:10.1.1.2、10.1.1.3和10.1.1.4
ipnatpoolftpsev10.1.1.810.1.1.9255.255.255.248typerotary//定義ftp伺服器的IP位址池。
ipnatpoolnormal202.110.198.84202.110.198.84netmask255.255.255.248//定義合法IP位址池,名稱為normal
ipnatinsidedestinationlist1poolwebsev//insidedestinationlist語句定義與列表1相匹配的IP位址的報文將使用輪詢策略
ipnatinsidedestinationlist2poolftpsev

轉換方法

網路地址轉換網路地址轉換
FullconeNAT

即著名的一對一(one-to-one)NAT。

一旦一個內部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有發自iAddr:port1的包都經由eAddr:port2向外傳送。任意外部主機都能通過給eAddr:port2發包到達iAddr:port1。

Address-RestrictedconeNAT

限制地址,即只接收曾經傳送到對端的IP位址來的數據包。

一旦一個內部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有發自iAddr:port1的包都經由eAddr:port2向外傳送。任意外部主機(hostAddr:any)都能通過給eAddr:port2發包到達iAddr:port1的前提是:iAddr:port1之前傳送過包到hostAddr:any. “any”也就是說連線埠不受限制。

Port-RestrictedconeNAT

類似受限制錐形NAT(RestrictedconeNAT),但是還有連線埠限制。

一旦一個內部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有發自iAddr:port1的包都經由eAddr:port2向外傳送。一個外部主機(hostAddr:port3)能夠發包到達iAddr:port1的前提是:iAddr:port1之前傳送過包到hostAddr:port3。

SymmetricNAT(對稱NAT)

每一個來自相同內部IP與port的請求到一個特定目的地的IP位址和連線埠,映射到一個獨特的外部來源的IP位址和連線埠。

同一個內部主機發出一個信息包到不同的目的端,不同的映射使用。

外部主機收到了一封包從一個內部主機可以送一封包回來。

常見問題

1.NAT的作用是什麼?

NAT的作用是把區域網路的私有地址,轉化成外網的公有地址。使得內部網路上的(被設定為私有IP位址的)主機可以訪問Internet。

2.NAT分為哪幾種?

NAT可以分為BasicNAT和PAT:

-BasicNAT只轉化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遷移的進程,而並沒有解決深層次的問題,他們認為是不可取的。

計算機術語4

21世紀是網路和信息化的世紀,電腦的發展改變著人們的生活。通過了解計算機術語,能更清楚的認識計算機,更好的運用計算機。

相關詞條

相關搜尋

熱門詞條

聯絡我們