• 文章搜索:
  • 灵犀一指

        • 分享到...

        • 新浪微博
        • 腾讯微博
        • 推荐到豆瓣 豆瓣空间
        • 分享到搜狐微博 搜狐微博
        • 分享到QQ空间 QQ空间
        • 分享到腾讯朋友 腾讯朋友
        • 网易微博分享 网易微博
        • 添加到百度搜藏 百度搜藏
        • 转贴到开心网 开心网
        • 转发好友 告诉聊友
    • 推荐
    • 打印
    • 收藏

    VRRP也能让你如此迷惑

    作者:  |  上传时间:2014-05-20  |  关键字:VRRP也能让你如此迷惑

    一 组网:

    两台S3600交换机做VRRP为局域网中客户机和上行的路由器提供双机备份:

    二 问题描述:

    S3600-1和S3600-2使能VRRP,地址分配情况如下:

    S3600-1

    interface Vlan-interface10

    ip address 10.0.0.1 255.255.255.0

    vrrp vrid 1 virtual-ip 10.0.0.254

    vrrp vrid 1 priority 150

    #

    interface Vlan-interface20

    ip address 20.0.0.1 255.255.255.0

    vrrp vrid 2 virtual-ip 20.0.0.254

    #

    interface Vlan-interface30

    ip address 30.0.0.1 255.255.255.0

    vrrp vrid 3 virtual-ip 30.0.0.254

    S3600-2

    interface Vlan-interface10

    ip address 10.0.0.2 255.255.255.0

    vrrp vrid 1 virtual-ip 10.0.0.254

    #

    interface Vlan-interface20

    ip address 20.0.0.2 255.255.255.0

    vrrp vrid 2 virtual-ip 20.0.0.254

    vrrp vrid 2 priority 150

    #

    interface Vlan-interface30

    ip address 30.0.0.2 255.255.255.0

    vrrp vrid 3 virtual-ip 30.0.0.254

    vrrp vrid 3 priority 150

    S3600-1为vlan10的VRRP Master,S3600-2为 vlan10的VRRP Backup。

    在vlan10下的PC tracert远端Server时,应走路径为:

    S3600-1 à Router àServer

    <PC>tracert 100.0.0.1

    traceroute to 100.0.0.1(100.0.0.1) 30 hops max,40 bytes packet, press CTRL_C to break

    1 10.0.0.1 5 ms 5 ms 10.0.0.2 5 ms

    2 100.0.0.1 3 ms 3 ms 10 ms

    而实际tracert时,有时的结果却是:

    S3600-2à Router àServer

    <PC>tracert 100.0.0.1

    traceroute to 100.0.0.1(100.0.0.1) 30 hops max,40 bytes packet, press CTRL_C to break

    1 10.0.0.2 4 ms 10.0.0.1 5 ms 5 ms

    2 100.0.0.1 3 ms 3 ms 9 ms

    三 过程分析:

    在S3600-2上debugging drv packet cpurcv和debugging drv packet cpuxmit发现PC发出的tracert报文上设备CPU进行了处理:

    *0.70714664 H3C DRV_MNT/8/cpurcv:- 1 -

    CPURcv: Portnum--2 length=64 reason=0x00001000 cpu_rx_cos=-1---------

    +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F

    00 00 5e 00 01 01 00 23 89 6a 20 8b 81 00 00 0a

    08 00 45 00 00 28 75 a1 00 00 01 11 d5 bf 0a 00

    00 64 64 00 00 01 75 9f 82 9c 00 14 00 00 02 01

    00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00

    *0.70715125 H3C DRV_MNT/8/CPUXmit:- 1 -

    CPUSnd: Portnum--2 length=74 reason=0x00000000 cpu_rx_cos=-1---------

    +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F

    00 23 89 6a 20 8b 00 0f e2 20 0d 26 81 00 00 0a

    08 00 45 00 00 38 1f 0f 00 00 ff 01 88 50 0a 00

    00 02 0a 00 00 64 0b 00 fc af 00 00 00 00 45 00

    00 28 75 a1 00 00 01 11 d5 bf 0a 00 00 64 64 00

    00 01 75 9f 82 9c 00 14 00 00

    而理论上VRRP Backup设备是不应该处理这个报文的。

    为何S3600-2对tracert进行了回应,这里涉及到S3600产品VRRP的实现机制:

    如果Backup上有多个vrrp组且其中只要有一个组是处于Master角色,那么底层就会有acl将目的mac为00005e0001xx的TTL=1的报文copy to CPU。

    ACL规则没有细化到按vrrp的虚mac来精确匹配是为了节省acl资源。由于只能采取copy的方式,所以这份报文会同时被Backup和Master设备收到。

    由于底层acl无法过滤Backup上来的报文,并且底层也不适合针对vrrp状态去软件过滤这种报文,报文上到平台后只要收包端口所在的vlan是有三层接口就会回应tracert,不会再关注到二层mac信息的。

    用PC抓包看,PC每发出一个ttl为1的报文,都会同时收到2个回应,至于tracert的结果中显示的回应IP,取决于Master还是Backup谁回应的速度快,显示谁的地址。

    四 解决方法:

    该问题只涉及到tracert的显示结果,对三层转发的业务报文没有影响。