IPv6 详解:地址、配置与安全要点
IPv6 是 IPv4 的后继互联网协议,使用 128 位地址。它缓解地址不足,也重新设计了邻居发现、自动配置和组播等机制,但并不会自动解决所有网络安全问题。
本文于 2026-07-29 依据 IPv6 标准和 Python 当前文档复核。
1. 地址表示方法
IPv6 地址由八组十六进制数构成,例如:
1 | 2001:0db8:0000:0000:0000:ff00:0042:8329 |
每组的前导零可以省略;一段连续的全零组可以用一次 :: 压缩:
1 | 2001:db8::ff00:42:8329 |
前缀长度写在斜杠后,如 2001:db8:1234:5678::/64。2001:db8::/32 保留给文档示例,不应作为公网地址部署。
2. 常见地址类型
- Global Unicast:通常来自
2000::/3,可用于全球单播路由。 - Link-local:
fe80::/10,只在本链路有效,接口通常会自动配置。 - Unique Local:
fc00::/7,用于站点内部通信,不在公网路由。 - Multicast:
ff00::/8,IPv6 不使用 IPv4 式广播。 - Loopback:
::1。 - Unspecified:
::,表示尚未指定的地址。
同一设备可以同时拥有多个 IPv6 地址。链路本地地址在命令或 URL 中有时还需要接口作用域标识。
3. 自动配置与 DNS
主机可通过路由器通告(RA)获得网络前缀,并使用 SLAAC 自动配置地址;网络也可能结合 DHCPv6 下发额外配置。域名的 IPv6 地址记录类型是 AAAA。
部署公网服务时,应同时确认:
- 上游网络已正确路由分配的前缀;
- DNS
AAAA记录指向实际可达地址; - 防火墙对 IPv6 有明确规则;
- 监控、日志和负载均衡器均支持 IPv6;
- 双栈环境分别测试 IPv4 和 IPv6。
4. Python 中处理 IPv6
标准库 ipaddress 可以验证、归一化和计算地址:
1 | import ipaddress |
为文档测试网段生成随机主机地址:
1 | import ipaddress |
这只生成语法有效的文档示例地址,不代表地址已分配或能够公网路由。实际网络必须使用运营商或组织合法分配的前缀。
监听 IPv6 套接字的简单示例:
1 | import socket |
示例只绑定回环地址,适合本机测试。绑定 :: 会扩大监听范围,需要同步配置认证和防火墙。
5. 安全认知
IPv6 标准支持 IPsec,但“使用 IPv6 就会自动加密”是误解。是否加密取决于应用协议、隧道或具体 IPsec 策略。没有 NAT 也不等于没有防护:公网主机仍应采用默认拒绝的有状态防火墙,并允许必要的 ICMPv6,因为邻居发现、路径 MTU 探测等功能依赖它。
还应防范伪造路由器通告、邻居发现滥用、错误隧道和未纳入资产管理的临时地址。安全策略、扫描和日志必须同时覆盖 IPv4 与 IPv6。