一、背景介绍

某高速收费站网络拓扑如下图所示:
某高速网络二层通三层不通_第1张图片
每个站点使用不同的IP地址段,站点A是一台三层交换机,站点B通过一台二层交换与站点A相连,且站点A,B的网关位于三层交换机的vlanif接口上,R3,R4通过vlanif出口访问外网。
此时现场新增一个需求:要求R3增加一个172.16.107.0/24网段地址与R4之间能够通过二层通信,且R3上新增的IP地址也能通过网关访问外网

二、需求分析

  1. 首先想到在R3的g/0/1接口上增加一个Secondary地址
    [R3-GigabitEthernet0/0/1]display this 
    [V200R003C00]
    #
    interface GigabitEthernet0/0/1
    ip address 192.168.174.1 255.255.255.0 
    ip address 172.16.107.1 255.255.255.0 sub
    #
    return

    此时R3上的192.168.174.1与172.16.107.1的IP使用相同的MAC地址
    某高速网络二层通三层不通_第2张图片

  2. 由于又要让172.16.107.0/24网段间二层通信,就想到了使用hybrid端口,此时网络配置如下图所示:
    某高速网络二层通三层不通_第3张图片
    配置完后,进行ping测试,结果如下:
    192.168.174.1/24能ping通vlanif174
    172.16.107.1/24能ping通172.16.107.2/24
    172.16.107.1/24不能ping通vlanif107
    172.16.107.2/24能ping通vlanif107
    通过上述结果能发现新增的让172.16.107.1地址二层通信正常,但三层不通

    三、问题定位

    为什么172.16.107.1能ping通172.16.107.2却无法ping通172.16.107.254,这就要从通信过程说起,当用172.16.107.1 ping 172.16.107.254时发生如下:

  3. Ping 172.16.107.254时,根据路由表最长匹配原则,将会使用172.16.107.1 做为源IP地址
  4. 用目的IP地址(172.16.107.254)与自己的掩码做与运算,得出目的IP与自己在同一网段,进行ARP广播
  5. 由于路由器上的三层接口没有配置802.1Q,此时ARP广播包以纯以太网帧形式发送
  6. ARP广播包进入SW1时,打上接口PVID,并在vlan 174中进行广播,而vlanif 107属于vlan 107,所以ARP广播无法被接收,自然也不会回复,通信失败
    那为什么172.16.107.1能ping通172.16.107.2,继续往下看(前4步一样,不做赘述):
  7. 由于在SW1内没有查到172.16.107.2的mac地址,SW1进行泛洪,ARP广播通过trunk到达SW2
  8. SW2此时也没有172.16.107.2的mac地址,同样在所有接口进行泛洪
  9. 数据包离开SW2时,由于hybrid口设置的untag 174,所以脱掉tag后R4能够正常接收并响应

    四、解决方法

  10. 从g0/0/1接口删除172.16.107.1,将其添加到子接口,并进行dot1q封装
    [R3]int g0/0/1
    [R3]undo ip address 172.16.107.1 255.255.255.0 sub
    [R3]int g0/0/1.107
    [R3-GigabitEthernet0/0/1.107]dot1q termination vid 107
  11. 华为设备子接口默认抑制ARP广播,需要手动开启
    [R3-GigabitEthernet0/0/1.107]arp broadcast enable 
  12. 在SW1的入方向,允许vlan 107通过
    [SW1-Ethernet0/0/1]port hybrid tagged vlan 107  

    至此所有操作完成