双向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)

本文出自 Frank's Blog

版权声明:


本文链接:双向NAT
版权声明:本文为原创文章,仅代表个人观点,版权归 Frank Zhao 所有,转载时请注明本文出处及文章链接
你可以留言,或者trackback 从你的网站

No Responses to “双向NAT”

  1. rchsjob说道:

    楼主的例子应该讲的是Overlapping NAT,您提的那个问题如果不加add-route也不加路由,因为没有拓扑,我猜是因为outside local地址inside local地址同一网段,NAT路由器没有做NAT直接查路由(你得出的规律),就直接从入接口回复报文。(如有错误,请指正)

  2. rchsjob说道:

    最近一直在学习NAT,望楼主多写几篇NAT的文章

  3. frank说道:

    这篇内容其实是我1年前总结的,当时一直没整理,现在刚整理到blog里,其实那个问题的正确答案我也忘记了,昨天晚上又做了下测试,没有找到特别detail的解释,你这种解释也算对吧。最近没有碰到NAT的问题,所以也没有太多相关文章,你可以去别的地方逛一逛。

留言哦

blonde teen swallows load.xxx videos