某客户要求本地主机A(10.1.1.1)新增访问需求,原主机A在边界路由器将地址转换为A1(23.1.1.30)后访问外联单位的主机B(1.1.1.1),现新增加一个系统C(3.3.3.3),需要将地址转换为A2(23.1.1.31)去访问。如下图所示网络结构,R3模拟外联单位路由器,R4模拟互联网;
简单来说就是一个策略NAT:
A(10.1.1.1)-》B(1.1.1.1)将A地址转换为23.1.1.30
A(10.1.1.1)-》B(3.3.3.3)将A地址转换为23.1.1.31
首先定义匹配策略,需要定义源和目的,使用扩展访问控制列表:
ip access-listextended nat30
permit ip host 10.1.1.1 host 1.1.1.1
ip access-listextended nat31
permit ip host 10.1.1.1 host 3.3.3.3
然后定义route-map:
route-map nat30permit 10
match ip address nat30
route-map nat31permit 10
match ip address nat31
最后定义nat:
ip nat insidesource static 10.1.1.1 23.1.1.30 route-map nat30
ip nat insidesource static 10.1.1.1 23.1.1.31 route-map nat31
然后进行测试,竟然不通!!!
然后进行测试,竟然不通!!!
然后进行测试,竟然不通!!!
由于是生产环境,无法抓包,无法debug….
自己检查了几遍IP地址、调用的策略名等没有任何问题,命令放入IOS同版本的模拟器去执行,测试无问题!
Show ip access 检查匹配项,竟然无匹配,说明问题出在匹配上,继续检查acl、IP地址等等等等……
开始怀疑其它nat转换影响了该策略转换,发现现网配置里有这么一条:
ip nat pool nat100 23.1.1.100 23.1.1.100 netmask255.255.255.255
access-list 110permit ip host 10.1.1.1 any
ip nat insidesource list 110 pool nat100 overload
也就是说本网段访问其它地址时会被转换成23.1.1.100的PAT,在直觉中,策略的静态一对一转换转换应该会优于PAT吧。。。
但是在access-list 110中插入deny iphost 10.1.1.1 host 1.1.1.1和deny ip host 10.1.1.1 host 3.3.3.3后测试,没有任何问题!
难道是PAT优先静态转换?
找到问题所在就好,测试了另外一种转换方式也可以实现:
ip nat pool nat3023.1.1.30 23.1.1.30 netmask 255.255.255.0
ip nat pool nat3123.1.1.31 23.1.1.31 netmask 255.255.255.0
access-list 130permit ip host 10.1.1.1 host 23.1.1.30
access-list 131permit ip host 10.1.1.1 host 23.1.1.31
ip nat insidesource list 130 pool nat30 overload
ip nat insidesource list 131 pool nat31 overload
看来都是pat,大家级别一样了,就最小匹配啦!
那么留给大家的问题是,这两种实现方式在实际应用中有什么区别呢?
使用静态route-map的转换方式,可以用于对端需要主动发起访问的情况,这样当对端1.1.1.1或3.3.3.3可以主动访问23.1.1.30或23.1.1.31。