NAT技術詳解及配置實例
2007年02月26日 22:17:00
閱讀數:28241
NAT作為一種減輕IPv4地址空間耗盡速度的方法,最早出現在Cisco IOS 11.2版本中。
為什么要使用NAT
1 內網中主機過多,沒有足夠的合法IP地址可用。
2 當ISP發生變化時,使用NAT技術避免了IP地址的重新編址。
3 當兩個合並的網絡中出現了重復地址的時候。
4 利用NAT來解決TCP的負載均衡問題。
5 隱藏內部網絡,增強安全性。
NAT就是將內網中使用的私有地址轉換成可在Internet上進行路由的合法地址的技術。
私有地址范圍:
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172..31.255.255
192.168.0.0 ~ 192.168.255.255
NAT技術主要分為NAT和PAT。
NAT是從內部本地地址到內部全局地址的一對一轉換。
PAT是從多個內部本地地址到內部全局地址的多對一轉換。通過端口號確定其多個內部主機的唯一性。
NAT術語
Inside network:需要翻譯成外部地址的內部網絡。
Outside network:使用合法地址進行通信的外部網絡。
Local address:內部網絡使用的地址。
Global address:外部網絡使用的地址。
Inside local address:內部本地地址。數據在內部網絡使用的地址,一般為private ip address。
Inside global address:內部全局地址。數據為了到達外部網絡,用來代表inside local address的地址,一般為ISP提供的合法地址。
Outside local address:外部本地地址,不必是合法地址。當外部網絡數據到達內部網絡,外部網絡中的主機IP地址與內部網絡中的主機處在同一網段時,為防止內部主機誤認外部主機與自己在同一網段而廣播ARP請求,造成無法通信,將外部主機的地址轉換成外部本地地址之后再與內部主機進行通信。
Outside global address:數據在外部網絡使用的地址,是個合法地址。
Simple translation entry:把一個IP地址映射到另外一個地址上的一對一的翻譯方式。
Extended translation entry:把IP地址和端口(port)的組合翻譯成另外一個地址和端口的組合。
Static address translation:靜態地址翻譯,把一個local對應到一個global上去。
Dynamic address translation:動態翻譯,local和global池(pool)建立動態對應關系。
Port address translation(PAT):通過使用地址和端口的結合來達到多個local對應一個global的狀態。端口號用來確定每個local的唯一性。這樣的技術也叫超載(overloading)。
NAT的優缺點
優點:
1 極大的節省了合法的IP地址。
2 能夠處理地址重復情況,避免了地址的重新編號,增加了編址的靈活性。
3 隱藏了內部網絡地址,增強了安全性。
4 可以使多個使用TCP負載特性的服務器之間實現基本的數據包負載均衡。
缺點:
1 由於NAT要在邊界路由器上進行地址的轉換,增大了傳輸的延遲。
2 由於NAT改動了IP地址,失去了跟蹤端到端IP流量的能力。當出現惡意流量時,會使故障排除和流量跟蹤變的更加棘手。
3 不支持一些特定的應用程序。如早期版本的MSN。
4 增大了資源開銷。處理NAT進程增加了CPU的負荷,並需要更多內存來存儲NAT表項。
配置NAT
inside & outside
每個包含了NAT進程的接口必須被指定為內部接口或外部接口,但不能被同時指定為這兩個接口。在路由器上,必須至少有一個接口被配置成內部接口,一個接口被配置成外部接口。這樣路由器就知道怎樣在接口上處理入站和出站流量了。
D-Lab(config)#int e0 //進入接口模式
D-Lab(config-if)#ip nat inside //指定inside接口出站
D-Lab(config-if)#int s0
D-Lab(config-if)#ip nat outside //指定outside接口入站
靜態NAT
inside|outside local和inside|outside global的一對一映射
D-Lab(config)#ip nat {inside|outside} source static <inside local> < inside global>
這樣就在NAT表中創建了一個永久表項。
配置示例:
D-Lab#config t
D-Lab(config)#int e0
D-Lab(config-if)#ip nat inside
D-Lab(config-if)#int s0
D-Lab(config-if)#ip nat outside
D-Lab(config)#ip nat inside source static 192.168.1.1 210.83.202.1
D-Lab(config)#ip nat outside source static 210.83.202.2 192.168.2.3
靜態PAT
D-Lab(config)#ip nat {inside|outside} source static <protocol> <inside local> < port> < inside global> < port>
配置示例:
D-Lab(config)#ip nat inside source static tcp 10.1.1.1 80 214.118.21.121 80
動態NAT
動態NAT用來將inside local快速映射到inside global上。這些inside local放在可用的IP地址池中。同樣,必須給參與NAT進程的路由器接口分配IP地址。
當內部網絡主機要與Internet上的主機進行通信時,NAT邊界路由器會從標記為“NAT內部”的接口接收數據包。
D-Lab(config)#ip nat pool <pool-name> <start-ip> <end-ip> netmask xxxx
D-Lab(config)#ip nat pool <pool-name> <start-ip> <end-ip> prefix-length xx //掩碼長度
例:
D-Lab(config)#ip nat pool dyn-nat-pool 211.10.121.1 211.10.121.254 netmask 255.255.255.0
D-Lab(config)#ip nat pool dyn-nat-pool 211.10.121.1 211.10.121.254 prefix-length 24
配置示例:
D-Lab(config)#inter e0
D-Lab(config-if)#ip add 192.168.1.1 255.255.255.0
D-Lab(config-if)#ip nat inside //指定內部接口
D-Lab(config-if)#inter s0
D-Lab(config-if)#ip add 210.83.202.1 255.255.255.192
D-Lab(config-if)#ip nat outside //指定外部接口
D-Lab(config-if)#exit
D-Lab(config)#access-list 1 permit 192.168.1.0 0.0.0.255 //標記inside local范圍
D-Lab(config)#ip nat pool in-out210.83.202.2 210.83.202.8 prefix 24 //設置inside global地址池
!
D-Lab(config)#ip nat inside source list 1 pool in-out //啟用inside源地址翻譯,把標記的inside local范圍與inside global池關聯起來
動態PAT(多對一映射)
路由器為每個轉換表項添加第四層協議和端口信息
D-Lab(config)#ip nat inside source list 1 pool in-out overload
如果不知道出站IP地址,可在命令中指定出站接口
D-Lab(config)#ip nat inside source list 1 e0 overload
//如果接口shut或者接口沒有設置IP地址的話,NAT不會生效
配置實例:
D-Lab(config)#inter e0
D-Lab(config-if)#ip add 192.168.1.1 255.255.255.0
D-Lab(config-if)#ip nat inside
D-Lab(config)#inter s0
D-Lab(config-if)#ip add 210.83.202.1 255.255.255.192
D-Lab(config-if)#ip nat outside
!
!
!
D-Lab(config)#ip nat pool test210.83.202.2 210.83.202.8 prefix 24
!
D-Lab(config)#ip nat inside source list 9 pool test overload
D-Lab(config)#access-list 9 permit 192.168.1.0 0.0.0.255
為重復地址配置NAT
D-Lab(config)#ip nat pool in-out211.121.1.1 211.121.1.254 prefix-length 24 //設置local global池
D-Lab(config)#ip nat pool out-in10.1.2.1 10.1.2.254 prefix-length 24 //設置outside local池
D-Lab(config)#ip nat inside source list 1 pool in-out //啟用inside源地址翻譯,把標記的inside local范圍與inside global池關聯起來
D-Lab(config)#ip nat inside source list 1 pool out-in //將在標記的inside local范圍里的outside global轉換成outside local池里的地址
D-Lab(config)#int fa0/0
D-Lab(config-if)#ip nat inside //指定出站接口
D-Lab(config-if)#int s1/1
D-Lab(config-if)#ip nat outside //指定入站接口
D-Lab(config-if)#exit
D-Lab(config)#access-list 1 permit 10.1.1.0 0.0.0.255 //標記inside local地址范圍
更靈活的地址池的配置:
ip nat pool <name> { netmask <mask> | prefix-length <length> } [ type { rotary } ]
這樣可以允許定義不連續地址池,接下來定義地址空間:
address <start> <end>
例:
D-Lab(config)#ip nat pool D-lab prefix-length 24
D-Lab(config-ipnat-pool)#address 11.69.73.12 11.69.73.14
D-Lab(config-ipnat-pool)#address 11.69.73.18 11.69.73.244
這樣就定義了一個11.69.73.12 ~ 11.69.73.14和11.69.73.18~11.69.73.244的地址池
NAT關聯routemap的配置:
ip nat inside source route-map <name> pool <name>
例:
ip nat pool d-1 173.26.232.1 173.26.232.254 prefix-length 24
ip nat pool d-2 24.10.12.1 24.10.12.254 prefix-length 24
ip nat inside source route-map d1-map pool d-1
ip nat inside source route-map d2-map pool d-2
!
interface Serial0/0
ip nat outside
!
interface Serial0/1
ip nat outside
!
route-map d1-map permit 10
match ip address 1
match interface Serial0/0
!
route-map d2-map permit 10
match ip address 1
match interface Serial0/1
配置NAT超時設置:
ip nat translation timeout <seconds> //特權模式下
NAT配置的驗證和故障排除
sh ip nat translations //查看生效的NAT表項
sh ip nat translations verbose //查看生效的NAT表項的詳細信息
sh ip nat statistics //顯示NAT的統計數字和配置信息
clear ip nat translation * //清除所有NAT表項
clear ip nat translation inside <global-ip> //清除指定的內部NAT表項 :
clear ip nat translation <protocol> <global-ip> <local-ip> <global-port> <local-port> //清除指定的NAT表項
debug ip nat [ <list> ] [ detailed ] //調試NAT進程