新上的服务器配了 IPv6 地址,从另一台机器 ping 过去没反应。运维看了眼命令说:你用的是 ping,不是 ping6。
Windows 上没有 ping6 这个命令,用 ping -6,或者直接 ping IPv6 字面量。Linux 和 macOS 有独立的 ping6,新版的 iputils 里 ping 也能自动识别,ping6 只是个软链接。
链路本地地址必须带网卡
fe80:: 开头的是链路本地地址,只在一段链路上有效,而且要指定出口网卡:
ping6 -I eth0 fe80::1少写 -I 会报无效参数或者直接超时。Windows 下用百分号加接口索引:
ping -6 fe80::1%12索引号在 ipconfig 的输出里能看到,也可以用 netsh interface ipv6 show interfaces 列出来。
不通的四个常见原因
- 对端防火墙放行了 ICMPv4 却没放 ICMPv6,Windows 防火墙默认就拦。
- 本机根本没启用 IPv6 协议,ipconfig 里看不到 2001: 或 fe80: 开头的地址。
- 路由缺失,tracert -6 一看第一跳就断。
- 地址写错,IPv6 允许省略前导零,但双冒号 :: 只能出现一次。
排查从本机开始
ipconfig /all 看「IPv6 地址」这一行。没有的话,网卡属性里勾上 Internet 协议版本 6 (TCP/IPv6),或者抽查组网是不是只下发了 IPv4 前缀。本机连地址都没有,ping6 写得多对也没用。
顺序建议是从内往外:本机有地址,能 ping 通网关,再往外试。反着来最容易在防火墙那里绕半天,最后发现是网卡没起协议。
云主机上还要确认安全组放行了 ICMPv6。很多默认规则只加了 ICMP,v6 那条是单独一条,漏配就是全超时。
ping 通了但服务连不上
ping6 只验证三层可达,端口通不通得另外试。Linux 上用 curl -6 -g 加地址,Windows 上直接 telnet 到目标端口。ping 得通、端口不通,问题在监听地址或者防火墙规则,不在链路。
服务端如果只监听了 IPv4 的 0.0.0.0,IPv6 请求自然连不上。看 netstat 里有没有以冒号冒号开头的监听项,没有就说明它没开 v6。这种情况改配置比查网络快。