網絡地址轉換(NAT)的原理與配置

    隨着網絡的發展,公用IP地址的需求與日俱增。爲了緩解公用IP地址的不足,並且保護公司內部服務器的私網地址,可以使用NAT(Network Address Translation,網絡地址轉換)技術將私網地址轉化成爲公網地址,緩解IP地址的不足,並且隱藏內部服務器的私網地址。


NAT的概述與現實方式

1. NAT概念

   網絡地址轉換(NAT)通過將內部網絡的私有IP地址翻譯成全球唯一的公網IP地址,使內部網絡可以連接到互聯網等外部網絡上,廣泛應用於各種類型的互聯網接入方式和各種類型的網絡中。原因很簡單,NAT不僅解決了IP地址不足的問題,而且還能夠隱藏內部網絡的細節,避免來自網絡外部的***,起到一定的安全作用。

   藉助於NAT,私有保留地址的內部網絡通過路由器發送數據包時,私有地址被轉換成合法的IP地址,這樣一個局域網只需要少量地址(甚至是一個),即可實現使私有地址網絡中的所有計算機與互聯網的通信需求。


2. NAT的實現方式

NAT的實現方式有以下三種:

* 靜態轉換(Static Translation)

* 動態轉換(Dynamic Translation)

* 端口多路複用(Port Address Translation,PAT)

   靜態轉換IP地址的對應關係是一對一且不變的,並沒有節約公用IP地址,只是隱藏了主機的真實地址。動態轉換雖然在一定情況下節約了公用IP地址,但是當內部網絡同時訪問Internet的主機數大於合法地址池中的IP地址數時就不適用了。端口多路複用可以使所有的內部網絡主機共享一個合法的外部IP地址,從而最大限度的節約IP地址資源。

   由於動態轉換形成的IP地址的對應關係是不確定的、隨機的;端口多路複用使用的是端口號的轉換,也是不確定的,所以內網服務器不能使用這兩種轉換方式,這是由於外網用戶無法確定服務器合法的公網IP地址,導致無法訪問服務器。這時使用靜態轉換將私有IP地址轉換爲固定的合法的IP地址,這樣服務器有了固定的合法的公網IP地址,才能實現外網的訪問。


NAT的術語與轉換表

wKioL1mezanQMcHcAADhz7sla1c993.png

內部局部IP地址(Inside Local IP Address):在內部網絡中分配給主機的私有IP地址。該地址是從RFC1918(私有互聯網空間地址分配)所定義的私有地址空間中分配的,或者隨機挑選的。

內部全局IP地址(Inside Global IP Address):一個合法的IP地址(由NIC或網絡服務提供商分配)。它對外代表一個或多個內部局部IP地址。該地址通常是從全球統一可尋址的地址空間中分配的,一般由互聯網服務提供商(ISP)提供。

外部局部IP地址(Outside Global IP Address):由其所有者給外部網絡上的主機分配的IP地址。該地址通常也是從全球統一可尋址的地址空間中分配的。

外部局部IP地址(Outside Local IP Address):外部主機表現在內部網絡的IP地址。這一地址是從內部可尋址的地址空間中分配的,很可能是從諸如RFC1918中所定義的保留地址空間分配的。

簡單轉換條目(Simple Translation Entry):將一個IP地址映射到另一IP地址的轉換條目。

擴展轉換條目(Extended Translation Entry):映射IP地址和端口到另一對IP地址和端口的條目。


NAT的特性

NAT的典型優勢如下:

1.NAT允許企業內部網使用私有地址,並通過設置合法的地址集,使內部網可以與互聯網進行通信,從而達到節省合法註冊地址的目的。

2.NAT可以減少規劃地址時發生的地址重疊情況。

3.NAT增強了內部網絡與公用網絡連接時的靈活性。

4.NAT支持地址重疊。

   當然,NAT也不是沒有缺點。用於地址轉換的處理過程會帶來功能和性能上的一些損失,特別是在IP報文承載的數據中包含發送IP地址信息的情況下。


NAT的典型缺點如下:

1.NAT會使延遲增大。

2.NAT增加了配置和排錯的複雜性。

3.NAT也可能會使某些需要使用內嵌IP地址的應用不能正常工作,因爲它隱藏了端到端的IP地址。


NAT的配置

