只有 IPv6 路径不通:curl -6 超时或报 Network is unreachable,IPv4 正常。
客户端通过 IPv6 连接超时、拒绝或报 Network is unreachable,同一服务的 IPv4 地址正常;双栈客户端可能只是变慢,因为 Happy Eyeballs 在 IPv6 超时后回退到 IPv4。容器、云主机和 Kubernetes 双栈环境都可能出现。
先确认本机有没有全局 IPv6 地址和默认路由:
ip -6 addr show
ip -6 route show
ip -6 route get 2606:4700:4700::1111
sysctl net.ipv6.conf.all.disable_ipv6 net.ipv6.conf.default.disable_ipv6
sysctl net.ipv6.conf.eth0.accept_ra net.ipv6.conf.all.forwarding # eth0 换成实际网卡名
ip -6 neigh
再做端到端测试,并确认服务确实监听在 IPv6:
ping -6 -c 3 2606:4700:4700::1111
tracepath6 2606:4700:4700::1111
curl -6 -v --max-time 5 https://example.com/
dig +short AAAA example.com
ss -6 -lntp
检查防火墙时不要只查 IPv4 规则:
ip6tables -S
nft list ruleset
grep -i '^IPV6' /etc/default/ufw
易误判:ping6 ::1 或链路本地地址能通,不代表全球 IPv6 可用;链路本地地址需要 %eth0 scope,且 disable_ipv6=0 也不代表已经拿到地址或默认路由。IPv6 下 ICMPv6 是协议必需(邻居发现、PMTUD),封掉它会让 TCP 一起坏,而不是仅仅不能 ping。
fe80:: 链路本地地址;云子网未分配 IPv6 CIDR 或路由表缺 ::/0。0.0.0.0 或 AF_INET),ss -6 -lntp 看不到监听。accept_ra=0,或 forwarding=1 时默认忽略 RA(需要 accept_ra=2)。tentative/dadfailed,或存在地址冲突。::/0,实例/网卡分配 IPv6 地址。::,确认 IPV6_V6ONLY 行为;Nginx 增加 listen [::]:443 ssl;。tracepath6 验证 PMTU。ipFamilyPolicy、CNI、kubelet --node-ip);Docker 启用 ipv6 和 fixed-cidr-v6。accept_ra=2(forwarding=1),或改用静态地址/路由;检查 DAD 状态。curl -6、dig AAAA、ss -6、tracepath6,避免只测本机回环。fe80:: 地址且能 ping 通,为什么仍可能无法访问公网 IPv6?fe80:: 是链路本地地址,只能在同一链路使用;还需要全局地址、默认路由和上游 IPv6 连通性。ipFamilyPolicy)、CNI 是否支持 IPv6,以及 CoreDNS 是否返回 AAAA。