1. 程式人生 > >淺談網絡地址轉換(NAT)

淺談網絡地址轉換(NAT)

如果 啟用 at命令 不足 服務 lis 要求 outer 故障

隨著網絡的發展,公網IP地址的需求與日俱增。為了緩解公網IP地址的不足,並且保護公司內部服務器的私網地址,可以使用NAT(網絡地址轉換)技術將私網地址轉化成公網地址,以緩解IP地址的不足,並且隱藏內部服務器的私網地址。
NAT通過將內部服務器的私網IP地址轉換成全球唯一的公網IP地址,是內部網絡可以連接到互聯網等外部網絡上。
NAT的實現方式有三種:
靜態NAT(static translation)
動態轉換(dynamic translation)
PAT(port-base address translation,基於端口的地址轉換)
其中常用到的是靜態轉換和PAT,動態轉換不太實用。因為動態轉換的話,我們擁有的公網IP地址要和局域網要上網的ip地址一樣多。這是不現實的。所以這裏就不說動態ip了。
靜態轉換是一對一(一個公網IP地址對應一個私網IP地址)、一對多(一個公網IP地址對應多個私網IP地址)的轉換,主要是用於我們內部需要讓外網客戶訪問的服務器會做靜態轉換,簡單的靜態轉換只能一對一,可以通過NAT端口映射來實現一對多的轉換。
一對一轉換的實現過程如下:
Router(config)#ip nat inside source static 192.168.1.1 20.0.0.2 #將內網ip地址192.168.1.1在與外網通信時轉換為20.0.0.2

Router(config)#in f0/0 #進入內部網絡的接口
Router(config-if)#ip nat inside #在內部網絡的端口啟用NAT

Router(config-if)#in f0/1 #進入連接外部網絡的端口
Router(config-if)#ip nat outside #在連接外部網絡的端口啟動NAT(註意:和在內部網絡的接口啟用NAT的命令字有差別

經過以上配置,靜態轉換(一對一)就生效了。

接下來我們使用NAT端口映射,實現靜態轉換的一對多轉換(跟一對一的轉換差別不大,只是多定義了下端口號)。命令如下:

Router(config)#ip nat inside source static tcp 192.168.1.1 80 20.0.0.2 80 extendable #將內網ip地址為192.168.1.1的web服務器在與外網通信時轉換為20.0.0.2

Router(config)#ip nat inside source static tcp 192.168.1.2 25 20.0.0.2 25 extendable #將內網ip地址為192.168.1.2的SMTP服務器在與外網通信時轉換為20.0.0.2

以上兩條配置成功後(同樣需要分別在內部端口和外部端口啟動NAT),當外網用戶訪問web服務器時,路由器會對應NAT轉換條目,並查看端口號,然後把數據包傳送給192.168.1.1的web服務器;當外網用戶訪問SMTP服務器時,路由器同樣會查看NAT轉換條目,並查看端口號,然後把數據包傳送給192.168.1.2的SMTP服務器。這樣就實現了基於NAT端口映射的一對多的靜態轉換。(當然,若有兩臺服務器都是相同服務的話,就不太適用了,如果更改服務默認的端口號,就會不利於用戶的訪問了。)

PAT

PAT可以實現一對多(一個公網IP地址對應多個私網IP地址)、直接復用路由器外部接口地址,兩種實現方式。

一對多的實現命令如下(需要借助ACL控制列表):

Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255 #定義ACL控制列表,允許192.168.1.0/24網段的流量通過。

Router(config)#ip nat pool 123 20.0.0.2 20.0.0.2 netmask 255.0.0.0 #定義合法的公網IP地址池,其中“123”為地址池的名字。可以自行定義。第一段ip為起始ip地址,第二段ip地址為結束ip地址,因為只用一個公網IP,所以起始和結束相同

Router(config)#ip nat inside source list 1 pool 123 overload #overload是啟用端口復用方式,這條命令實現的是:以端口復用方式,將ACL 1 中的局部地址轉換為123地址池中定義的全局IP地址。

接下來分別在內部端口和外部端口啟用NAT即可生效。

直接復用路由器外部接口地址的實現過程如下:

Router(config)#access-list 2 permit 192.168.2.0 0.0.0.255 #定義ACL控制列表,允許192.168.2.0/24網段的流量通過

由於直接使用外部接口地址,因此不用定義IP地址池。

Router(config)#ip nat inside source list 2 in f0/1 overload #在全局配置模式,設置復用動態IP地址轉換,在內部的ACL 2 的地址與路由器上與外網連接的接口合法公網IP地址之間建立地址轉換。

以上就是幾種常用的地址轉換方式。在配置完成後可以在特權模式下執行:Router#debug ip nat命令後,讓內網和外網通信,來查看調試信息,以便驗證地址轉換是否達到了我們所要實現的要求,若要關閉此功能,輸入Router#no debug ip nat 即可。也可執行Router#show ip nat translations來查看轉換條目;執行:Router#clear ip nat translations *刪除除靜態轉換條目以外的所有條目。

NAT的故障排查思路

若遇到NAT故障,基本上可以歸於兩類:配置錯誤和沒有正確理解NAT的工作方式。
一般可以通過Router#i show run來查看配置,以便檢查以下幾個方面是否存在問題:
1、是否設置了ACL,阻塞了進行過NAT或沒有進行過NAT的流量;
2、定義需要進行NAT的ACL是,漏掉了需要進行地址轉換的網絡;
3、在NAT語句中漏掉了overload關鍵字。為了建立PAT,在NAT配置命令的最後,必須使用overload關鍵字,漏掉這個關鍵字,將會導致無法進行PAT,最終將會導致只有數目有限的主機可以訪問公用網或互聯網,而不是期望中的所有主機。
4、不對稱路由導致NAT失敗,就是在外部端口(outside)和內部端口(inside)配置反了;
5、NAT地址池和靜態NAT表項中有重疊地址。要確保NAT地址池中的IP地址也不能用於靜態NAT,這很重要。

淺談網絡地址轉換(NAT)