天天看點

網絡位址轉換(NAT)

NAT概述

随着網絡的發展,公用IP位址的需求與日俱增。為了緩解公用IP位址的不足,并且保護公司内部伺服器的私網位址,可以使用NAT(Network Address Translation,網絡位址轉換)技術将私網位址轉化成為公網位址,緩解IP位址的不足,并且隐藏内部伺服器的私網位址。

NAT的概述與現實方式

NAT概念

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

借助于NAT,私有保留位址的内部網絡通過路由器發送資料包時,私有位址被轉換成合法的IP位址,這樣一個區域網路隻需要少量位址(甚至是一個),即可實作使私有位址網絡中的所有計算機與網際網路的通信需求。

NAT的實作方式

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

靜态轉換(Static Translation)

動态轉換(Dynamic Translation)

端口多路複用(Port AddressTranslation,PAT)

靜态轉換IP位址的對應關系是一對一且不變的,并沒有節約公用IP位址,隻是隐藏了主機的真實位址。動态轉換雖然在一定情況下節約了公用IP位址,但是當内部網絡同時通路Internet的主機數大于合法位址池中的IP位址數時就不适用了。端口多路複用可以使所有的内部網絡主機共享一個合法的外部IP位址,進而最大限度的節約IP位址資源。

由于動态轉換形成的IP位址的對應關系是不确定的、随機的;端口多路複用使用的是端口号的轉換,也是不确定的,是以内網伺服器不能使用這兩種轉換方式,這是由于外網使用者無法确定伺服器合法的公網IP位址,導緻無法通路伺服器。這時使用靜态轉換将私有IP位址轉換為固定的合法的IP位址,這樣伺服器有了固定的合法的公網IP位址,才能實作外網的通路。

NAT的術語與轉換表

内部局部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 TranslationEntry):将一個IP位址映射到另一IP位址的轉換條目。

擴充轉換條目(ExtendedTranslation Entry):映射IP位址和端口到另一對IP位址和端口的條目。

NAT的特性

NAT的典型優勢如下:

NAT允許企業内部網使用私有位址,并通過設定合法的位址集,使内部網可以與網際網路進行通信,進而達到節省合法注冊位址的目的。

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

NAT增強了内部網絡與公用網絡連接配接時的靈活性。

NAT支援位址重疊。

當然,NAT也不是沒有缺點。用于位址轉換的處理過程會帶來功能和性能上的一些損失,特别是在IP封包承載的資料中包含發送IP位址資訊的情況下。

NAT的典型缺點如下:

NAT會使延遲增大。

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

NAT也可能會使某些需要使用内嵌IP位址的應用不能正常工作,因為它隐藏了端到端的IP位址。

NAT的配置

靜态NAT配置

一個私有位址對應一個公有位址,向外網釋出伺服器。

在内部局部位址和内部全局位址之間建立靜态位址轉換。

Router(config)#ipnat 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 static192.168.100.2  61.159.62.130

在内部和外部端口上啟用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-ipUDP/TCP-port [extendable]

    此指令是将TCP或UDP協定中内部局部位址需要轉換的端口号轉換成為内部全局位址的端口号。

例如:希望外網通過8080端口通路公司内部的Web伺服器192.168.100.2

Router(config)# ip nat inside source statictcp 192.168.100.2 80 61.159.62.131 8080 extendable

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

動态NAT配置

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

定義内部網絡中允許通路外部網絡的通路控制清單

定義合法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位址。

netmasknetmask:子網路遮罩,以點分十進制數表示。

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

typerotary(可選):位址池中的位址為循環使用。

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

注意:配置通路控制清單時,可以将其配置為标準通路控制清單,也可以将其配置為擴充通路控制清單。

實作網絡位址轉換

在全局配置模式中,将由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 1pool test0

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

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

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

在内部和外部接口上啟用NAT。

PAT

使用外部全局位址

配置内部通路控制清單

定義合法的IP位址池

設定複用動态IP位址轉換

在全局配置模式中,設定在内部局部位址與内部全局位址之間建立動态位址轉換。

    例如:下面的指令表示,以端口複用方式,将通路控制清單1中的局部位址轉換為onlyone位址中定義的全局IP位址。

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

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

複用路由器外部接口位址

1)定義内部通路控制清單

   2)設定複用動态IP位址轉換

   在全局配置模式下,設定在内部的本地位址與内部合法位址之間建立動态轉換。指令如下:

Router(config)# ip nat inside source list 1interface FastEthernet 0/0 overload

    上述指令表示,以端口複用方式,将通路控制清單1中的私有位址轉換為路由器外部接口的合法IP位址。

    3)在内部和外部端口上啟用NAT

驗證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 nattranslation icmp-timeout 120 表示,将ICMP協定的NAT轉換逾時時間設定為120秒。

注意:每個NAT條目大概要占用160位元組的記憶體,是以,65535條條目會占用多餘10MB的記憶體和相當多的CPU資源。在實際工作中,若發現路由器的CPU和記憶體資源緊張,可以檢視NAT配置和轉換條目。

    有時因為NAT轉換條目過多導緻裝置性能下降,可以使用clear ip nattranslation * 指令來清除NAT轉換表中的所有條目。*是一個通配符,代表任意值。首先使用show ip nat translations檢視目前活躍的轉換條目,然後,輸入clear ip nat translation *指令來清除所有的轉換。再次輸入showip nat translations指令進行檢視,NAT轉換條目中隻剩下靜态轉換條目。

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

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