1.靜態NAT配置

  一個私有地址對應一個公有地址,向外網發佈服務器。

(1) 在內部局部地址和內部全局地址之間建立靜態地址轉換。

Router(config)#ip nat inside source static local-ip global-ip [extendable]

   其中,參數“extendable”(可選)表示允許同一個內部局部地址映射到多個內部全局地址。“inside”表示從inside口進入的流量將源地址(source)進行靜態轉換。

例如:將內部局部地址192.168.100.2轉換爲內部全局地址61.159.62.130

   Router(config)# ip nat inside source static 192.168.100.2 61.159.62.130    


(2) 在內部和外部端口上啓用NAT。

   設置NAT功能的路由器需要有一個內部端口(inside)和一個外部端口(outside)。內部端口連接的網絡用戶使用的是內部IP地址,外部端口連接的是外部的網絡,如互聯網。要NAT發揮作用,必須在這兩個端口上啓用NAT。

Router(config)# int f0/0
Router(config-if)# ip nat inside
Router(config)# int f1/0
Router(config-if)# ip nat outside

NAT端口映射

  需要使用NAT的端口映射功能,在內部局部地址和內部全局地址之間建立NAT端口映射的語法如下:

Router(config)# ip nat inside source static protocol local-ip UDP/TCP-port global-ip UDP/TCP-port [extendable]

  此命令是將TCP或UDP協議中內部局部地址需要轉換的端口號轉換成爲內部全局地址的端口號。

例如:希望外網通過80端口訪問公司內部的Web服務器192.168.100.2

   Router(config)# ip nat inside source static tcp 192.168.100.2 80 61.159.62.131 80 extendable   

  NAT端口映射還可以將不同服務器的不同服務(端口)映射到同一公網地址的不同端口,給人的感覺是通過一個地址訪問了所有的服務。


2.動態NAT配置

  多個私有地址對應多個公有地址,負責上網。

(1) 定義內部網絡中允許訪問外部網絡的訪問控制列表

(2) 定義合法IP地址池

Router(config)# ip nat pool pool-name start-ip end-ip { netmask netmask | prefix-length prefix-length} [type rotary]

  下面是對該命令相關參數的說明:

pool-name放置轉換後地址的地址池名稱。

start-ip/end-ip地址池內起始和終止ip地址。

netmask netmask子網掩碼,以點分十進制數表示。

prefix-length prefix-length子網掩碼,以掩碼中1的數量表示(如:prefix-length 24 等同於netmask 255.255.255.0)。兩種掩碼的表示方式等價,任意使用一個即可。

type rotary(可選):地址池中的地址爲循環使用。

   如果有多個地址池,可以重複使用此命令添加地址池。

注意:配置訪問控制列表時,可以將其配置爲標準訪問控制列表,也可以將其配置爲擴展訪問控制列表。

(3) 實現網絡地址轉換

在全局配置模式中,將由access-list指定的內部局部地址與指定的內部全局地址池進行地址轉換。命令語法如下:

Router(config)# ip nat inside source list access-list-name pool pool-name [overload]

  其中,“overload”(可選)表示使用地址複用,用於PAT。

例如:將訪問控制列表1中的局部地址轉換爲test0地址池中定義爲全局IP地址。

   Router(config)# ip nat inside source list 1 pool test0    

如果有多個地址池,可以一一添加,以增加合法地址池的數量範圍。命令如下:

   Router(config)# ip nat inside source list 1 pool test1    

   Router(config)# ip nat inside source list 1 pool test2    

4) 在內部和外部接口上啓用NAT。



PAT

1. 使用外部全局地址

  如圖所示,按以下配置說明使用外部全局地址的方法配置PAT

wKioL1me0MnTtXHQAADJGqHaGuM693.png

(1) 配置內部訪問控制列表

Router(config)# access-list 1 permit 10.1.1.0 0.0.0.255

(2) 定義合法的IP地址池

Router(config)# ip nat pool ysf 61.159.62.131 61.159.62.131 netmask 255.255.255.0

(3) 設置複用動態IP地址轉換

在全局配置模式中,設置在內部局部地址與內部全局地址之間建立動態地址轉換。

  Router(config)# ip nat inside source list access-list-name pool pool-name [overload]  

