V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
There is no place like ::1
journeydove
V2EX  ›  IPv6

求教大佬,路由器不响应 ICMPv6 的 NS 包,仅部分主机能联网

  •  
  •   journeydove · 2020-07-10 00:30:36 +08:00 · 2491 次点击
    这是一个创建于 1616 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近家里 IPv6 突然上不了了,具体描述如下:

    环境:

    • 路由器即网关(桥接光猫),能正常通过 DHCP-PD 获取前缀
    • 路由器系统:OpenWrt 19.07 x86
    • 路由器连接三个子网,每个子网都分了不同 VLAN (不是重点,划 VLAN 应该没影响),一个给服务器,一个给家庭局域网,一个给蹭网的邻居
    • 家庭网使用无线连接,而服务器网均通过有线连接(可能不能排除无线路由器有问题)

    简要概述问题:在同一子网下,部分设备能 IPv6 联网,部分不行,查问题是路由器没有回应不能联网的设备的 NS 包。

    问题描述:

    • 在几个月以前,全部网络的 IPv6 都是正常的,但是最近不知道是不是升级了路由器的原因,家庭网的 IPv6 突然不能用了
    • 目前服务器网可以同时通过 SLAAC 和 DHCPv6 获取地址,且能正常访问互联网,一切正常
    • 目前家庭网内设备可以通过两种方式获取地址,但是无法上网,表现现象是网页加载一会儿后提示打不开,测试网站显示连接 IPv6 资源超时。(因为防火墙策略设置均为 reject,没有用到 drop,所以应该可以初步判断不是防火墙的问题)
    • 在路由器终端查看 IPv6 邻居,发现家庭网下设备状态均为 FAILED (其实是 PROBE 状态后 3 秒的 DELETE 状态,在 Linux 4.x 里貌似不会删除这个邻居条目,而是标记为 FAILED )
    • 重启路由器的网络接口后,再次在路由器查看 IPv6 邻居,发现一开始发现的两个设备正常了,状态显示为 REACHABLE,而且一直到现在也没有掉回 FAILED 状态。但是后面发现的邻居仍然为 FAILED 状态。经测试,REACHABLE 状态的设备能正常通过 IPv6 联网,测试网站测试也是正常的
    • 最后在路由器上抓包分析,发现路由器只响应最初的两个设备的 NS 包,并能正常回应 NA 包;而其他设备发送的时候,路由器则不响应了

    求教大佬,能帮忙分析一下这是怎么回事么,若能解答,万分感谢!

    图 1 目前家庭网 ULA 地址邻居情况:

    1.jpeg

    图 2 目前家庭网全球单播地址邻居情况:

    2.jpg

    图 3 目前服务器网全球单播地址邻居情况:

    3.jpg

    图 4 抓包情况:可以看到,局域网内设备连续发送了多次 NS 信息,但路由器都没有回应:

    4.jpg

    第 1 条附言  ·  2020-07-11 15:31:58 +08:00
    经排查,是路由器下联 VLAN 交换机的问题,交换机型号为 TL-SG2008,表现为上联口失败收包。在别的论坛找到类似问题: https://koolshare.cn/thread-175886-1-1.html 貌似该问题无解,可能需要更换 VLAN 交换机-_-。感谢大家的关注!
    第 2 条附言  ·  2021-02-08 15:48:27 +08:00

    经过了213天,最近有时间研究了一下这个问题,终于解决了。回来更新下

    经过排查不是TP-LINK交换机的问题(错怪它了,抱歉抱歉),而是路由器的问题。

    之前的网络拓扑是这样的:

    OpenWRT (eth1) ----- (port8) TL-SG2008 (port1) ----- AP
    OpenWRT (eth2) ----- PC(10.0.0.0/8)
    

    OpenWRT设置了两个LAN,一个称为HOME,一个称为PC

    OpenWRT配置的端口如下:

    HOME ( eth1.101, eth2.101 )   # eth1.101表示端口eth1, vlan101
    PC   ( eth2, eth3, eth4 )
    

    这种做法其实并不正确,事实上来自eth1.101的数据进入eth1.101后会由eth2剥离vlan tag再发出去(也许是OpenWRT的特性?),导致两个LAN连在一起了。(事实上可配置eth1的行为,使其不发出带tag的包,不过那有点复杂,感兴趣的可以自己找找)

    事实上,在PC网内的电脑也因为开启了STP,五分钟断一次网,系统日志:

    vmbr0: received packet on eno1 with own address as source address (addr:xxxxxxxx, vlan:0)
    

    同样地,对于部分IPv6联网设备,需要发送NS等消息才能正确配置地址,但是因为两个子网连起来了,设备发送NS后可能收到多个应答。有些设备选择忽略后到的应答而配置成功,有些设备就会因为收到多个应答而配置失败。(正如一个局域网内部署了两个DHCP服务器,二者产生冲突)

    所以最好的解决方案是,如果不需要,删掉HOME里面的eth2.101接口

    HOME ( eth1.101 )
    PC   ( eth2, eth3, eth4 )
    

    如果需要在eth2访问HOME,那么更改PC接口:

    HOME ( eth1.101, eth2.101 )
    PC   ( eth2.100, eth3, eth4 )   # 但是同时需要配置PC网内的主机
    
    第 3 条附言  ·  2021-02-11 12:48:08 +08:00

    最后一条附言,说一下其他注意事项吧。

    使用旧版带IGMP功能的交换机,在应用IPv6时,一定要关闭“IGMP嗅探”和“Report报文抑制”功能。因为IPv6 NDP协议使用的是组播,不同于IPv4 ARP协议使用广播。所以一些旧的交换机可能会把IPv6的组播数据当成IGMP协议处理,最后因无法处理而丢弃报文。

    开关“IGMP嗅探”这些功能时,效果可能不是很显著,因为要等交换机的MAC表超时才能进行新一轮的转发,也就是说,关了“IGMP嗅探”后要耐心等待一会儿才能有现象。一般交换机默认超时是5分钟,如果不想等也可以直接重启机器。

    还有一点需要注意,在使用像TP-LINK这种家庭级的WiFi产品,将其作为AP使用时,也要把IPv6模式配置成“桥模式”,亲测如果不是“桥模式”,貌似会直接关闭网口的IPv6转发功能,导致连IPv6地址都获取不到,但无线设备不受影响。(也可能是因为我买的这款型号带有WAN盲插功能,为了避免冲突,没有配置的情况下便关闭了IPv6转发)

    2 条回复    2021-02-08 14:48:00 +08:00
    bigghost
        1
    bigghost  
       2021-01-27 06:34:14 +08:00
    请教,正常下,是通过 slacc 还是 dhcpv6,获得地址?谢谢
    journeydove
        2
    journeydove  
    OP
       2021-02-08 14:48:00 +08:00
    @bigghost 一般家用情况下还是使用 SLAAC,如果要用 PD 给下级路由分地址的话还是得 DHCPv6
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1001 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 23:08 · PVG 07:08 · LAX 15:08 · JFK 18:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.