V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Tweak7136
V2EX  ›  宽带症候群

IPv6 地址和临时 IPv6 地址后缀都会变更, IPv6 地址是随着前缀变更而变更, 防火墙规则没法写.

  •  1
     
  •   Tweak7136 · 2023-02-12 15:54:49 +08:00 · 7235 次点击
    这是一个创建于 648 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不太理解 IPv6, 两个地址后缀都会改变是正常的吗?
    还有一个 DHCPv6 下发的固定后缀的地址不会变, 但是设备在 AP 后面的话, 前缀变更后设备收不到通知还是怎么着,前缀不会更新.
    有人知道是什么问题吗?
    路由器是 Openwrt
    第 1 条附言  ·  2023-02-12 21:03:47 +08:00

    SLAAC生成的后缀似乎依赖前缀, 前缀和变更SLAAC生成的后缀也会变.
    ArchLinux Windows11, 在我这里这两个系统是这样的.
    可以用下面的命令生成一个自定义后缀的地址, 是前缀变更了需要再次运行, 有别的办法吗?

    ip token set ::xxx dev eth0
    
    41 条回复    2023-07-14 10:59:21 +08:00
    raysonx
        1
    raysonx  
       2023-02-12 17:11:25 +08:00
    > 两个地址后缀都会改变是正常的吗?

    临时地址的后缀一定时间后会自动变更。
    非临时地址的话,其中 DHCPv6 分配的地址,后缀是否变更是由 DHCPv6 服务器控制的,通常情况下只要前缀不变且设备一直在线,就能在过期前自动续期。
    SLAAC 分配的地址,只要前缀不变,后缀就不变。

    > DHCPv6 下发的固定后缀的地址不会变, 但是设备在 AP 后面的话, 前缀变更后设备收不到通知还是怎么着,前缀不会更新.

    这是 DHCPv6 的固有缺陷,解决方法就是把租期设置得短一些,这样下次续期的时候就会获得新前缀。

    更彻底的解决方法是不用 DHCPv6 ,改用 SLAAC 。
    a90405
        2
    a90405  
       2023-02-12 17:32:36 +08:00
    用 SLAAC 的地址
    DHCPV6 简直没法用,更新非常不及时。
    Tweak7136
        3
    Tweak7136  
    OP
       2023-02-12 17:50:58 +08:00
    @raysonx
    @a90405
    SLAAC 也开着的, 所以一个设备有三个 IPv6 地址, 但是宽带给的前缀是动态的, 重播会变更前缀, 是不是防火墙规则就没办法了...
    evalfun
        4
    evalfun  
       2023-02-12 18:04:10 +08:00
    我直接放开我需要的端口,不折腾了。反正 v6 的地址空间这么大,应该不会有人去扫吧
    raysonx
        5
    raysonx  
       2023-02-12 18:51:05 +08:00
    在用 SLAAC 的时候,路由器只会下发前缀,后缀是由设备自己控制的。部分设备可以设置为固定后缀,这样在前缀变化时后缀也不会变。
    然后路由器可以使用掩码::ffff:ffff:ffff:ffff 按后缀匹配设备,路由器支持 ip6tables/nftables 规则就可以做到。
    blankmiss
        6
    blankmiss  
       2023-02-12 19:03:34 +08:00
    @evalfun 有的很多扫全网的爆破端口
    questionyu
        7
    questionyu  
       2023-02-12 20:16:40 +08:00
    OpenWrt 的话不是问题,我还头疼我的 Linksys 没法写防火墙规则呢。
    举个例子,通过观察多次拨号后地址变化,得知我的设备地址总是这么个形式:
    2409:123:xxx:xxx:1234:5678:1234:5678 (其实这个就是 SLAAC 的规律)
    那么在 OpenWrt 中就可以这么写:
    ::1234:5678:1234:5678/::ffff:ffff:ffff:ffff
    这样的话前缀如何变也是没有关系的,总是针对我这一个设备的,不对其他设备有影响。
    bigbbhh
        8
    bigbbhh  
       2023-02-12 21:02:46 +08:00   ❤️ 1
    为什么不根据 mac 地址写防火墙呢?
    yyysuo
        9
    yyysuo  
       2023-02-12 22:01:22 +08:00
    关注,重启一下主路由,局域网内有 ipv6 的设备上网都不正常的了,必须要重启 ap 才可以。
    465456
        10
    465456  
       2023-02-12 22:38:11 +08:00
    @evalfun 我也一样,公网 IPv4 ,openwrt 防火墙设置关闭 ipv4 和 ipv6 的 ping ,再开放 ipv6 某个端口自己使用
    1423
        11
    1423  
       2023-02-12 22:54:29 +08:00   ❤️ 5
    服务机器不要用 SLAAC , 也不需要 ULA
    如果有前缀委托,服务机配置 static DHCP 分配固定 ipv4 和 ipv6
    而且一般我习惯 v6 地址后缀跟 v4 地址一样, 如图


    ipv6 防火墙也是像我一样配置即可,可以看命中数目确认已生效


    关于 openwrt 的 ipv6 配置,我推荐下面这个视频,只需要 25 分钟,你就掌握了一辈子都用得到的,永远不会再困惑的技能!

    以上内容我都是从这个视频学到的。为了感谢这个 up ,我才在这里答疑
    Tweak7136
        12
    Tweak7136  
    OP
       2023-02-12 22:57:16 +08:00
    @yyysuo 只是要上网的话,把 dhcp 的租期设置成 2m 就可以了。slaac 的话,openwrt 默认应该就是正常工作的,前缀会自己标记 Deprecated 。
    Tweak7136
        13
    Tweak7136  
    OP
       2023-02-12 22:59:29 +08:00
    @Tweak7136 旧的前缀设备会自己标记 Deprecated ,时间到了就释放了。
    1423
        14
    1423  
       2023-02-12 23:00:20 +08:00
    上面有人说 DHCPV6 更新不及时,mac 是支持手动更新的(系统设置 DHCP 续租),也可以配置更短的 DHCP 租期来解决。
    偶尔遇到 ipv6 地址没更新,我一般是用 iStat Menus 的 “更新 DHCP 租借时间” 来解决
    LnTrx
        15
    LnTrx  
       2023-02-13 00:09:56 +08:00
    这是 RFC7217 定义的安全机制 stable privacy addresses 。如果是本来就暴露的纯服务端,SLAAC 的随机性没啥意义,那设成固定就好。

    对于 SLAAC 有意义的一般设备,个人还是推荐把防火墙的重点转移到终端而非网关。
    yyysuo
        16
    yyysuo  
       2023-02-13 00:41:57 +08:00
    关注,重启一下主路由,局域网内有 ipv6 的设备上网都不正常的了,必须要重启 ap 才可以。
    @Tweak7136 能解决我主路由重启几次,局域网内设备就分配到几个 ipv6 地址的问题么?
    wwbfred
        17
    wwbfred  
       2023-02-13 03:34:05 +08:00
    @1423 不行,你发的这个是德国经验,国内绝大多数的前缀都是动态的,基本上是几十个小时左右就会和 IPV4 一起变,这样不用 ULA 会产生非预期行为,比如在某段时间使用别人家前缀下的 IP ,并且你的局域网设备没有任何一个固定 IP 地址。
    同时静态分配也会失效,路由器必须通过某种方式告诉下属设备前缀变了。在 Openwrt 下,DHCPv6 不能很好地处理这个问题,会直接导致前缀改变的情况下 IPV6 设备断网,所以只有用 SLAAC ,把之前 IP 的生存期调零,然后让设备自己决定自己的地址。
    wwbfred
        18
    wwbfred  
       2023-02-13 03:40:20 +08:00
    @1423 调租期属于扬汤止沸行为,治标不治本,很不美观。没有必要的理由,尽量不要使用这种妥协方案,建议 OP 用户使用 SLAAC 解决这个问题。
    lslqtz
        19
    lslqtz  
       2023-02-13 07:04:23 +08:00
    我自己一直使用 DHCPv6, 原因是因为某天看 IP 地址时发现有很多个无效 IPv6 地址, 最后发现 SLAAC 获得的地址即使失效了似乎也不会自动被释放. 就这一两年的体验来看, 基本没有什么大问题 (个人习惯使用超短租期), 但是 @wwbfred 提到的现象确实是存在的. 在租期未到期时, 设备可能会选择释放无效的 IPv6 地址进入单栈真空期, 也有可能不释放并导致这段时间的 IPv6 请求全部 Timeout.
    关于静态地址分配, DHCPv6 可以保证后缀不随前缀变化, 但 OpenWrt 使用的 odhcpd 有问题, 会给一个设备的不同 NIC 以相同 DUID 分配相同的地址.
    lslqtz
        20
    lslqtz  
       2023-02-13 07:07:44 +08:00
    如果是要写防火墙, 我不太懂防火墙, 但是也许你可以针对接口和前缀开头几位 (例如 240e 等) 提高范围而不是具体的地址段写?
    lifanxi
        21
    lifanxi  
       2023-02-13 07:53:20 +08:00 via Android
    我问过一模一样的问题,答案就是防火墙规则只写后缀匹配就可以了。
    azure2023us
        22
    azure2023us  
       2023-02-13 09:14:49 +08:00
    我的
    # block v6 input
    ip6tables -I INPUT -p udp --dport 1900 -j REJECT
    ip6tables -I INPUT -p udp --dport 5353 -j REJECT
    ip6tables -I INPUT -p udp --dport 546 -j REJECT
    ip6tables -I INPUT -p udp --dport 123 -j REJECT
    ip6tables -I INPUT -p udp --dport 53 -j REJECT
    ip6tables -I INPUT -p tcp --dport 53 -j REJECT
    ip6tables -I INPUT -s fc00::/6 -j ACCEPT

    类似这样写

    ip6tables -I INPUT -s 前缀::/掩码 -j ACCEPT
    azure2023us
        23
    azure2023us  
       2023-02-13 09:16:53 +08:00
    上面这样写 是因为了解决 IPv6 裸奔
    azure2023us
        24
    azure2023us  
       2023-02-13 09:18:32 +08:00
    @evalfun 不需要别人扫,你去访问,就有记录
    tril
        25
    tril  
       2023-02-13 10:07:38 +08:00
    @wwbfred 视频的 15:30 左右有提到,德国电信 24 小时更改一次前缀,还介绍了这种情况下如何设置防火墙,听起来和国内一样。会不会是视频里提到的“op 把 v4 和 v6 地址自动分成了两个 dns 记录”导致的?
    acbot
        26
    acbot  
       2023-02-13 10:25:28 +08:00
    因为开放服务本身就是针对固定地址的情况所以前后缀都是动态的环境下默认配置开发端口就有困难。

    1. 在前缀也是动态的情况下,v6 可以使用负掩码做后缀匹配具体的机器,比如掩码 /::ffff 代表匹配 v6 最后一段地址是什么,以此类推。
    2. 隐私或临时地址后缀都是随机的这个地址只能禁用不能修改后缀的生成方式,而本机地址 Linux/Windows 都可以指定后缀的生成方式,比如 使用 EUI-64 方式生成后缀就相对固定,其中 Linux 还可以直接指定具体的字符串做后缀。
    wwbfred
        27
    wwbfred  
       2023-02-13 10:33:56 +08:00
    @tril 他提到的是如何把 IPV6 地址也和 IPV4 一样设置成 static 的,即使前缀发生改变。说白了就是找到那个不变量以方便编写防火墙规则。但这个方案在 OP 下就会产生前缀改变时长时间断网的问题,只是视频里没有提。由于没有固定前缀,ULA 也不能关,防止出现设备完全没有一个固定 IP 地址的情况。
    在 OP 解决这个问题之前,还是建议使用 SLAAC ,防火墙规则再找别的办法解决。还有一个问题,就是 Android 设备只支持 SLAAC ,用 OP+Android 还用 DHCPv6 现阶段简直就是给自己挖坑,还是一挖挖俩。
    wwbfred
        28
    wwbfred  
       2023-02-13 10:45:44 +08:00
    @lslqtz SLAAC 没释放 IP 是因为 Valid Lifetime 没过期,属于正常现象。使用 SLAAC 一张网卡上有新旧一大堆 IPV6 地址也是正常现象,不用管。
    SLAAC 有两个 lifetime ,Preferred lifetime 和 Valid lifetime 。如果前缀发生改变,Openwrt 会立刻通知所有设备,把之前 IP 的 Preferred lifetime 置零,这样下属系统就不会使用这个地址建立任何新的连接。等到 Valid lifetime 过期,所有使用该地址的连接都将不能再通信,地址到那时才会被释放。
    cnbatch
        29
    cnbatch  
       2023-02-14 03:40:21 +08:00
    可惜目前在动态公网环境下完美支持 NPTv6 的防火墙几乎不存在,要不然 OP 就可以用 NPTv6 解决这种问题了
    aukus
        30
    aukus  
       2023-02-15 09:25:51 +08:00
    运营商给了静态前缀 /60 ,应该怎么部署?有人知道不
    seputetto
        31
    seputetto  
       2023-02-16 01:28:06 +08:00
    不依赖前缀,其实楼里已经有人说了
    i.imgur.com/PQoBhht.png
    写 ::后缀 /::ffff:ffff:ffff:ffff
    seputetto
        32
    seputetto  
       2023-02-16 01:29:08 +08:00
    不依赖前缀,其实楼里已经有人说了

    写 ::后缀 /::ffff:ffff:ffff:ffff
    seputetto
        33
    seputetto  
       2023-02-16 01:41:40 +08:00

    2022 年的截图,NAS IPv6 后缀 ::211:32ff:feef:90cf (SLAAC)

    openwrt 路由 IPv6(1)

    openwrt 路由 IPv6(2)

    NAS IPv6
    a90405
        34
    a90405  
       2023-02-16 18:26:08 +08:00
    @questionyu nftables 不能这样写,会报错,iptables 可以。
    a90405
        35
    a90405  
       2023-02-16 18:26:59 +08:00
    @seputetto nftables 不行
    a90405
        36
    a90405  
       2023-02-16 18:40:37 +08:00
    可以了,要 luci 界面那样配置,命令行的改了挺多
    panhaipeng
        37
    panhaipeng  
       2023-03-07 14:35:26 +08:00
    按这个德国 UP 主的介绍,没有问题。并不是因为使用 DHCPv6 导致的前缀更新之后,终端没有及时更新。经过我的测试即使在使用 DHCPv6 重新拨号之后,终端是可以即时更新的,是依赖于 RA 消息。直接把 过期的前缀的 preferred_lft 时间置为 0 。楼主提到如果 “但是设备在 AP 后面的话, 前缀变更后设备收不到通知还是怎么着,前缀不会更新.” 应该是因为 RA 消息没有经过 AP 进行中继,转发到终端设备。比如如果 AP 是 OpenWRT 系统,在 AP 上对 RA-service 可以设置成 relay-mode 之类的,是不是就可以解决收不到前缀更新的通知?即使使用 SLAAC 生成的方式,如果没有收到前缀更新的 SA 通知,如果前缀变化,旧的 IPv6 应该也是无法使用了的
    panhaipeng
        38
    panhaipeng  
       2023-03-11 07:28:40 +08:00 via iPhone
    @panhaipeng DHCPv6 的确是无法及时更新变化有前缀,我上面的回复有问题。我其实用的还是 SLAAC 。
    yzc27
        39
    yzc27  
       2023-07-08 14:42:05 +08:00 via iPhone
    @questionyu 我也是 linksys 路由,只看到 ipv6 防火墙总开关,也没具体的设置。。。
    yzc27
        40
    yzc27  
       2023-07-12 13:23:36 +08:00
    @questionyu 我也在用 linksys ,但通过尝试,发现似乎::1234:5678:1234:5678/::ffff:ffff:ffff:ffff 这种写法不能用在 IPv6 Port Services 里面,请问有优雅的解决方法吗?
    questionyu
        41
    questionyu  
       2023-07-14 10:59:21 +08:00
    @yzc27 我也没有办法,要么是关闭 IPv6 防火墙,要么是换 OpenWrt 路由器拨号。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   962 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:23 · PVG 05:23 · LAX 13:23 · JFK 16:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.