例如:下面的命令表示,以端口複用方式,將訪問控制列表1中的局部地址轉換爲onlyone地址中定義的全局IP地址。

Router(config)# ip nat inside source list 1 pool ysf overload

(4) 在內部和外部端口上啓用NAT。

Router(config)# int f0/0
Router(config-if)# ip nat outside
Router(config)# int f1/0
Router(config-if)# ip nat inside

(5) 配置默認路由,使數據包可以正常選路

Router(config)# ip route 0.0.0.0 0.0.0.0 61.159.62.129

注意:以上NAT配置使用的是一段合法IP地址。有時ISP分配的是兩端IP地址,一段子網掩碼爲30的接口地址和一段公網地址,其中接口地址可以是公網地址也可以是私網地址。如果ISP分配兩端IP地址,則配置廣域網接口時使用接口地址,配置NAT時使用公網地址,其配置與上述示例相同。


2. 複用路由器外部接口地址

  有時,只有一個外部IP地址,並且已被路由器外部接口使用,也可以直接使用接口的IP地址作爲轉接後的源地址

(1)定義內部訪問控制列表

Router(config)# access-list 1 permit 10.1.1.0 0.0.0.255

(2)定義合法的IP地址池

  由於直接使用接口IP地址,所以不需定義IP地址池

(2)設置複用動態IP地址轉換

在全局配置模式下,設置在內部的本地地址與內部合法地址之間建立動態轉換。命令如下:

Router(config)# ip nat inside source list 1 int f0/0 overload

上述命令表示,以端口複用方式,將訪問控制列表1中的私有地址轉換爲路由器外部接口的合法IP地址。

(3)在內部和外部端口上啓用NAT

Router(config)# int f0/0
Router(config-if)# ip nat outside
Router(config)# int f1/0
Router(config-if)# ip nat inside


驗證NAT配置

  可以使用show ip nat translation命令顯示當前存在的轉換。

可以使用下面的命令對NAT進行監控

Router(config)# show ip nat translations [verbose]

   該命令用來檢查當前存在的轉換,關鍵字verbose與該命令一起使用能夠顯示更多的信息,包括一個動態條目的保存時間。顯示的詳細信息中,create、use、timeout、left分別顯示NAT轉換條目的創建時間、使用時間、超時時間值、剩餘時間,而靜態NAT形成的轉換條目的timeout爲0,表示永遠存在。

默認情況下,如果在一定時間內沒有使用動態地址轉換條目,就會因超時而被取消。在沒有配置地址複用的情況下,簡單轉換條目的超時時間爲24小時。

如果配置了地址複用,又因爲每個條目都包含了使用它的數據流的更多內容,那麼就可以對轉換條目的超時值實施較細緻的控制,下面是採用地址複用時默認的NAT超時值。

* UDP超時值:5分鐘

* DNS超時值:1分鐘

* TCP超時值:24小時

* 結束和復位值:1小時

注意:“結束”和“復位”指的是TCP連接的結束包和復位包。

如果必要,用戶可以改變超時的默認值,使用的命令如下:

Router(config)# ip nat translation { dns-timeout | icmp-timeout | tcp-timeout | udp-timeout | finrst-timeout | syn-timeout} {seconds | never}

   可以對不同的協議設置NAT轉換超時時間,也可以設置爲永遠不超時。例如,命令ip nat translation icmp-timeout 120 表示,將ICMP協議的NAT轉換超時時間設置爲120秒。

注意:每個NAT條目大概要佔用160字節的內存,所以,65535條條目會佔用多餘10MB的內存和相當多的CPU資源。在實際工作中,若發現路由器的CPU和內存資源緊張,可以查看NAT配置和轉換條目。

   有時因爲NAT轉換條目過多導致設備性能下降,可以使用clear ip nat translation * 命令來清除NAT轉換表中的所有條目。*是一個通配符,代表任意值。首先使用show ip nat translations查看當前活躍的轉換條目,然後,輸入clear ip nat translation *命令來清除所有的轉換。再次輸入show ip nat translations命令進行查看,NAT轉換條目中只剩下靜態轉換條目。

  使用clear ip nat translation inside local-ip global-ip,可以清除包含一個內部轉換的一個簡單轉換條目。

  使用clear ip nat translation outside local-ip global-ip,可以清除包含一個外部轉換的一個簡單轉換條目。


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