SLAAC生成的后缀似乎依赖前缀, 前缀和变更SLAAC生成的后缀也会变.
ArchLinux Windows11, 在我这里这两个系统是这样的.
可以用下面的命令生成一个自定义后缀的地址, 是前缀变更了需要再次运行, 有别的办法吗?
ip token set ::xxx dev eth0
1
raysonx 2023-02-12 17:11:25 +08:00
> 两个地址后缀都会改变是正常的吗?
临时地址的后缀一定时间后会自动变更。 非临时地址的话,其中 DHCPv6 分配的地址,后缀是否变更是由 DHCPv6 服务器控制的,通常情况下只要前缀不变且设备一直在线,就能在过期前自动续期。 SLAAC 分配的地址,只要前缀不变,后缀就不变。 > DHCPv6 下发的固定后缀的地址不会变, 但是设备在 AP 后面的话, 前缀变更后设备收不到通知还是怎么着,前缀不会更新. 这是 DHCPv6 的固有缺陷,解决方法就是把租期设置得短一些,这样下次续期的时候就会获得新前缀。 更彻底的解决方法是不用 DHCPv6 ,改用 SLAAC 。 |
2
a90405 2023-02-12 17:32:36 +08:00
用 SLAAC 的地址
DHCPV6 简直没法用,更新非常不及时。 |
3
Tweak7136 OP |
4
evalfun 2023-02-12 18:04:10 +08:00
我直接放开我需要的端口,不折腾了。反正 v6 的地址空间这么大,应该不会有人去扫吧
|
5
raysonx 2023-02-12 18:51:05 +08:00
在用 SLAAC 的时候,路由器只会下发前缀,后缀是由设备自己控制的。部分设备可以设置为固定后缀,这样在前缀变化时后缀也不会变。
然后路由器可以使用掩码::ffff:ffff:ffff:ffff 按后缀匹配设备,路由器支持 ip6tables/nftables 规则就可以做到。 |
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 这样的话前缀如何变也是没有关系的,总是针对我这一个设备的,不对其他设备有影响。 |
8
bigbbhh 2023-02-12 21:02:46 +08:00 1
为什么不根据 mac 地址写防火墙呢?
|
9
yyysuo 2023-02-12 22:01:22 +08:00
关注,重启一下主路由,局域网内有 ipv6 的设备上网都不正常的了,必须要重启 ap 才可以。
|
10
465456 2023-02-12 22:38:11 +08:00
@evalfun 我也一样,公网 IPv4 ,openwrt 防火墙设置关闭 ipv4 和 ipv6 的 ping ,再开放 ipv6 某个端口自己使用
|
11
1423 2023-02-12 22:54:29 +08:00 5
|
12
Tweak7136 OP @yyysuo 只是要上网的话,把 dhcp 的租期设置成 2m 就可以了。slaac 的话,openwrt 默认应该就是正常工作的,前缀会自己标记 Deprecated 。
|
14
1423 2023-02-12 23:00:20 +08:00
|
15
LnTrx 2023-02-13 00:09:56 +08:00
这是 RFC7217 定义的安全机制 stable privacy addresses 。如果是本来就暴露的纯服务端,SLAAC 的随机性没啥意义,那设成固定就好。
对于 SLAAC 有意义的一般设备,个人还是推荐把防火墙的重点转移到终端而非网关。 |
16
yyysuo 2023-02-13 00:41:57 +08:00
关注,重启一下主路由,局域网内有 ipv6 的设备上网都不正常的了,必须要重启 ap 才可以。
@Tweak7136 能解决我主路由重启几次,局域网内设备就分配到几个 ipv6 地址的问题么? |
17
wwbfred 2023-02-13 03:34:05 +08:00
@1423 不行,你发的这个是德国经验,国内绝大多数的前缀都是动态的,基本上是几十个小时左右就会和 IPV4 一起变,这样不用 ULA 会产生非预期行为,比如在某段时间使用别人家前缀下的 IP ,并且你的局域网设备没有任何一个固定 IP 地址。
同时静态分配也会失效,路由器必须通过某种方式告诉下属设备前缀变了。在 Openwrt 下,DHCPv6 不能很好地处理这个问题,会直接导致前缀改变的情况下 IPV6 设备断网,所以只有用 SLAAC ,把之前 IP 的生存期调零,然后让设备自己决定自己的地址。 |
18
wwbfred 2023-02-13 03:40:20 +08:00
@1423 调租期属于扬汤止沸行为,治标不治本,很不美观。没有必要的理由,尽量不要使用这种妥协方案,建议 OP 用户使用 SLAAC 解决这个问题。
|
19
lslqtz 2023-02-13 07:04:23 +08:00
我自己一直使用 DHCPv6, 原因是因为某天看 IP 地址时发现有很多个无效 IPv6 地址, 最后发现 SLAAC 获得的地址即使失效了似乎也不会自动被释放. 就这一两年的体验来看, 基本没有什么大问题 (个人习惯使用超短租期), 但是 @wwbfred 提到的现象确实是存在的. 在租期未到期时, 设备可能会选择释放无效的 IPv6 地址进入单栈真空期, 也有可能不释放并导致这段时间的 IPv6 请求全部 Timeout.
关于静态地址分配, DHCPv6 可以保证后缀不随前缀变化, 但 OpenWrt 使用的 odhcpd 有问题, 会给一个设备的不同 NIC 以相同 DUID 分配相同的地址. |
20
lslqtz 2023-02-13 07:07:44 +08:00
如果是要写防火墙, 我不太懂防火墙, 但是也许你可以针对接口和前缀开头几位 (例如 240e 等) 提高范围而不是具体的地址段写?
|
21
lifanxi 2023-02-13 07:53:20 +08:00 via Android
我问过一模一样的问题,答案就是防火墙规则只写后缀匹配就可以了。
|
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 |
23
azure2023us 2023-02-13 09:16:53 +08:00
上面这样写 是因为了解决 IPv6 裸奔
|
24
azure2023us 2023-02-13 09:18:32 +08:00
@evalfun 不需要别人扫,你去访问,就有记录
|
25
tril 2023-02-13 10:07:38 +08:00
@wwbfred 视频的 15:30 左右有提到,德国电信 24 小时更改一次前缀,还介绍了这种情况下如何设置防火墙,听起来和国内一样。会不会是视频里提到的“op 把 v4 和 v6 地址自动分成了两个 dns 记录”导致的?
|
26
acbot 2023-02-13 10:25:28 +08:00
因为开放服务本身就是针对固定地址的情况所以前后缀都是动态的环境下默认配置开发端口就有困难。
1. 在前缀也是动态的情况下,v6 可以使用负掩码做后缀匹配具体的机器,比如掩码 /::ffff 代表匹配 v6 最后一段地址是什么,以此类推。 2. 隐私或临时地址后缀都是随机的这个地址只能禁用不能修改后缀的生成方式,而本机地址 Linux/Windows 都可以指定后缀的生成方式,比如 使用 EUI-64 方式生成后缀就相对固定,其中 Linux 还可以直接指定具体的字符串做后缀。 |
27
wwbfred 2023-02-13 10:33:56 +08:00
@tril 他提到的是如何把 IPV6 地址也和 IPV4 一样设置成 static 的,即使前缀发生改变。说白了就是找到那个不变量以方便编写防火墙规则。但这个方案在 OP 下就会产生前缀改变时长时间断网的问题,只是视频里没有提。由于没有固定前缀,ULA 也不能关,防止出现设备完全没有一个固定 IP 地址的情况。
在 OP 解决这个问题之前,还是建议使用 SLAAC ,防火墙规则再找别的办法解决。还有一个问题,就是 Android 设备只支持 SLAAC ,用 OP+Android 还用 DHCPv6 现阶段简直就是给自己挖坑,还是一挖挖俩。 |
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 过期,所有使用该地址的连接都将不能再通信,地址到那时才会被释放。 |
29
cnbatch 2023-02-14 03:40:21 +08:00
可惜目前在动态公网环境下完美支持 NPTv6 的防火墙几乎不存在,要不然 OP 就可以用 NPTv6 解决这种问题了
|
30
aukus 2023-02-15 09:25:51 +08:00
运营商给了静态前缀 /60 ,应该怎么部署?有人知道不
|
31
seputetto 2023-02-16 01:28:06 +08:00
|
32
seputetto 2023-02-16 01:29:08 +08:00
|
33
seputetto 2023-02-16 01:41:40 +08:00
|
34
a90405 2023-02-16 18:26:08 +08:00
@questionyu nftables 不能这样写,会报错,iptables 可以。
|
36
a90405 2023-02-16 18:40:37 +08:00
可以了,要 luci 界面那样配置,命令行的改了挺多
|
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 应该也是无法使用了的
|
38
panhaipeng 2023-03-11 07:28:40 +08:00 via iPhone
@panhaipeng DHCPv6 的确是无法及时更新变化有前缀,我上面的回复有问题。我其实用的还是 SLAAC 。
|
39
yzc27 2023-07-08 14:42:05 +08:00 via iPhone
@questionyu 我也是 linksys 路由,只看到 ipv6 防火墙总开关,也没具体的设置。。。
|
40
yzc27 2023-07-12 13:23:36 +08:00
@questionyu 我也在用 linksys ,但通过尝试,发现似乎::1234:5678:1234:5678/::ffff:ffff:ffff:ffff 这种写法不能用在 IPv6 Port Services 里面,请问有优雅的解决方法吗?
|
41
questionyu 2023-07-14 10:59:21 +08:00
@yzc27 我也没有办法,要么是关闭 IPv6 防火墙,要么是换 OpenWrt 路由器拨号。
|