绿联 NAS IPv6 地址后缀随机(不按 MAC 生成)的问题、原因与修复
> 实测环境:UGREEN DX4600,UGOS Pro(Debian 12,内核 6.18),2026 年 10 月。
> 推测 UGOS Pro 各机型机制一致。文中不贴具体命令和脚本,思路说清楚为主,细节欢迎评论区交流。
## 一、现象
绿联 NAS 的 IPv6 地址**后缀(接口标识符)不是按网卡 MAC 生成的**(即不是 EUI-64),而是随机派生
的(RFC 7217 "stable-privacy" 模式),在 `ip -6 addr` 里能看到地址后面跟着 `stable-privacy` 标志。
而且控制面板里**找不到任何相关设置项**,想改都没地方改。
对一般使用无感,但对"把 NAS 当服务器用"的人,这是实打实的麻烦。
## 二、为什么这对 NAS 是个大问题
路由器上的 IPv6 防火墙/端口放行规则是要写地址的。家用宽带 PPPoE 重新拨号后 IPv6 **前缀**会变,
这很正常,忍了;但 RFC 7217 的机制是"后缀 = 密钥 + 前缀 的散列"——**前缀一变,后缀也跟着变**。
这不是推测,是我本机的实测数据:同一台 NAS、同一时刻、两个前缀派生出两个完全不同的后缀:
| 前缀 | 随机派生出的后缀 |
| --- | --- |
| 240e:…:6dd0::/64(公网) | 56e3:fe00:3232:5a7c |
| fd86:…:0::/64(内网 ULA) | 16ed:439d:f29b:bdea |
也就是说,重新拨号后 NAS 的地址是**"前缀 + 后缀"全部都变**。想在路由器上给 NAS 的 IPv6 服务
(Web、相册、远程访问等)放行入站,就只剩两个选择:
1. **每次重新拨号后重配一次防火墙**;或者
2. **干脆关闭路由器的 IPv6 防火墙**——等于裸奔。
NAS 恰恰是最需要"地址可预测"的设备类型:它天生就是用来开服务端口的。桌面系统默认随机化地址
是隐私考虑,说得通;但 NAS 是服务器,地址稳定性的优先级应该更高。
## 三、原因(排查结论)
逐层排查后确认:这不是内核限制,也不是 systemd-networkd、dhclient 的问题,而是 **UGOS
自己的网络服务(`net_serv`)在主动写**。
`net_serv` 在**每次启动(也就是每次开机)**、以及**在控制面板里点"刷新 IPv6 地址"**时,都会
把网口的 `net.ipv6.conf.eth0.addr_gen_mode` 强制写回 `2`(随机派生模式)。这个值写死在程序里,
没有配置文件入口,UI 也不暴露任何开关——所以用户"无法修改"。
顺带一提:UGOS 并没有开启会轮换的"临时地址"(`use_tempaddr` 是 0),所以地址其实是稳定的,
只是由一个随机密钥派生,既不能从 MAC 推导,也不能在重新拨号后保持。
## 四、修复思路(简单,几句话说完)
有 SSH 权限的话,两步就能修:
1. 把网口的 `addr_gen_mode` 从 `2` 改回 `0`(`0` 就是 EUI-64,按 MAC 生成);
2. 将该网口的 IPv6 **瞬时"关闭→再开启"**(`disable_ipv6` 快速 `1`→`0`),内核会立刻重新协商地址。
这就是一个**不经过控制面板**的"刷新",几秒钟完成,IPv4 完全不受影响。
改完后地址后缀就永久固定为本机 MAC 派生的值,重新拨号只换前缀。配合支持"只匹配后 64 位"的防
火墙规则(OpenWrt/nftables、爱快等都支持),防火墙一次配置终身有效。
唯一的小尾巴:`net_serv` 每次开机都会把它改回去。所以要么每次重启后手动改一次,要么做一个开机
后自动纠正一次的小服务(跑十几秒就退出,无常驻开销),一劳永逸。需要具体做法的可以评论区交流。
