固定内网动态ipv6的方案
2025 年 07 月 09 日 • 笔记
主要是飞牛NAS的ipv6后缀固定

EUI-64 是一种根据网卡的 MAC 地址 生成 IPv6 地址后 64 位(即后缀)的算法。一般MAC地址都是固定的,那生成的后64位后缀就是固定的。

现在默认openwrt上已经设置好ipv6了,但是LAN下设备都还是动态的ipv6

怎么查看ipv6是否是EUI-64的

EUI-64 简要原理

EUI-64 是一种根据网卡的 MAC 地址 生成 IPv6 地址后 64 位(即后缀)的算法。其原理如下:

  1. 将 48 位的 MAC 地址分成两部分(前 24 位 + 后 24 位);

  2. 插入 FF:FE 到中间,使之变为 64 位;

  3. 反转第 7 位(U/L 位,即从左往右数第 7 位)来标记是否是全球唯一地址。

举个例子:

  • MAC 地址:00:1A:2B:3C:4D:5E

  • 插入 FF:FE:00:1A:2B:FF:FE:3C:4D:5E

  • 将第一个字节(00)的第 7 位(U/L 位)反转:变成 02(因为 00 -> 00000000,反转第 7 位后为 00000010 = 02

最终的 Interface Identifier 是:021A:2BFF:FE3C:4D5E

脚本自动判断(Python 示例)

python
复制代码
def is_eui64(ipv6_suffix, mac_address): mac_parts = mac_address.lower().split(":") # 反转第 7 位 first_byte = int(mac_parts[0], 16) ^ 0x02 mac_parts[0] = f"{first_byte:02x}" eui64 = mac_parts[:3] + ['ff', 'fe'] + mac_parts[3:] eui64_str = ''.join(eui64) ipv6_suffix_str = ipv6_suffix.replace(":", "").lower() return ipv6_suffix_str.endswith(eui64_str) print(is_eui64("021a:2bff:fe3c:4d5e", "00:1a:2b:3c:4d:5e")) # True

命令行工具(Linux 示例)

1. 查看 IPv6 地址

bash
复制代码
ip -6 addr show

输出示例:

plain
复制代码
inet6 2001:db8:abcd:12:021a:2bff:fe3c:4d5e/64 scope global dynamic

看后缀是否有 dynamic, temporary, stable-privacy 等标记。

这类 IPv6 地址可能来自:

  • 随机生成的临时地址(Privacy Extensions)

  • DHCPv6 分配

  • 手动配置

  • Stable Interface Identifier(RFC 7217) — 基于哈希生成,不依赖 MAC

分析关键字:

字段 含义
global 全局可路由地址
dynamic 动态生成的地址(通常由 SLAAC 或 DHCPv6 分配)
noprefixroute 不会自动创建路由项(多用于网络配置或容器网络)

重点在 dynamic,这表示该地址不是手动设置的,而是通过 SLAAC(无状态地址自动配置) 或 DHCPv6 动态生成。

SLAAC + RFC 7217 生成的 Stable Privacy Address

  • 基于接口、网络前缀、主机名等多因素 + 哈希计算出一个稳定但非公开的接口标识

  • 不暴露 MAC 地址,防止隐私泄露

  • 稳定性比临时地址高

Linux 默认开启 RFC 7217 特性,如果你使用的是较新的系统(如 Ubuntu 18+ 或 CentOS 8+),很可能你现在看到的这个地址就是通过它生成的。

用如下命令验证生成方式:

bash
复制代码
cat /proc/sys/net/ipv6/conf/enp2s0-ovs/use_tempaddr
  • 值为 0:不会生成临时地址(可能是 stable)

  • 值为 1:生成 stable address

  • 值为 2:生成 stable + temporary address

修改成eui64

/etc/NetworkManager/system-connections/ 中编辑 .nmconnection 文件,将 addr-gen-mode 设置为 eui64,这是完全有效、推荐且持久化的一种方式,适用于基于 NetworkManager 管理网络配置的系统(如多数基于 GUI 的 Linux 发行版或使用 NetworkManager 的服务器配置)。

重启NetworkManager

bash
复制代码
sudo systemctl restart NetworkManager

注意:generic 类型接口特殊

generic类型接口,通常这种类型用于 OVS、桥接等情况,可能无法直接使用 NetworkManager 管理 IPv6 SLAAC 行为,或只起到桥接辅助作用。建议检查它上层桥(比如 br-xxxx)是否才是真正启用 SLAAC 的接口。

参考

手把手教你使用OpenWrt固定IPv6_哔哩哔哩_bilibili

OpenWrt 开启 IPv6 公网访问全指南 - 晨鹤部落格

Linux 通过 EUI-64 固定 IPv6 地址后缀 | ZhiChao’s Blog

OpenWrt IPv6 设置方案

上一篇
笔记
关于种子转移的问题

留言 (0)

昵称(必填)
邮箱(必填)
网址(选填)