电信 IPv6 无前缀(IPv6-PD)下发内网 IPv6 问题讨论 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
alicespace
V2EX    宽带症候群

电信 IPv6 无前缀(IPv6-PD)下发内网 IPv6 问题讨论

  •  
  •   alicespace 2022-12-18 14:40:21 +08:00 4056 次点击
    这是一个创建于 1079 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:陕西电信,OpenWrt 拨号,光猫桥接

    OpenWrt 22.03.2 odhcpd-ipv6only 2022-03-22-860ca900-1 odhcp6c 2022-08-05-7d21e8d8-18 

    起因是某天半夜 pppoe 突然断线重播,起来一看下发的 IPv6-D 前缀没了,只剩了一个 /64 地址分配给路由器,下面的设备全部没有 IPv6 地址

    换用 relay 方法尝试之后,能分配到地址了,但是 OpenWrt 日志一直报错,内网设备无法访问 v6 网站 报错:

    odhcpd[1605]: Failed to send to 240e:xxx%wan@pppoe-wan (Bad file descriptor) 

    配置

    config dhcp 'lan' option interface 'lan' option start '100' option limit '150' option leasetime '12h' option dhcpv4 'server' option ra 'relay' option ndp 'relay' option dhcpv6 'relay' config dhcp 'wan' option interface 'wan' option ignore '1' option master '1' option ra 'relay' option ndp 'relay' option dhcpv6 'relay' 

    参考 v2ex LGA1150 的回复链接 发现用内网设备 ping 了一下路由器就好了???最后通过手动加路由表解决。

    之前说是 odhcpd 的 bug 但是已经过了 4 年,还没有修复吗?版本也更新了很多了。

    第 1 条附言    2022-12-31 14:04:26 +08:00
    最终解决方案:找电信师傅开 IPv6
    所有不下发前缀的都是本地区没开 IPv6 ,只要开通了 IPv6 都会下发前缀的。
    6 条回复    2023-01-13 01:14:34 +08:00
    alicespace
        1
    alicespace  
    OP
       2022-12-18 14:41:21 +08:00
    解决方案作者 [@LGA1150]( member/LGA1150)
    alicespace
        2
    alicespace  
    OP
       2022-12-18 15:03:56 +08:00
    可能有 VLAN 的原因!我的 WAN 是 VLAN 设备(搞了 iptv 和 wan 的单线复用)
    alicespace
        3
    alicespace  
    OP
       2022-12-18 15:24:40 +08:00
    Xymmh
        4
    Xymmh  
       2022-12-18 22:23:19 +08:00
    电信那边的配置问题,可以试试这个方法:

    实际上,上游节点直接绑定端口和上游直接分配了一个 /64 的 PD 效果是一样的。因此我们也可以伪造成获取了一个 PD 前缀来让 netifd 进行后续的配置。该方法的优点是 LAN 接口也可以获得一个全局路由地址,并且可以配合 LAN 侧的 DHCPv6 Server 进行更自由的内网配置。为此我们需要关闭 odhcpd 的中继模式,关闭后重启 odhcpd , 然后编辑 /etc/odhcp6c.user 文件:

    #!/bin/sh

    log() {
    logger -t "odhcp6c[fake-ipv6pd]" "$@"
    }

    reset_envs() {
    local entry

    local raroutes=""
    local userprefix=""
    for entry in $RA_ROUTES; do
    local route="$entry"
    local addr="${entry%%/*}"
    entry="${entry#*/}"
    local mask="${entry%%,*}"
    entry="${entry#*,}"
    local gw="${entry%%,*}"
    entry="${entry#*,}"
    local valid="${entry%%,*}"
    entry="${entry#*,}"
    local metric="${entry%%,*}"

    if [ "$addr" != "::" ]; then
    local prefix="$addr/$mask"
    log "found ipv6 prefix $prefix"
    userprefix="$userprefix $prefix"
    continue
    fi
    log "preserve ra route $route"
    raroutes="$raroutes $route"
    done

    RA_ROUTES="$raroutes"
    USERPREFIX="$userprefix"
    }

    fake_ipv6pd() {
    local device="$1"
    local action="$2"

    [ "$action" != "ra-updated" ] && return
    [ -n "$PREFIXES$USERPREFIX" ] && return
    [ -z "$ADDRESSES$RA_ADDRESSES" ] && return

    reset_envs

    [ -n "$ADDRESSES$RA_ADDRESSES$PREFIXES$USERPREFIX" ] && setup_interface "$device"
    }

    fake_ipv6pd "$@"

    原文: https://blog.icpz.dev/articles/notes/odhcpd-relay-mode-discuss/
    alicespace
        5
    alicespace  
    OP
       2022-12-31 14:04:00 +08:00
    最终解决方案:找电信师傅开 IPv6
    所有不下发前缀的都是本地区没开 IPv6 ,只要开通了 IPv6 都会下发前缀的。
    zbinlin
        6
    zbinlin  
       2023-01-13 01:14:34 +08:00
    这应该是 odhcpd 的 bug 来的,我抓包看了下,在客户端获取到 ipv6 地址时,openwrt 这边没有通过 `Learn routes(ndproxy_routing)` 把客户端的 ipv6 路由加上,这时你在客户端 ping 外网的 ipv6 地址时,openwrt 由于没有路由会把 reply 丢掉。如果你这时在客户端 ping 一个 wan6 的 ipv6 地址,客户端会先发一个 NS 找这个 ipv6 地址,这时 openwrt 注意到了才添加到路由里。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1096 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 18:00 PVG 02:00 LAX 10:00 JFK 13:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86