V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
guiys
V2EX  ›  路由器

RouterOS pppoe 断线重播总会下发新旧两个 ipv6

  •  
  •   guiys · 13 天前 · 672 次点击

    具体是这样的: 第一次启动 ros ,正常拨号,正常获取 ipv6pd (假定 2409:aaaa::/60 ),终端可以获得 ipv6 地址。 如果之后 pppoe 断线重播(运营商踢掉、网线重插等),又重新获取了新的 ipv6pd (假定 2409:bbbb::/60 ),终端就会获得 aaaa 和 bbbb 两个前缀的地址。等再遇到重播,终端就会得到 bbbb 和 cccc 两个前缀的地址。 如果一直不重启 ros ,终端总会拿到前一个和当前两个前缀的 ipv6 。图上的 1892:af90 就是上次拨号下发的前缀。
    已经尝试调整过 preferred-lifetime 和 valid-lifetime ,没有效果,两个地址会在终端一直存在。

    贴一下配置请帮忙看看是那里的问题,版本 chr7.19.3 (stable):

    /interface ethernet
    set [ find default-name=ether1 ] disable-running-check=no name=LAN
    set [ find default-name=ether2 ] disable-running-check=no name=WAN
    /interface pppoe-client
    add add-default-route=yes disabled=no interface=WAN max-mru=1480 max-mtu=1480 name=pppoe-out1 use-peer-dns=yes user=**************
    /ip dhcp-server option
    add code=3 name=option1 value="'192.168.1.100'"
    add code=6 name=option2 value="'192.168.1.100'"
    /ip pool
    add name=dhcp_pool0 ranges=192.168.1.10-192.168.1.40
    /ip dhcp-server
    add address-pool=dhcp_pool0 interface=LAN lease-time=2h name=dhcp1
    /system logging action
    set 0 memory-lines=200
    /certificate settings
    set builtin-trust-anchors=not-trusted
    /ip neighbor discovery-settings
    set discover-interface-list=none
    /ip settings
    set max-neighbor-entries=16384
    /ipv6 settings
    set max-neighbor-entries=8192
    /ip address
    add address=192.168.1.1/24 interface=LAN network=192.168.1.0
    /ip dhcp-server network
    add address=192.168.1.0/24 dns-server=192.168.1.1 gateway=192.168.1.1
    /ip dns
    set allow-remote-requests=yes max-concurrent-tcp-sessions=50
    /ip firewall filter
    add action=drop chain=input comment="drop invalid" connection-state=invalid
    add action=drop chain=forward comment="drop invalid" connection-state=invalid
    /ip firewall mangle
    add action=change-mss chain=forward disabled=yes new-mss=clamp-to-pmtu out-interface=pppoe-out1 protocol=tcp tcp-flags=syn
    /ip firewall nat
    add action=endpoint-independent-nat chain=srcnat comment=FullCone-Nat protocol=udp
    add action=endpoint-independent-nat chain=dstnat comment=FullCone-Nat protocol=udp
    add action=masquerade chain=srcnat out-interface=pppoe-out1
    /ip service
    set ftp disabled=yes
    set ssh disabled=yes
    set telnet disabled=yes
    set www address=192.168.1.0/24
    set winbox address=192.168.1.0/24
    set api disabled=yes
    set api-ssl disabled=yes
    /ipv6 address
    add address=::1 from-pool=cmcc interface=LAN
    /ipv6 dhcp-client
    add default-route-tables=main interface=pppoe-out1 pool-name=cmcc request=prefix
    /ipv6 firewall filter
    add action=accept chain=input comment="defconf: accept established,related,untracked" connection-state=established,related,untracked disabled=yes
    add action=drop chain=input comment="defconf: drop invalid" connection-state=invalid disabled=yes
    add action=accept chain=input comment="defconf: accept ICMPv6" disabled=yes protocol=icmpv6
    add action=accept chain=input comment="defconf: accept UDP traceroute" disabled=yes port=33434-33534 protocol=udp
    add action=accept chain=input comment="defconf: accept DHCPv6-Client prefix delegation." disabled=yes dst-port=546 log=yes protocol=udp src-address=fe80::/16
    add action=drop chain=input comment="defconf: drop everything else not coming from LAN" disabled=yes in-interface=!LAN
    add action=accept chain=forward comment="defconf: accept established,related,untracked" connection-state=established,related,untracked disabled=yes
    add action=drop chain=forward comment="defconf: drop invalid" connection-state=invalid disabled=yes
    add action=accept chain=forward comment="defconf: accept ICMPv6" disabled=yes protocol=icmpv6
    add action=accept chain=forward disabled=yes dst-port=2256 log=yes protocol=tcp
    add action=drop chain=forward comment="defconf: drop everything else not coming from LAN" disabled=yes in-interface=!LAN
    /ipv6 firewall mangle
    add action=change-mss chain=forward new-mss=clamp-to-pmtu out-interface=pppoe-out1 packet-mark="" protocol=tcp tcp-flags=syn
    /ipv6 nd
    set [ find default=yes ] advertise-dns=no hop-limit=64 interface=LAN
    /ipv6 nd prefix default
    set preferred-lifetime=10m valid-lifetime=30m
    /system clock
    set time-zone-name=Asia/Shanghai
    /tool graphing interface
    add interface=pppoe-out1
    
    8 条回复    2025-08-21 01:12:56 +08:00
    kenneth104
        1
    kenneth104  
       13 天前
    这个会导致你出现什么问题吗?
    我不是用 ROS ,但一样会遇到这种情况,因为还会判断剩余有效期,有效期较长的 IP 会优先,所以网络是没问题
    mangmaimu
        2
    mangmaimu  
       13 天前 via iPhone
    看看是不是 Windows 的问题,手机是否一样
    guiys
        3
    guiys  
    OP
       13 天前 via Android
    @kenneth104 网络使用没有任何影响,访问外网都是通过新前缀的 ip ,就是觉得配置哪里有问题,忍不了😂
    guiys
        4
    guiys  
    OP
       13 天前 via Android
    @mangmaimu 手机也是一样的,安卓 ios 都是新旧两个地址,所以应该是哪里配置的问题
    mangmaimu
        5
    mangmaimu  
       13 天前 via iPhone
    @guiys
    地址状态
    当分配自动配置地址时,它可以处于以下状态之一:
    tentative - 在此状态下,主机验证地址是否唯一。验证通过重复地址检测进行。
    preferred - 在此状态下,地址被验证为唯一,节点可以向首选地址发送和接收单播流量。首选状态的持续时间包含在 RA 消息中。
    deprecated - 该地址仍然有效,但不用于新连接。
    invalid - 节点无法再发送或接收单播流量。有效生存期到期后,地址将进入无效状态。

    mikrotik 官方说明,看起来没问题,应该是不同状态
    kenneth104
        6
    kenneth104  
       13 天前
    @guiys
    没问题就行,不纠结就得 XD
    holoto
        7
    holoto  
       13 天前
    说明 lan 的 dhcp 下发 没有更新状态 保留了旧的 wan v6 地址。op 也有这个问题 。如果是定时重启 wan 也要设置定时重启 lan
    asde111
        8
    asde111  
       12 天前
    老问题了,我用 routeros + windows + debian 都是一样的情况,不知道是谁的锅
    旧的地址已经 invalid 了但是 valid lifetime 还在一直更新

    这个帖子也有提到 https://v2ex.com/t/1014173
    > 经过观察发现如下情况...

    我的解决办法是在重拨之后手动更新一下旧前缀的 valid lifetime 为 0

    ```
    :global LastIPv6Prefix
    :local ipv6prefix

    :set ipv6prefix [/ipv6 nd prefix get [:pick [/ipv6 nd prefix find interface="bridge"] 0 ] prefix]
    # :log info "$ipv6prefix"

    :if ([:len $ipv6prefix] = 0) do={
    :log error ("Could not get IPv6 for interface bridge")
    :error ("Could not get IPv6 for interface bridge")
    }

    :if ([:len $LastIPv6Prefix] = 0) do={
    :set LastIPv6Prefix $ipv6prefix
    :log info ("LastIPv6Prefix is empty")
    }

    :if ($ipv6prefix != $LastIPv6Prefix) do={
    :log info ("Prefix " . $LastIPv6Prefix . " has expired. Updating lifetime...")
    /ipv6 nd prefix add prefix=$LastIPv6Prefix interface=bridge valid-lifetime=0s preferred-lifetime=0s
    :delay 5s
    /ipv6 nd prefix remove [:pick [/ipv6 nd prefix find prefix=$LastIPv6Prefix] 0 ]
    :set LastIPv6Prefix $ipv6prefix
    }

    ```
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2931 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:32 · PVG 21:32 · LAX 06:32 · JFK 09:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.