双向NAT
Topology
11.11.11.11
+---+
|PC1|
+-+-+
|
11.11.11.1
+--+---+ +------+
| +-------------+ R1 |
|2811-01 2.1/30 |2811 |
+------+ +---+--+
192.168.2.2/30 |26.26.26.1/24
|
ISP 路由可达即可
|
+-+-+
|PC2|
+---+
22.22.22.22
下面是R1的设备配置信息
interface Serial1/0 ip address 192.168.2.1 255.255.255.0 ip nat inside ! interface Serial1/1 ip address 26.26.26.1 255.255.255.0 ip nat outside ! ip route 11.11.11.11 255.255.255.255 Serial1/0 ip route 66.66.66.66 255.255.255.255 Serial1/1 ! ip nat inside source static 11.11.11.11 33.33.33.33 !---从inside到outside转换源地址,从outside到inside转换目的地址 ip nat outside source static 22.22.22.22 66.66.66.66 !---从inside到outside转换目的地址,从outside到inside转换源地址 Router#sh ip nat translations Pro Inside global Inside local Outside local Outside global --- --- --- 66.66.66.66 22.22.22.22 --- 33.33.33.33 11.11.11.11 --- ---
经过测试,得出两条规律:
[1. 当inside到outside,先查找路由,如果出口时从outside口出去的,就进行转化。
2. 当outside到inside,先转化后路由。]
inside和outside方向问题
当配置“ip nat inside source”时,从inside到outside转换源,从outside到inside转换目的。因为从outside出包的目的地址就是outside入方向的源地址,这个很容易理解;当配置“ip nat outside source”时,这种需求主要是想让内网用户访问外网时感觉跟访问内网一样。所以配置完后,直接用“show ip nat tr” 对着表看就可以了,如下(跟上面topology没关系):
ip nat outside source static 5.5.5.5 192.168.1.200 add-route
#sh ip nat tr
Pro Inside global Inside local Outside local Outside global
--- --- --- 192.168.1.200 5.5.5.5
icmp 192.168.1.3:16 192.168.1.3:16 192.168.1.200:16 5.5.5.5:16
S 192.168.1.200/32 [1/0] via 5.5.5.5
1. 加add-route后自动生成静态路由信息,也可以手动加条静态,但必须指向outside。
2. 只有outside转换才有add-route。内网是192的网段,外网是5.5,所以通过outside 把目的1.200转换成了5.5。回来的数据包直接把源地址5.5转换成了1.200。
3. 注意不管是上面说的inside转换还是outside转换,只要从inside进来,就需要先找路由,确认是从outside出,才进行转换。只要从outside进来,就需要先转换,然后再去确认路由。
4.提个小问题:如果不加add-route也不加路由,会发现在内网也能ping通,但是你会发现这个回包不是外网发的,而是做NAT这台路由器发的,why?
2012-11-10 更新:
注意这里面的inside和outside不代表流量的方向,最近同事做了一个测试,需求比较特殊,从这个测试中更能体会这点。需求是想用一台router模拟webserver,测试81-85端口,但是router开启http服务只能开1023以后的端口,81-85都不能开,只能默认80,这时就需要用到nat,为了达成目的,用下面这种方式:
http client——–network———-(e1/0)webserver
webserver的e1/0是outside口,环回口是inside,使得client访问环回口时用的端口是81,但到了webserver后用“ip nat inside source x.x.x.x 81 x.x.x.x 8001”给转换了,这里按照之前总结的,从outside进来,先转换再路由,所以先转成8001,然后访问环回口的8001 http,这样就达到要求了。
所以不要用inside和outside来判断流量的方向。他只是一个标识。
相关文档信息:
Category:NAT “Network Address Translation (NAT)” Wiki
NAT Configuration Guide, Cisco IOS XE Release 3S
End-of-Sale and End-of-Life Announcement for the Cisco IOS Stateful Failover of Network Address Translation (SNAT)
楼主的例子应该讲的是Overlapping NAT,您提的那个问题如果不加add-route也不加路由,因为没有拓扑,我猜是因为outside local地址inside local地址同一网段,NAT路由器没有做NAT直接查路由(你得出的规律),就直接从入接口回复报文。(如有错误,请指正)
最近一直在学习NAT,望楼主多写几篇NAT的文章
这篇内容其实是我1年前总结的,当时一直没整理,现在刚整理到blog里,其实那个问题的正确答案我也忘记了,昨天晚上又做了下测试,没有找到特别detail的解释,你这种解释也算对吧。最近没有碰到NAT的问题,所以也没有太多相关文章,你可以去别的地方逛一逛。