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

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


环境:思科路由器的双向NAT_第1张图片

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

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


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

NAT Overview

In this table, when NAT performs the global to local, or local to global, translation is different in each flow.

Inside-to-Outside

Outside-to-Inside

If IPSec then check input access list

If IPSec then check input access list

decryption - for CET (Cisco Encryption Technology) or IPSec

decryption - for CET or IPSec

check input access list

check input access list

check input rate limits

check input rate limits

input accounting

input accounting

redirect to web cache

redirect to web cache

policy routing

NAT outside to inside (global to local translation)

routing

policy routing

NAT inside to outside (local to global translation)

routing

crypto (check map and mark for encryption)

crypto (check map and mark for encryption)

check output access list

check output access list

inspect (Context-based Access Control (CBAC))

inspect CBAC

TCP intercept

TCP intercept

encryption

encryption

Queueing

Queueing

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

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

我们先来配置R2:

当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

wKioL1bjgLKx_OqSAAANGdYJ_H4366.png

这时候我们看看arp缓存表

思科路由器的双向NAT_第2张图片

如果是在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_第3张图片

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

思科路由器的双向NAT_第4张图片

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

思科路由器的双向NAT_第5张图片

思科路由器的双向NAT_第6张图片

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

思科路由器的双向NAT_第7张图片

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

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

思科路由器的双向NAT_第8张图片

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

再看看R2上的转换

思科路由器的双向NAT_第9张图片

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

wKioL1bjh6LAiO5bAAAdZZd16S4222.png



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_第10张图片

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_第11张图片