一、 组网:
图 组网图
组网如图所示,PC可以通过10.110.193.2地址访问8.8.240.100服务器。
1. Router1的配置
#
interface GigabitEthernet0/0
port link-mode route
ip address 10.111.16.141 255.255.255.252
#
interface GigabitEthernet0/1
port link-mode route
ip address 10.111.16.133 255.255.255.252
nat static enable
#
ip route-static 0.0.0.0 0 10.111.16.142 preference 255
ip route-static 10.24.65.0 24 10.111.16.134
#
nat static outbound 8.8.240.100 10.110.193.2
#
return
2. Router2的配置
#
interface GigabitEthernet0/0
port link-mode route
ip address 10.111.16.142 255.255.255.252
#
interface GigabitEthernet0/1
port link-mode route
ip address 10.111.16.137 255.255.255.252
nat static enable
#
interface GigabitEthernet0/2
port link-mode route
ip address 8.8.252.34 255.255.255.252
nat outbound
#
ip route-static 0.0.0.0 0 8.8.252.33
ip route-static 0.0.0.0 0 10.111.16.141 preference 255
ip route-static 10.24.65.0 24 10.111.16.138
#
nat static outbound 8.8.240.100 10.110.193.2
#
return
3. Switch的配置
#
interface GigabitEthernet0/0
port link-mode route
ip address 10.24.65.1 255.255.255.0
#
interface GigabitEthernet0/1
port link-mode route
ip address 10.111.16.134 255.255.255.252
#
interface GigabitEthernet0/2
port link-mode route
ip address 10.111.16.138 255.255.255.252
#
ip route-static 0.0.0.0 0 10.111.16.133
ip route-static 0.0.0.0 0 10.111.16.137 preference 255
#
return
二、 问题描述:
PC通过10.110.193.2地址访问8.8.240.100服务器时收到的响应源地址为8.8.240.100而不是10.110.193.2。
Ping 10.110.193.2 (10.110.193.2): 56 data bytes, press CTRL_C to break
56 bytes from 8.8.240.100: icmp_seq=0 ttl=61 time=1 ms
56 bytes from 8.8.240.100: icmp_seq=1 ttl=61 time=1 ms
56 bytes from 8.8.240.100: icmp_seq=2 ttl=61 time=1 ms
56 bytes from 8.8.240.100: icmp_seq=3 ttl=61 time=1 ms
--- Ping statistics for 10.110.193.2 ---
4 packet(s) transmitted, 4 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 1/1/1/0 ms
三、 过程分析:
使用抓包排查方法,观察网络中各处的数据包转发过程中的地址转换情况。
可以看到首先从PC发出了一个源地址为10.24.65.25、目的地址为10.110.193.2的ICMP Echo Request数据包。Switch收到该ICMP Echo Request数据包之后查询路由表,从GigabitEthernet0/1接口将该ICMP Echo Request数据包转发给Router1。
由于Router1的GigabitEthernet0/1接口配置了nat static outbound 8.8.240.100 10.110.193.2静态地址转换,会将进入该接口的数据包目的地址从10.110.193.2转换为8.8.240.100,并生成一个静态NAT会话表项,然后查询路由表,将该数据包从GigabitEthernet0/0接口转发给Router2。
Router2收到该ICMP Echo Request数据包之后查询路由表,出接口是GigabitEthernet0/2,由于该接口上配置了nat outbound,所以会在转发该数据包的同时将源地址转换为8.8.252.34,并生成一个动态NAT会话表项。
服务器8.8.240.100收到该ICMP Echo Request之后,以源地址为8.8.240.100、目的地址为8.8.252.34的ICMP Echo Reply数据包响应PC。
Router2收到该ICMP Echo Reply数据包之后检查NAT会话表,该数据包能够匹配刚刚建立的动态NAT会话表项,所以会将目的地址转换为10.24.65.25,查询路由表发现该数据包应该从GigabitEthernet0/1接口转发出去,由于GigabitEthernet0/1接口上配置了nat static outbound 8.8.240.100 10.110.193.2静态地址转换,所以数据包从该接口转发出去的同时应该将数据包的源地址转换为10.110.193.2,并生成一个静态NAT会话表项,但是并没有触发生成该静态NAT会话表项,也没有将源地址转换为10.110.193.2。
*Jan 1 00:09:19:303 2011 H3C IPFW/7/IPFW_PACKET:
Receiving, interface = GigabitEthernet0/1
version = 4, headlen = 20, tos = 0
pktlen = 84, pktid = 36, offset = 0, ttl = 253, protocol = 1
checksum = 31207, s = 8.8.240.100, d = 10.24.65.25
channelID = 0, vpn-InstanceIn = 0, vpn-InstanceOut = 0.
prompt: Receiving IP packet from interface GigabitEthernet0/1.
Payload: ICMP
type = 0, code = 0, checksum = 0x1efe.
*Jan 1 00:09:19:303 2011 H3C NAT/7/ERROR: Can't get session of static.
经过debug分析,可以发现在Router2上面该ICMP Echo Reply数据包从GigabitEthernet0/1接口转发的时候走的是纯IP转发,没有任何NAT事件发生,首先怀疑是由于存在不能进行两次地址转换的限制导致的,然后在Router2和Switch之间增加一台路由器Router3,并取消Router2上的GigabitEthernet0/1接口上的nat static enable,将该静态地址转换配置在Router3上的与Switch互联的接口上。
实验结果表明,ICMP Echo Reply数据包在Router3上面仍然不能触发生成静态NAT会话表项,也不能将源地址转换为10.110.193.2,这说明并不是由于存在不能进行两次地址转换的限制导致的。
*Jan 1 00:10:04:204 2011 H3C IPFW/7/IPFW_PACKET:
Receiving, interface = GigabitEthernet0/1
version = 4, headlen = 20, tos = 0
pktlen = 84, pktid = 7, offset = 0, ttl = 255, protocol = 1
checksum = 30724, s = 8.8.240.100, d = 10.24.65.25
channelID = 0, vpn-InstanceIn = 0, vpn-InstanceOut = 0.
prompt: Receiving IP packet from interface GigabitEthernet0/1.
Payload: ICMP
type = 8, code = 0, checksum = 0x08c7.
*Jan 1 00:10:04:204 2011 H3C NAT/7/COMMON:
PACKET: (GigabitEthernet0/0-out) Protocol: ICMP
8.8.240.100: 0 - 10.24.65.25: 0(VPN: 0) ------>
10.110.193.2: 0 - 10.24.65.25: 0(VPN: 0)
*Jan 1 00:10:04:204 2011 H3C IPFW/7/IPFW_PACKET:
Sending, interface = GigabitEthernet0/0
version = 4, headlen = 20, tos = 0
pktlen = 84, pktid = 7, offset = 0, ttl = 254, protocol = 1
checksum = 42496, s = 10.110.193.2, d = 10.24.65.25
channelID = 0, vpn-InstanceIn = 0, vpn-InstanceOut = 0.
prompt: Sending IP packet received from interface GigabitEthernet0/1 at interface GigabitEthernet0/0.
Payload: ICMP
type = 8, code = 0, checksum = 0x08c7.
此时在Router2上面使用ping -a 8.8.240.100 10.24.65.25命令直接发送ICMP Echo Request数据包,在Router3上面可以触发生成静态NAT会话表项,并且可以将源地址转换为10.110.193.2。
在Router3上面查看静态NAT会话表项的时候注意到会话状态为ICMP_REQUEST,而在Router2上面的动态NAT会话表项的会话状态为ICMP_REPLY,说明ICMP的NAT会话表项的建立过程需要经历从ICMP_REQUEST到ICMP_REPLY的会话状态迁移,所以只有ICMP Echo Request才能触发生成NAT会话表项。
根据以前的经验回忆起V5平台的静态NAT会话表项没有会话状态,又尝试了一下V5平台的路由器,发现在V5平台上面ICMP Echo Reply确实可以触发生成静态NAT会话表项。
四、 解决方法:
在V7平台上应该确保数据包经过有NAT配置的网络时往返路径保持一致。
该案例暂时没有网友评论
✖
案例意见反馈
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作