关于 pppoe 重拨后 IPV6 prefix 更新问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ggf
V2EX    宽带症候群

关于 pppoe 重拨后 IPV6 prefix 更新问题

  •  
  •   ggf 2022-01-20 12:40:00 +08:00 8970 次点击
    这是一个创建于 1364 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我通过 pppoe 连接外网,然后通过 prefix 获取 ipv6 后,我的终端同时拥有 ipv4 和 ipv6 地址,此时一切正常。
    问题出现在 pppoe 连接断开重连时,前缀获取的 ipv6 会发生变化,但此时终端获取的是新的 ipv6 地址。 问题是旧地址没有自动消失,导致终端 ipv6 连接异常。
    除了终端断开连接,重新连接后可以恢复 ipv6 正常,还有什么办法吗?
    76CZgH.png

    第 1 条附言    2022-01-23 00:21:28 +08:00

    目前通过修改ND中的过期时间来解决该问题
    7hjODH.png

    41 条回复    2023-07-10 09:37:21 +08:00
    smartisan2047
        1
    smartisan2047  
       2022-01-20 12:56:56 +08:00 via iPhone
    ER-X 拨号,同有这个问题。蹲解决方案
    fenghuang
        2
    fenghuang  
       2022-01-20 12:59:06 +08:00 via Android
    我也遇到 wifi 必须重连才行
    ggf
        3
    ggf  
    OP
       2022-01-20 13:09:21 +08:00
    我是 ros 拨号,以下脚本也试过,没有作用
    RouterOS IPv6 实用脚本
    IPv6 地址更新脚本
    用于当 RouterOS IPv6 更新时,主动向客户端广播旧地址过期

    :local poolname "pool6"
    :local ifname "bridge"

    :global oldprefix;
    :local newprefix;

    :set newprefix [/ipv6 pool used get [find info="bridge"] prefix];

    :if ([ :typeof $oldprefix ] = "nothing") do {
    :set $oldprefix $newprefix
    }

    :i ($newprefix != $oldprefix) do {
    :log info "Kill IPv6 prefix, old prefix: $oldprefix, new prefix: $newprefix";
    :ipv6 nd prefix add prefix=$oldprefix interface=$ifname on-link=yes autOnomous=yes preferred-lifetime=0s valid-lifetime=0s;
    :delay 5;
    :ipv6 nd prefix remove [/ipv6 nd prefix find prefix=$oldprefix];
    :set $oldprefix $newprefix;
    }
    basncy
        4
    basncy  
       2022-01-20 13:22:33 +08:00
    lovelylain
        5
    lovelylain  
       2022-01-20 13:51:33 +08:00 via Android
    acbot
        6
    acbot  
       2022-01-20 14:08:01 +08:00
    这里的问题主要是短时间内更新了前缀,在上一个前缀和前缀下发后生成的地址的租赁期没到,这个时候更新了前缀那么 RA 通告的时候两个前缀都有,就会产生问题。只要过了这个租赁期你更新新的前缀下面都不会有问题(至少 OP 不会因为他会重启下发服务)。主要问题是在 LAN 这个接口上,这个时候只要你手动删除旧前缀的地址,RA 就只会通告新的前缀,不重启任何设备和服务下面的设备都可以正常。
    noahzh
        7
    noahzh  
       2022-01-20 14:08:34 +08:00
    我还是觉得 dhcp v6 更符合家庭需求.
    acbot
        8
    acbot  
       2022-01-20 14:13:46 +08:00
    @noahzh 安卓好像不支持 dhcp v6 获取 只能 slaac
    ggf
        9
    ggf  
    OP
       2022-01-20 14:44:35 +08:00 via iPhone
    @acbot 确实如此,但是我在 ros 中 /ipv6 address 中并没有发现旧的地址,在 pppoe 重拨后旧地址其实已经被替换成了新地址 想问一下您回复中提到的删除旧地址前缀该如何操作呢
    Autonomous
        10
    Autonomous  
       2022-01-20 14:49:06 +08:00 via Android
    蹲一个解决方案
    tankren
        11
    tankren  
       2022-01-20 14:57:53 +08:00
    路由器没有发送地址释放指令给局端?或者是路由器的 RA 问题
    acbot
        12
    acbot  
       2022-01-20 15:20:22 +08:00
    @ggf ros 没用过,我说的是 OP 的情况,不过大致就是两个地方排查,一个是负责 RA 下发的服务,一个是 LAN 接口的 v6 地址(网关的地址)。
    aMR
        13
    aMR  
       2022-01-20 15:44:38 +08:00
    把 ra 的 lifetime 设短点就好了,er-x 的默认值实在是太久了,不适合 pppoe 拨号

    贴一下我用的值,单位秒
    preferred-lifetime 600
    valid-lifetime 1800
    max-interval 600
    一般几分钟就切过去了,日常使用无感
    noahzh
        14
    noahzh  
       2022-01-20 15:52:23 +08:00
    @acbot 其实我现在更想的是给指定设备分配 ipv6.
    acbot
        15
    acbot  
       2022-01-20 15:58:06 +08:00
    @noahzh 这个需求用 dhcp v6 实现会不会很复杂。
    geekvcn
        16
    geekvcn  
       2022-01-20 16:47:12 +08:00
    修改下租约时间,改最小
    ggf
        17
    ggf  
    OP
       2022-01-20 17:03:33 +08:00
    如图,但是 ND 中的 RA 时间是 1800 想问一下大家这个时间为什么实际上没有效果(就是重拨后的 1800s 后并没有更新)
    [![7cVfKO.png]( https://s4.ax1x.com/2022/01/20/7cVfKO.png)]( https://imgtu.com/i/7cVfKO)
    noahzh
        18
    noahzh  
       2022-01-20 19:08:14 +08:00
    @acbot 没有这个功能
    vtoex0000000002
        19
    vtoex0000000002  
       2022-01-20 19:19:17 +08:00
    来来来,我被这个问题折磨了一天。
    采用了妥协的方法。

    v2ex.com/t/828332
    Sxx1314
        20
    Sxx1314  
       2022-01-20 23:36:08 +08:00 via Android
    涉及租期问题无解。本身 v6 就不应该频繁改前缀,天朝 isp 比较奇葩而已。目前的临时做法是定时重启 dhcp ,当然这时候部分 client 也必须重启网络才能重新更新。
    cwbsw
        21
    cwbsw  
       2022-01-21 12:02:21 +08:00
    这是苹果的实现问题吧,我这里 OpenWrt+Windows ,重拨后秒更新,旧地址被 deprecated ,valid_lft 过后就消失了。valid_lft 默认是与上游运营商下发的前缀一致,也可以自己指定。
    ggf
        22
    ggf  
    OP
       2022-01-21 23:08:49 +08:00
    @cwbsw 不仅仅是 ios windows 上也是如此现象,可能由于我的 valid_lft 都是跟随运营商默认 30d 有关系
    ggf
        23
    ggf  
    OP
       2022-01-21 23:13:22 +08:00
    @Sxx1314 我发现其实不重启 dhcp 其实只需要终端断开网络重新连接即可,应该是终端中的旧地址没有释放导致的,因为重新联网获取到的地址就是新的 不会获取到旧地址
    raysonx
        24
    raysonx  
       2022-01-22 01:03:09 +08:00 via iPhone
    关掉 dhcpv6 。slaac 可以更新前缀。
    cwbsw
        25
    cwbsw  
       2022-01-22 10:20:12 +08:00
    @ggf
    valid lifetime 和 preferred lifetime 用 ROS 都可以改。
    basncy
        26
    basncy  
       2022-01-22 13:23:47 +08:00
    @ggf 4 楼不是已经给答案了吗?
    关闭 dhcp, 用 slaac. 或者缩小 dhcp 租期
    dnsmasq 语法:
    dhcp-range=br0,::,constructor:br0,ra-stateless,ra-names

    PD 用的是 wide-dhcpv6, pppoe 重新拨号后 systemctl restart dhcp6c@ppp0,配合 dnsmasq 配置,该路由下的 v6 自动刷新.
    qbqbqbqb
        27
    qbqbqbqb  
       2022-01-22 14:08:10 +08:00
    @cwbsw 重拨后是否更新是要看路由端实现的。OpenWRT 会主动 deprecate prefix (发一个旧前缀 preferred lifetime=0 的 RA ),这样即使旧地址的 preferred lifetime 没过期也能强制切换。

    但别的路由系统不一定,有的得等前缀自动过期(至少得等旧地址 preferred lifetime 过期,终端才会把新地址设为首选)。
    ggf
        28
    ggf  
    OP
       2022-01-22 19:54:02 +08:00
    @basncy 我用的是 ros 用的就是 slaac 问题依旧在
    ggf
        29
    ggf  
    OP
       2022-01-22 20:14:23 +08:00
    @qbqbqbqb 确实 ros 应该不会主动 deprecate prefix ,目前问题存在
    ggf
        30
    ggf  
    OP
       2022-01-22 20:15:46 +08:00
    @cwbsw 对的我改成了 30min/10min 目前用这个方法解决
    basncy
        31
    basncy  
       2022-01-22 20:50:15 +08:00
    @ggf systemctl restart dhcp6c@ppp0 后 br0 的 ipv6 会变, dnsmasq 监测到变化就会主动发 deprecate prefix.
    basncy
        32
    basncy  
       2022-01-22 20:53:21 +08:00
    @ggf systemctl restart dhcp6c@ppp0 可以写在 pppoe 的 if-up 里, 这样就能秒换了.
    ggf
        33
    ggf  
    OP
       2022-01-22 21:27:50 +08:00
    @basncy 我用的并不是 openwrt 我强调过很多次,请仔细阅读
    basncy
        34
    basncy  
       2022-01-22 21:39:03 +08:00
    @ggf 原理都一样. 我用 archlinux 改造的. https://wiki.archlinux.org/title/IPv6#With_WIDE-DHCPv6
    z5864703
        35
    z5864703  
       2022-01-22 22:46:07 +08:00
    ROS 调整 ND 的参数就好了,根据 ipv6 前缀的过期时间来改,目前没有问题
    Xymmh
        36
    Xymmh  
       2022-01-23 00:14:21 +08:00
    干脆不要用 pd 下发的地址了,直接把上级设备给 wan 口分发的 /64 地址中继给终端,类似教育网下的方法。
    ggf
        37
    ggf  
    OP
       2022-01-23 00:22:25 +08:00
    @z5864703 是的 这个方法目前可行
    zent00
        38
    zent00  
       2022-06-25 09:29:36 +08:00
    没有 VyOS 用户吗?我来贡献一下 VyOS 的设置。

    set service router-advert interface br0 prefix ::/64 preferred-lifetime 300
    set service router-advert interface br0 prefix ::/64 valid-lifetime 900

    由于我的软路由多个 LAN 口都加入了 br0 ,所以这里 interface 是 br0 ,设置时可按实际情况修改为 ethN 。
    test0x01
        39
    test0x01  
       2022-06-28 23:45:33 +08:00 via Android
    看样子只有比 lease time 了
    luodichen
        40
    luodichen  
       2023-05-10 09:48:41 +08:00   1
    RouterOS v7.9 已经解决了此问题:

    *) ipv6 - send out RA packet with "preferred-lifetime" set to "0" when IPv6 address is deactivated;
    zent00
        41
    zent00  
       2023-07-10 09:37:21 +08:00
    VyOS 在 5 月 25 日的 nightly build 中也针对这个问题加入了两个新的配置选项:

    (feature): router-advert: Add deprecate-prefix & decrement-lifetimes options

    看了下 FEATURE REQUEST 的信息,就是 24 楼的 raysonx 兄弟在去年 7 月提交的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5360 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 01:19 PVG 09:19 LAX 18:19 JFK 21:19
    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