Plainnotes

监听 0.0.0.0 和 :: 不是一回事

2025-05-28 · 2 分钟网络

ss -lntp 里有的服务显示 0.0.0.0:80,有的显示 *:80 或 [::]:80。差别在于是否接受 IPv6。

Linux 默认 net.ipv6.bindv6only=0,绑 :: 的套接字同时接受 IPv4(映射成 ::ffff:1.2.3.4)。但绑 0.0.0.0 的只接受 IPv4。

所以:

  • 只写 listen 80; 的 nginx 在某些版本里只绑 IPv4,IPv6 用户连不上。
  • 显式写 listen [::]:80; 才覆盖 IPv6。
  • 如果 bindv6only=1,:: 也不再接受 IPv4,两边都要显式监听。

排查“部分用户连不上”时,先确认 ss 里有没有 [::],再用 curl -6 和 curl -4 分别试。