由于黑洞路由和NAT地址池路由冲突导致NAT业务故障

发布时间:  2012-07-18 浏览次数:  125 下载次数:  0
问题描述
如图所示,作为网关部署在内部网络和Internet的边界处。由于内部网络中的用户配置了私网IP地址,因此需要在上配置NAT功能,对内部网络中的用户访问Internet的报文进行地址转换。网络管理员已经向ISP申请了六个IP地址,范围是117.136.4.7~117.136.4.12,并且在上配置了六个NAT地址池,分别对应这六个IP地址。
由于无法在上行路由器上配置静态路由,因此需要在上将NAT地址池地址的路由通过OSPF向外发布。通过在上配置了六条目的地址为地址池地址的黑洞路由,并引入到OSPF中发布出去,来实现上述需求。
在使用3号地址池(地址为117.136.4.9)进行测试时,发现上可以生成会话表,但内部网络中的用户Internet无法浏览Internet上Web服务器的网页。
告警信息
处理过程
 在上修改黑洞路由的掩码,将32位修改为30位。由于组网方案中申请了六个IP地址,范围为117.136.4.7~117.136.4.12,其中117.136.4.8~117.136.4.11可以归并到一个30位掩码的网段,但地址117.136.4.7和117.136.4.12无法归并,暂时不能使用。
 
根因
  1. 由于会话表可以产生,排除基本转发问题,怀疑对Internet返回的报文处理有误。
  2. 执行display nat address-group命令,查看NAT地址池的配置信息。
<Sysname> display nat address-group
Total   6 address-group(s)
NUM  NAME          START-ADDRESS   END-ADDRESS     VPN-INSTANCE   REF   CPUID
1                     117.136.4.7     117.136.4.7     public         0     6 -1
2                     117.136.4.8     117.136.4.8     public         0     5 -0
3                     117.136.4.9     117.136.4.9     public         1     5 -1
4                     117.136.4.10    117.136.4.10    public         0     6 -0
5                     117.136.4.11    117.136.4.11    public         0     6 -1
6                     117.136.4.12    117.136.4.12    public         0     5 -0
Total   6 address-group(s)


从以上显示信息可以看到,编号为3的地址池与5号槽位ESPU板的从CPU绑定。
  1. 执行display firewall statistic system discard命令,查看系统丢弃报文的统计信息。
<Sysname> display firewall statistic system discard
 Discard statistic information on slot  5 primary   cpu:
  session miss:                                   3
 Discard statistic information on slot  5 secondary cpu:
  unknown frame:                                      30
 Discard statistic information on slot  6 primary   cpu:
  session miss:                                   1
 Discard statistic information on slot  6 secondary cpu:
  unknown frame:                                      30
  session miss:                                   3


从以上显示信息可以看到,除了5号槽位ESPU的从CPU之外,其他CPU都存在因session miss而丢弃报文的统计信息,可能是同一条流的来回报文被送往不同的CPU进行处理,导致报文被丢弃。
  1. 执行debugging ip packet spu discard session-miss acl 3000命令,对因session miss而丢弃的报文进行调试。
<Sysname> system-view
[Sysname] acl 3000
[Sysname-acl-adv-3000] rule permit ip
[Sysname-acl-adv-3000] quit
[Sysname] quit
<Sysname> debugging ip packet spu discard session-miss acl 3000
<Sysname> terminal monitor
<Sysname> terminal debugging
 
 PACKET-TRACER: slot 6-0, vcpu 17:
 59.53.86.5:80 -> 117.136.4.9:2050, protocol: 6, PacketID: 33893
 DROP-PACKET: Session miss. tcp flag: 12
 
 PACKET-TRACER: slot 6-1, vcpu 20:
 61.135.250.176:80 -> 117.136.4.9:2048, protocol: 6, PacketID: 0
 DROP-PACKET: Session miss. tcp flag: 12
 
 PACKET-TRACER: slot 5-0, vcpu 22:
 218.107.55.20:80 -> 117.136.4.9:2053, protocol: 6, PacketID: 0
 DROP-PACKET: Session miss. tcp flag: 12
从以上显示信息可以看到,目的地址为3号地址池地址的SYN+ACK报文(tcp flag为0x12,二进制为010010,表示TCP报文头标识字段的SYN和ACK被置位)被送到了除5号槽位ESPU的从CPU之外的其它CPU,说明对NAT反向报文的选板处理不正确,没有将NAT反向报文发送至3号地址池绑定的CPU上进行处理。
  1. 一般情况下,NAT反向报文选板不正确都和路由有关,执行display current-configuration | include ip route-static命令查看路由表的配置信息。
<Sysname> display current-configuration | include ip route-static
 ip route-static 10.207.4.240 255.255.255.240 10.231.3.1
 ip route-static 10.209.60.6 255.255.255.255 10.231.3.1
 ip route-static 10.209.64.0 255.255.255.0 10.231.3.1
 ip route-static 117.136.4.7 255.255.255.255 NULL0
 ip route-static 117.136.4.8 255.255.255.255 NULL0
 ip route-static 117.136.4.9 255.255.255.255 NULL0
 ip route-static 117.136.4.10 255.255.255.255 NULL0
 ip route-static 117.136.4.11 255.255.255.255 NULL0
 ip route-static 117.136.4.12 255.255.255.255 NULL0


从以上显示信息可以看到,路由表中存在目的地址为地址池地址的黑洞路由,这些32位掩码的黑洞路由与内部生成的NAT地址池路由冲突,导致NAT反向报文因为选板错误而被丢弃。
建议与总结
V100R001版本实现NAT功能时,对于地址池的每一个地址,都会自动生成一条特殊的路由信息,路由信息中包含地址池的地址、ESPU的槽位号、CPU的编号等信息,用来保证NAT业务的来回报文都送到同一个ESPU的CPU上进行处理。
如果无法在上行路由器上配置静态路由,还需要在上将配置的黑洞路由引入OSPF中,通过OSPF发布出去。上行路由器学习到此路由信息,将目的地址为地址池地址的报文发送至。
为了防止配置的黑洞路由和设备内部自动生成的NAT地址池路由冲突,要求黑洞路由不能配置为32位掩码的主机路由。在网络规划时,保证申请的IP地址能归并到某个网段中,这样在配置黑洞路由时就可以配置非32位掩码的网段路由,不会和NAT地址池路由冲突。

END