用ipconfig查IPv6地址时,需区分fe80::链路本地地址(不可跨路由)、fc00/fd00唯一本地地址(不对外路由)及2001:/2400:/2600:等全球单播地址(可公网访问),并注意%后缀仅用于本机标识,对外服务必须使用无后缀的全球单播地址。

Windows 用 ipconfig 查 IPv6 地址,但别只看第一行
运行 ipconfig 后,每个网络适配器下会列出多个 IPv6 地址,常见类型包括:
-
fe80::/10开头的链路本地地址(如fe80::a3c4:9d17:14d0:da57%12)——仅限本机与同网段设备通信,不能跨路由器 -
2001:或2408:等开头的全球单播地址(如2001:da8:jb51:75:a3c4:9d17:14d0:da57)——这才是真正的公网 IPv6 地址,可被外网访问 -
::1是环回地址,等价于 IPv4 的127.0.0.1,和网络无关
容易踩的坑:很多人复制了带 %12 后缀的 fe80:: 地址去测试远程连接,结果必然失败。真正要对外服务时,必须确认你用的是无百分号、且前缀非 fe80 / fc00 / fd00 的那个地址。
macOS 和 Linux 用 ifconfig 或 ip -6 addr show
ifconfig 在较新 macOS(13+)和多数 Linux 发行版中已逐步被弃用,推荐优先用 ip -6 addr show。它只显示 IPv6 相关信息,更干净:
ip -6 addr show | grep 'inet6.*global'
输出中带 global 标签的那行才是可用的公网 IPv6 地址;带 link-local 的就是 fe80:: 类型,忽略即可。
注意:ifconfig 输出里 IPv6 地址可能被折行,或混在 IPv4 行后面,肉眼容易漏看。而 ip -6 的结构化输出能避免这个问题。
查到的 IPv6 地址带双冒号 ::,怎么还原成完整格式?
IPv6 缩写中的 :: 表示「一串连续的 0 组」,但具体补多少组 0,得靠总长度反推:8 组 × 16 位 = 128 位。例如:
-
2001:db8::1→ 补足后是2001:0db8:0000:0000:0000:0000:0000:0001(中间缺了 6 组 0) -
fe80::a3c4:9d17:14d0:da57→ 是fe80:0000:0000:0000:a3c4:9d17:14d0:da57
实际开发或配置中,绝大多数场景(如 Nginx listen、Node.js server.listen)都接受缩写形式,无需手动展开。只有少数老旧工具或日志解析脚本对格式敏感,才需要标准化处理。
浏览器查到的 IPv6 和本地命令查到的不一致,哪个才算数?
浏览器访问 https://whatismyipaddress.com 或类似网站,返回的是你出口路由器的 WAN 口 IPv6 地址,也就是运营商分配给你的公网前缀下的地址;而 ipconfig 或 ip -6 查到的是你本机获得的地址,通常由路由器通过 SLAAC 或 DHCPv6 分配。
两者可能不同,原因有:
- 你的路由器启用了 IPv6 前缀委派(Prefix Delegation),但未正确向下分发,导致本机没拿到全球单播地址,只拿到
fe80:: - 运营商只给了 /64 前缀,路由器却试图分出 /64 给多个子网,造成冲突或降级为本地链路地址
- 防火墙或隐私扩展(
temporary addresses)让系统生成了随机接口 ID,每次重启变一次,但网站看到的是稳定路由出口地址
真正决定“能不能被外网访问”的,是你本机是否拥有一个有效的、非 fe80::/10 的全球单播地址,并且该地址对应的端口在路由器上做了正确的 IPv6 转发(不是所有家用路由器都支持 IPv6 端口转发)。











