思科路由器的双向NAT

目的:通过双向NAT来更深的理解NAT在思科IOS中的数据包处理顺序

前提:在真实环境中不会出现


环境:思科路由器的双向NAT

将R1和R3模拟成PC,在不加网关的情况下,使两者能够正常通信。

定义R2的f0/0为ip nat inside;f1/0为ip nat outside。


我先贴出思科IOS的数据包处理的顺序

可以看到在不同方向上的NAT是有区别的:1、inside source static是要先路由,然后才能NAT

                                     2、outside source static是要先NAT,然后才路由

我们先来配置R2:

思科路由器的双向NAT

当R1的数据从inside去往outside的时候会首先检查路由表,然后查看NAT条目,转换成172.16.1.101这个ip地址

试想一下,如果要访问R3的ip地址:172.16.1.1肯定要找网关,因为没有网关,所以,我们将172.16.1.1这个ip地址转换成192.168.1.101,这时候R1区访问的就不是172.16.1.1而是192.168.1.101

思科路由器的双向NAT

这时候我们看看arp缓存表

思科路由器的双向NAT

如果是在juniper或者check point防火墙上就需要配置proxy-arp,手动添加ARP条目

这时候让R1如访问192.168.1.101,因为要从R2的接口上获取到了ARP条目,所以将源:192.168.1.1目的:192.168.1.101的数据包丢给了R2的f0/0,R2会首先查看是否有到192.168.1.101的路由,但是因为有一条直连路由192.168.1.0直连在f0/0上的,R2会认为这是“无理取闹”的数据丢弃。因为丢弃了所以不进行下一步将192.168.1.1转换成172.16.1.101;将192.168.1.101转换成172.16.1.1。

思科路由器的双向NAT

可以看到R2的f0/0因为有ARP条目回应了R1但是却没有将数据转换,没有让telnet通过

思科路由器的双向NAT

正好我们来看看R3访问172.16.1.101的时候是不是先进行NAT转换的

思科路由器的双向NAT

思科路由器的双向NAT

可以看到172.16.1.1访问172.16.1.101的时候转换成192.168.1.101,之后172.16.1.101转换成了192.168.1.1,同时R2也将该数据包转发给了R1,但是因为R1回数据的时候没有路由,也不能进行转换,所以回话没有成立。

思科路由器的双向NAT

所以,让回话没有成立的根源就在于,R2上没有没有到192.168.1.101的路由,那么我们在R2上添加192.168.1.101的路由,下一跳从f1/0转发出去。

思科路由器的双向NAT

这时候我们再从R1发送数据到192.168.1.101

思科路由器的双向NAT

可以看到收到了192.168.1.101的回包,并且成功telnet

再看看R2上的转换

思科路由器的双向NAT

192.168.1.1去访问192.168.1.101,R2看到有路由是通往f1/0的,然后查看NAT条目

思科路由器的双向NAT



192.168.1.1转换成172.16.1.101,然后目的192.168.1.101转换成172.16.1.1,就变成了源地址:172.16.1.101,目的地址:172.16.1.1,接着从f1/0转发出去。

思科路由器的双向NAT

172.16.1.1收到了包,看到源地址是:172.16.1.101,然后回包给172.16.1.101,转换成192.168.1.101,再将172.16.1.101转换成192.168.1.1,就变成了源地址:192.168.1.101,目的地址:192.168.1.1,然后从f0/0转发出去。

思科路由器的双向NAT