目的:通过双向NAT来更深的理解NAT在思科IOS中的数据包处理顺序
创新互联成立与2013年,是专业互联网技术服务公司,拥有项目成都网站建设、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元富县做网站,已为上家服务,为富县各地企业和个人服务,联系电话:13518219792
前提:在真实环境中不会出现
环境:
将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
这时候我们看看arp缓存表
如果是在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。
可以看到R2的f0/0因为有ARP条目回应了R1但是却没有将数据转换,没有让telnet通过
正好我们来看看R3访问172.16.1.101的时候是不是先进行NAT转换的
可以看到172.16.1.1访问172.16.1.101的时候转换成192.168.1.101,之后172.16.1.101转换成了192.168.1.1,同时R2也将该数据包转发给了R1,但是因为R1回数据的时候没有路由,也不能进行转换,所以回话没有成立。
所以,让回话没有成立的根源就在于,R2上没有没有到192.168.1.101的路由,那么我们在R2上添加192.168.1.101的路由,下一跳从f1/0转发出去。
这时候我们再从R1发送数据到192.168.1.101
可以看到收到了192.168.1.101的回包,并且成功telnet
再看看R2上的转换
192.168.1.1去访问192.168.1.101,R2看到有路由是通往f1/0的,然后查看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转发出去。
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转发出去。