NAT的故障處理

如果了解了實施NAT要達到的目标,然後通過檢視配置,檢查下面的錯誤是否是問題的原因,一般可以将問題解決。

是否設定了通路控制清單,阻塞了進行過網絡位址轉換或者沒有進行過網絡位址轉換的流量。配置時要牢記與通路控制清單相關的網絡位址轉換操作。如果針對沒有進行網絡位址轉換的流量配置了ACL,而到達的流量實際上是進行了網絡位址轉換的流量,這就導緻流量被丢棄。

定義需要進行NAT的通路控制清單時,漏掉了需要進行位址轉換的網絡。用來定義需要進行NAT操作的網絡位址的通路控制清單,應該包括所有需要進行網絡位址轉換的網絡。如果清單中缺少一個或很多個位址,都将導緻無法對來自這些位址的流量進行網絡位址轉換。

在NAT語句中漏掉了overload關鍵字。為了建立PAT,在NAT配置指令的最後,必須使用overload關鍵字。漏掉這個關鍵字,将會導緻無法進行PAT,最終将會導緻隻有數目有限的主機可以通路公用網絡或者網際網路,而不是期望中的所有主機。

不對稱路由導緻NAT失敗。當分組進入一個使用ip nat inside指令進行配置的接口時,以及離開使用ip nat outside指令配置的接口時,就會發生網絡位址轉換。在由很多接口的路由器上,必須確定需要進行網絡位址的流量進入路由器的所有接口都是用ip nat inside進行配置的,而這個流量離開的所有接口都使用ip natoutside指令進行配置。否則,流量在經過沒有使用正确的NAT指令配置的接口時,無法進行網絡位址轉換。

NAT位址池和靜态NAT表項中有重疊位址。確定NAT位址池中的IP位址也不能用于靜态網絡位址轉換,這是很重要的,否則将導緻間斷性的NAT失敗。如果将廣播位址配置到NAT位址池中也會出現間斷性的NAT失敗。

Inside和outside接口配置錯誤,也會造成NAT失敗。

比較有用的排錯指令是show ip nat statistics,可以通過此指令檢視NAT的各種資訊。如果想要跟蹤NAT的操作,可以使用debug ip nat 指令顯示出每個轉換的資料包。

針對debug ip nat 指令輸出的結果分析,緊随NAT的*表示該轉換是發生在高速通道上的。每個會話的第一個資料包總是經由低速通道(按處理器交換方式處理)。如果緩存條目存在,則每個會話餘下的資料包将經由高速通道。

S:表示源位址

d:表示目的位址

*→*:表示将位址*轉換為位址*

括号中的值是IP辨別。該資訊會對調試有所幫助,因為它可以幫助使用者将同一個會話的資料包關聯起來。

配置NAT實作網絡通路

實驗環境

   Benet公司的網絡拓撲結構如上圖所示,網關路由器連接配接三層交換機組成公司的核心部分,按照部門劃分VLAN并通過二層交換機連接配接到各部門主機。公司内部區域網路中除普通通路Internet的員工外,還有幾台伺服器提供Web、Telnet等服務。

Benet公司的網絡規劃如下:

從ISP擷取IP位址為145.50.23.0/24的公網位址。

普通員工,VLAN3,IP位址為192.168.3.0/24。

上司辦公室,VLAN4,IP位址為192.168.4.0/24。

伺服器,VLAN2,IP位址為192.168.2.0/24。

三層交換機和路由器之間的接口位址為192.168.100.0/30。

需求描述

   要求公司内部伺服器192.168.2.2采用靜态NAT轉換為145.52.23.7,将内部網絡位址192.168.2.0/24和192.168.4.0/24采用PAT轉換為合法的外部位址的範圍為145.52.23.3-145.52.23.6。

具體步驟:

配置裝置的接口位址和靜态路由,實作網絡互通。

配置PAT,實作公司内部能夠通路Internet。

(1)内部通路控制清單

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

   合法位址池的名字是t220,合法位址的範圍是145.52.23.3-145.52.23.6,子網路遮罩是255.255.255.0。

    (3)設定複用動态IP位址轉換

   在全局配置模式中,設定在内部局部位址與内部全局位址之間建立動态位址轉換。

   (4)在内部和外部端口上啟用NAT

   使用debugip nat指令顯示出每個轉換的資料包

   (5)在用戶端PC1上通路外網10.0.0.2,可以通信了。

   在路由器上也能看到位址之間的轉換。

   (6)在用戶端PC2上通路外網10.0.0.2,也可以通信了。

   在路由器上也可以看到位址之間的轉換。

配置靜态NAT,使外網可以通路公司的伺服器。

在内部局部位址和内部全局位址之間建立靜态位址轉換

R1(config)# ip nat inside source static tcp 192.168.2.2 80 145.52.2.7 80 extendable

R1(config)# ip nat inside source static tcp 192.168.2.3 23 145.52.2.7 23 extendable

   (2)在内部和外部端口上啟用NAT

   (3)在外網PC機Internet上使用telnet指令通路公司内部Telnet服務192.168.2.3。

   (4)在外網PC機Internet上使用telnet指令通路公司内部Web服務192.168.2.2。

繼續閱讀