有关NAT和路由之间的先后顺序

    昨天在模拟器复习NAT实验,对NAT时候要设置默认路由的关系去搜了一下,结果搜到一篇讲NAT和路由先后顺序的实验:http://raulkang.blog.51cto.com/210239/106508  ,看了之后更糊涂了。而且觉得没有必要搞那么复杂的实验,自己用两个路由器实验看看。一开始,在后端的路由器上debug ip pack发现开了nat,收到的包源IP就是nat转换后的IP;关掉NAT,收到的包源IP是未转换的IP。这样看起来,感觉应该是NAT优先级更高。但是,很多帖子(https://learningnetwork.cisco.com/message/55778)讲思科官方文档是先路由后NAT,很不明白。

 

    直到找到这篇:http://hi.baidu.com/gotoccie/blog/item/2064600634fa8d7b020881b8.html,看完就很明白了。

    在自己的拓扑中,从inside的pc上ping单个包测试, 前端配置了NAT的路由器上,debug ip pack, debug ip nat 输出:

 

*Mar  1 01:28:32.728: IP: tableid=0, s=172.16.8.5 (Ethernet0/0), d=63.19.6.1 (Ethernet1/0), routed via FIB

   先查FIB确定出口

*Mar  1 01:28:32.728: NAT: s=172.16.8.5->200.1.8.7, d=63.19.6.1 [37411]

   可以理解为在去出口的路上,发现配置了NAT,把源IP替换掉

*Mar  1 01:28:32.728: IP: s=200.1.8.7 (Ethernet0/0), d=63.19.6.1 (Ethernet1/0), g=200.1.8.8, len 48, forward

   替换源IP后,继续转发包

*Mar  1 01:28:32.732: NAT*: s=63.19.6.1, d=200.1.8.7->172.16.8.5 [37411]

   返回的应答包,目的IP替换回当初发送时对应的源IP

   然后再查路由表转发,因为这里ping的机器是直连,所以没有这步

 

   在后端路由器上 debug ip pack的输出:

 

*Mar  1 01:28:32.928: IP: tableid=0, s=200.1.8.7 (Ethernet1/0), d=63.19.6.1 (Ethernet0/0), routed via RIB

*Mar  1 01:28:32.933: IP: s=200.1.8.7 (Ethernet1/0), d=63.19.6.1, len 48, rcvd 4

   收到ping包

*Mar  1 01:28:32.933: IP: tableid=0, s=63.19.6.1 (local), d=200.1.8.7 (Ethernet1/0), routed via FIB

*Mar  1 01:28:32.937: IP: s=63.19.6.1 (local), d=200.1.8.7 (Ethernet1/0), len 48, sending

   应答ping包

 

先查路由表确定出口,因为目的地址是确定的并且直接决定出口。找到出口后,如果有NAT就替换源IP,如果没有NAT就不替换。所以,之前看到的开NAT就替换不开NAT就不替换,并不是NAT优先级更高,而是NAT处于路由转发之后,更接近出口的缘故。

 

这是NAT从内向外,先查路由再NAT的顺序。从外向内的方向,顺序相反。因为从外向内的包,如果不先NAT把目的IP替换为内部IP的话,是不可能在路由表中查到对应转发规则的。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值