IPv6 ULA 生成器
技术详情
IPv6 ULA 生成器的工作原理
工具功能
IPv6 ULA 生成器遵循 RFC 4193 §3.2.2 中的算法,生成一个不太可能与其他站点冲突的 /48 唯一本地地址(Unique Local Address)前缀。提供一个 MAC 地址(或让工具随机选择一个),它会从 EUI-64 与当前 NTP 时间戳拼接后的 SHA-1 中推导出 40 位 Global ID。输出包括 /48 前缀、Global ID 与 Subnet ID,以及一个示例 /64 主机地址。
常见开发者使用场景
网络管理员使用 ULA 构建不依赖全球可路由地址空间的私有 IPv6 网络。实验室与家庭实验室运营者通常每个站点只选择一次 ULA 前缀,然后将其复用于所有内部 VLAN 和覆盖网络。它们也适用于云 VPC、容器网络以及隔离环境(air-gapped),在这些场景中全球 IPv6 不可用或不希望使用。
数据格式、类型或变体
ULA 位于 fc00::/7 地址块中。当本地分配(L)位设置为 1 时,实际前缀变为 fd00::/8。完整的 /48 布局为:8 位前缀(fd)+ 40 位 Global ID + 16 位 Subnet ID + 64 位 Interface ID。Global ID 是对 EUI-64 ‖ NTP 时间戳进行 SHA-1 计算后最低的 40 位;该工具通过在提供的 MAC 中插入 FFFE 并翻转 universal/local 位来推导 EUI-64。
常见陷阱与边界情况
不要选择 fd00:0:0::/48 或其他过于简单的前缀——其核心目的就是随机化并降低冲突概率。fc00::/8 这一半(L 位 = 0)是保留的,如今不应使用。ULA 无法在公共互联网中路由;如果你需要可在互联网路由的 IPv6,请向你的 ISP 或 RIR 申请 Global Unicast 前缀。
何时使用此工具而非代码
在搭建新站点时使用该浏览器工具,一次性选定一个你将永久复用的前缀。在代码中,Python 的 ipaddress、Go 的 net/netip 或 Rust 的 ipnet 等库可以在生成或校验 ULA 的同时处理 Global Unicast 地址,并提供一致的错误处理。