把 IPv4 用了 20 年的人第一次看 IPv6 都会愣住:2400:da00:e003:0000:0000:0000:0000:0001——8 个 16 进制段 + 双冒号缩写 + 多种地址类型——比 IPv4 的 192.168.1.1 复杂得多。
但其实只要认识 6 个核心前缀就够用 90% 的场景。这篇按”地址段对应什么场景”反向梳理,再讲清缩写规则、SLAAC / DHCPv6 分配机制、双栈 socket 和反向 DNS。
6 个必须记的 IPv6 前缀
把 IPv6 地址类型按出现场景分类:
| 前缀 | 类型 | 出现场景 | 类比 IPv4 |
|---|---|---|---|
::1/128 | 回环 | 本机自己(ping6 ::1) | 127.0.0.1 |
fe80::/10 | 链路本地 | 同网段内通信(路由器邻居发现) | 169.254.0.0/16(DHCP 失败) |
fc00::/7(实际 fd00-fdff) | 本地唯一 ULA | 内网”私有 IPv6” | 10.0.0.0/8、192.168.0.0/16 |
2000::/3(即 2000-3fff) | 全局单播 GUA | 公网 IPv6 | 公网 IPv4 |
ff00::/8 | 组播 | 路由协议、邻居发现、应用层组播 | 224.0.0.0/4 |
::ffff:0:0/96 | IPv4-mapped | 双栈 socket 内核表示 | — |
速读:fe80 链路、fd 内网、2 或 3 公网、ff 组播——其他段保留或废弃,正常网络见不到。
每个网卡的 fe80:: 链路本地
打开 macOS / Linux 终端跑 ifconfig,每个网卡都有:
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST>
inet 192.168.1.50 netmask ...
inet6 fe80::8a3:34ff:fe56:7890%en0 prefixlen 64 ...
inet6 2400:da00:e003::a12:34ff:fe56:7890 prefixlen 64 ...
fe80:: 这个地址特点:
- 每张网卡有一个,开机自动生成(基于 MAC 地址或随机算)
- 不出本网段——路由器收到目标是
fe80::的包不转发 - 必须带 zone id(
%en0在 macOS、%eth0在 Linux、%4在 Windows)——告诉系统从哪个网卡发出 - 核心用途——路由器邻居发现 NDP(IPv6 版 ARP)、链路内 ping 测试
实战场景:路由器配置时常用 fe80::1%eth0 而不是公网 IPv6——前者稳定不随 ISP 前缀变化。
fd00:: ULA 本地唯一私有 IPv6
IPv4 私有段是 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16——大家都用,跨公司一并就冲突。
IPv6 用 fc00::/7 ULA(Unique Local Address),前缀里有 40 位随机数保证全球唯一:
fd XX XX XX XX XX XX:XX:XX:XX::/64
└┬┘ └─────┬─────┘ └─────┬─────┘
ULA标识 40位随机数 子网号
生成自己的 ULA 前缀:
- 工具不直接生成(避免被滥用)
- 标准方法:取 EUI-64 + 时间 + SHA1 算 40 位
- 实践:在线 ULA generator 或路由器后台一键生成
- 典型:
fd1a:2b3c:4d5e::/48,子网 0001 → 0xff
为什么需要 ULA:(1) 不接公网时内网通信不依赖运营商;(2) 双栈环境内网默认走 ULA、外网走 GUA;(3) 不需要 NAT66——IPv6 ULA 内网直连内网,地址空间够。
2000::/3 公网 GUA
公网 IPv6 实际只用 2000::/3 这段(首字节二进制 001xxxxx)——也就是 2000:: 到 3fff:ffff:...:ffff。
| 注册区域 | IPv6 段(部分) |
|---|---|
| APNIC(亚太) | 2001:200::/23、2400::/12、2401::/16 … |
| ARIN(北美) | 2001:400::/23、2600::/12 … |
| RIPE(欧洲) | 2001:600::/23、2a00::/12 … |
| AFRINIC(非洲) | 2001:4200::/23、2c00::/12 … |
| LACNIC(拉美) | 2001:1200::/23、2800::/12 … |
中国家宽 IPv6:
| 运营商 | 典型前缀 |
|---|---|
| 中国电信 | 2408::/20、240e::/16 |
| 中国联通 | 2408::/20 部分、2409::/20 |
| 中国移动 | 2409::/20 |
| 教育网 CERNET | 2001:da8::/32 |
看到 240e:... 就是中国电信家宽 / 中国联通——大概率个人用户。
IPv6 缩写规则
IPv6 完整 128 位写出来 39 字符太长,两条缩写规则:
规则 1:每段去前导 0
2001:0db8:0000:0000:0a3f:8a2e:0000:0001
↓ 去每段前导 0
2001:db8:0:0:a3f:8a2e:0:1
规则 2:连续多段全 0 用 :: 替代(一次)
2001:db8:0:0:a3f:8a2e:0:1
↓ 把最长的全 0 段缩成 ::
2001:db8::a3f:8a2e:0:1
注意事项:
::每个地址只能出现一次——多个会产生歧义无法还原- 单段的 0 不必用
::替换 - 推荐压缩最长的全 0 段
- 全 0 地址
0:0:0:0:0:0:0:0可写::、回环0:0:0:0:0:0:0:1写::1
实战例题:
| 完整 | 缩写 |
|---|---|
fe80:0:0:0:8a3:34ff:fe56:7890 | fe80::8a3:34ff:fe56:7890 |
2001:db8:0:0:1::1 | 错 —— 一个地址不能有两个 :: |
2001:db8:0:0:1:0:0:1 | 2001:db8::1:0:0:1(压前面)或 2001:db8:0:0:1::1(压后面) |
防火墙规则、ACL 配置粘贴时若不接受 ::——切到工具的”完整形式”栏直接复制完整 39 字符。
SLAAC vs DHCPv6 vs DHCPv6-PD
IPv6 地址分配机制比 IPv4 多 / 复杂:
SLAAC(无状态自配置)
- 路由器周期性发 RA(Router Advertisement),通告 “本网段前缀
2400:da00:e003::/64” - 主机收到后自己拼地址:前缀 + EUI-64 / 随机数
- 不需要 DHCP 服务器,每台机器独立计算
优点:零配置、抗服务器宕机、扩展性好。缺点:服务器不知道哪台机器是哪个 IP(无中心化记录)。
DHCPv6(有状态)
- 主机发 SOLICIT 请求
- DHCPv6 服务器分配并记录
- 类似 IPv4 DHCP
优点:可记 IP-MAC-Hostname 绑定,可下发 DNS / NTP。缺点:Android 至今不支持——Google 强推 SLAAC。
DHCPv6-PD(Prefix Delegation 前缀委派)
- 你的家庭路由器向 ISP 申请前缀
- ISP 委派一段
/60或/56给路由器 - 路由器再用 SLAAC / DHCPv6 给内网子网
这是家宽典型方式——你的路由器收到运营商委派的 /60(16 个 /64 子网)后,按需切给 WiFi、LAN、访客网络等。
| 场景 | 推荐机制 |
|---|---|
| 家用 / 移动 / WiFi | SLAAC + RA-RDNSS |
| 企业内网(要管控) | DHCPv6(但失去 Android) |
| 双栈(要 DNS) | SLAAC + RDNSS in RA |
| 运营商家宽下放 | DHCPv6-PD |
双栈 socket 与 ::ffff: 地址
Linux / BSD / Windows 默认双栈 socket:一个 IPv6 socket 监听 ::,同时接收 IPv4 和 IPv6 连接。
IPv4 客户端连进来时,在 IPv6 socket API 层面表现为:
源 IP: ::ffff:192.0.2.1
端口: 12345
::ffff:192.0.2.1 就是 IPv4 192.0.2.1 在 IPv6 表示层的”内嵌”形式。
实战影响:
- Java / Go / Node 默认监听 IPv6——但
netstat -an看到的是:::8080同时接 IPv4 v6 - 日志里看到
::ffff:开头——拆出末尾 32 位还原 IPv4,再做地理 / WHOIS 查询 - 想纯 IPv4 监听——绑定
0.0.0.0:8080而不是:::8080 - 想纯 IPv6 监听——设 socket 选项
IPV6_V6ONLY=1
工具的”IP 转换”模块输入 ::ffff:192.0.2.1 自动拆出 IPv4 部分。
IPv6 反向 DNS PTR
IPv4 的反向 DNS:1.2.3.4 → 4.3.2.1.in-addr.arpa。
IPv6 的反向 DNS 复杂得多——每个 16 进制 nibble 一节点:
2001:db8::1
↓ 展开 32 nibble
20010db8000000000000000000000001
↓ 逆序 + 每字符一节点 + ip6.arpa
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa
73 字符长的字符串。手算容易错——工具自动算好直接复制。
实战用途:
- 邮件服务器——postfix / exim 收信时反查发件方 IP 的 PTR,没设的服务器被视作可疑(SPF/DKIM 之外的另一道关)
- 日志分析——访问日志的 IPv6 来源反查域名,识别是不是已知服务(Google bot、AWS、Cloudflare)
- DNSSEC 部署——正向 + 反向都要签
自建邮件服务器 IPv6 出口:(1) 在域名 DNS 区里必须配 IPv6 PTR;(2) IPv6 PTR 通常由运营商委派给你的整段 /64——你自己起 NS 服务器或在运营商面板配。
几个常见误区
误区 1:以为 IPv6 不需要防火墙
IPv6 没有 NAT,每台设备都有公网 IPv6——比 IPv4 内网更危险。路由器和操作系统都必须开 IPv6 防火墙默认拒绝入站。
误区 2:以为有 IPv6 就能直连家里
家用路由器默认拦截入站 IPv6——和 IPv4 端口转发一样要在路由器里加放行规则。好处:不需要 NAT 映射,直接放行端口即可。
误区 3:把 ::ffff:192.0.2.1 当成 IPv6 地址
它只是 IPv6 socket API 表示层,不在网络上传输。日志看到这种地址 → 拆出末尾 IPv4 即可。
误区 4:以为 IPv6 比 IPv4 更慢
实测多数场景 IPv6 直连更快——少了 NAT、运营商 IPv4 通常 CGNAT 多一跳。但部分服务的 IPv6 端口路由优化不足会更慢——双栈环境主机会优先尝试 IPv6 失败再 fallback IPv4(Happy Eyeballs 算法)。
误区 5:把 2001:db8::/32 段当成可用公网
2001:db8::/32 是 RFC 3849 规定的文档示例段——和 IPv4 的 192.0.2.0/24、198.51.100.0/24、203.0.113.0/24 同性质,写教程用,不会路由。
双栈环境的运维速记
| 任务 | IPv4 命令 | IPv6 命令 |
|---|---|---|
| ping | ping 1.2.3.4 | ping6 2001:db8::1 |
| 路由表 | ip route | ip -6 route |
| 邻居 | arp -a | ip -6 neigh |
| 监听端口 | netstat -anp4 | netstat -anp6 |
| nslookup | dig A example.com | dig AAAA example.com |
| curl | 自动选 IPv6 优先 | curl -6 https://... 强制 |
| ssh 链路本地 | — | ssh fe80::abc%eth0 |
实战诊断流程:
- 看
ip -6 addr确认本机 IPv6 地址是2400::还是fe80::还是 fdxx ping6 ::1确认 IPv6 协议栈正常ping6 fe80::路由器地址%网卡名确认本网段通ping6 2001:4860:4860::8888(Google DNS IPv6)确认公网通dig AAAA ipv6.google.com确认 DNS 解析 IPv6
一句话总结
fe80 链路、fd 内网、2 或 3 公网、ff 组播、::ffff: IPv4 内嵌——记住这五个前缀就识别 90% 的 IPv6 场景。SLAAC 是主流分配方式,DHCPv6-PD 是运营商委派,反向 DNS 把 32 nibble 逆序加 .ip6.arpa——工具自动算好。
IPv6 没有 NAT,每台设备都暴露在公网——别忘了路由器和系统的 IPv6 防火墙。需要算 IPv4 CIDR 子网、AWS VPC 切分,见 [[ip-tools]] 的另一篇 CIDR 速查。