网站支持 IPv6 实战:AAAA 记录、Nginx 双栈监听与常见问题排查

为什么现在必须考虑 IPv6

IPv4 地址早在多年前就已经分配殆尽,运营商和云厂商的出口网络早就转向了 IPv6 为主。对个人站长来说最直观的感受是:手机流量上网时,网络运营商默认就走 IPv6,如果网站只支持 IPv4,这部分用户访问时就要经过运营商侧的 NAT64 转换,速度变慢不说,偶尔还会出现打不开的情况。百度统计和谷歌的收录数据里,来自 IPv6 网络的访问比例正在逐年上升。

给网站加上 IPv6 支持,技术上叫"双栈":服务器同时拥有 IPv4 和 IPv6 地址,域名同时解析 A 记录和 AAAA 记录,用户走哪条路都能到达。配置过程并不复杂,本文以 Nginx 为例,从服务器检查、域名解析到防火墙放行,一步步讲清楚,最后列出常见坑。整个过程大概十分钟,收益却是实打实的访问速度和稳定性。

第一步:确认服务器有没有 IPv6 地址

不是所有 VPS 都默认分配 IPv6。先登录服务器检查:

ip -6 addr show
curl -6 -s https://ipv6.icanhazip.com || echo "no IPv6 connectivity"

第一条命令查看网卡上有没有全局 IPv6 地址(以 2001:、2400:、240e: 等开头的地址,fe80 开头的是本地链路地址,不算公网地址)。第二条命令测试出站 IPv6 连通性。如果没有地址,需要去 VPS 商的控制面板看是否支持 IPv6,一般大厂都提供,申请后重启网卡或服务器即可获得;小厂商如果不支持,就只能继续用 IPv4 或者考虑换一家。

第二步:域名添加 AAAA 记录

域名解析里,IPv4 对应 A 记录,IPv6 对应 AAAA 记录。去你的 DNS 管理面板(域名注册商、Cloudflare 或自建 DNS),给主机名添加一条 AAAA 记录,内容填服务器的 IPv6 地址,TTL 可以设短一点方便测试。添加完成后验证解析是否生效:

dig +short AAAA www.example.com
ping6 -c 3 www.example.com

注意:如果域名走的是 Cloudflare 等 CDN 代理,AAAA 记录需要在 CDN 侧开启 IPv6 支持,CDN 会分配自己的 IPv6 地址并回源到你的服务器;这种情况服务器本身是否支持 IPv6 反而没那么关键。如果你希望真实用户直连服务器 IPv6,需要把 CDN 的代理模式关掉(DNS only),或者确认 CDN 回源支持 IPv6。

第三步:Nginx 双栈监听配置

Nginx 监听 IPv6 的方式是在 listen 指令里写方括号地址。最简单的双栈写法是监听所有 IPv4 和 IPv6:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    # 其余配置保持不变
}

HTTPS 站点同理,把 443 端口也加上 IPv6 监听:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}

这里有一个 Nginx 的重要细节:单独写 listen [::]:80 时,Nginx 默认只监听 IPv6;而同时写 listen 80 和 listen [::]:80 时,IPv6 socket 默认开启 ipv6only,两个监听互不干扰,IPv4 和 IPv6 的流量都能正常处理,这正是我们想要的双栈效果。修改配置后先 nginx -t 检查语法,再 reload 生效。如果你的网站是 HTTPS 强制跳转,注意 http 块里也要同样加上 IPv6 监听,否则 IPv6 用户访问 http 地址时会直接连接失败而不是跳转。

第四步:防火墙放行 IPv6

很多人配完 IPv6 发现还是不通,十有八九是防火墙只配了 IPv4。iptables 和 ip6tables 是两套独立的规则表,IPv6 流量默认不受 iptables 规则约束,但如果启用了 ip6tables 或者使用了 ufw 这类封装工具,就要单独确认。使用 ufw 的话,默认会同时管理 IPv6,检查 /etc/default/ufw 里 IPV6 是否为 yes:

sudo ufw status verbose

如果输出里能看到针对 IPv6 的规则(状态列显示 v6),说明 80、443 端口对 IPv6 也是放行的。使用云厂商安全组的话,记得安全组规则里也要给 IPv6 地址段开放相应端口,部分厂商的安全组默认只处理 IPv4,需要手动添加 ::/0 的入站规则。

第五步:验证网站 IPv6 可达性

配置完成后,从服务器外部验证。可以找一台支持 IPv6 的机器(比如手机开热点后关掉 Wi-Fi,或者用在线工具),执行:

curl -6 -I https://www.example.com
curl -4 -I https://www.example.com

两条命令都返回 HTTP 200 说明双栈工作正常。常见的在线检测工具可以直接输入域名检测 AAAA 解析和 IPv6 连通性,并给出详细报告。还可以在本地电脑上用 ipv6 测试网站确认本机到服务器的 IPv6 路径没有问题。

第六步:别忘了邮件和其它服务

网站之外的服务也要一起梳理。如果你自建了邮件服务器,需要特别注意:很多反垃圾策略会检查发信 IP 的反向解析,IPv6 地址同样要有 PTR 记录,否则从 v6 网络发出的邮件可能被对方直接判为垃圾。个人站如果没有精力维护 v6 的 PTR 和 IP 信誉,一个务实的做法是邮件服务暂时只走 IPv4,等网站稳定了再逐步加上,邮件域名解析与网站域名是分开的,互不影响。

数据库和缓存服务则要反着来:MySQL、Redis 这类服务绝不要监听在公网 IPv6 地址上。很多人配防火墙时只记得 IPv4 规则,忘了 ip6tables 是独立的一套,结果数据库的 v6 端口对全网开放而不自知。最稳妥的做法是让这些服务只绑定内网地址或回环地址,从监听层面就杜绝暴露,具体可以参考本站关于网站源站 IP 泄露防护的文章,思路完全一致。

常见坑与注意事项

第一个坑是服务器商虽然给了 IPv6 地址,但默认路由没配好,表现为本机 ping 不通外网 IPv6。检查 ip -6 route show 里有没有默认路由,没有就补一条,或者直接找厂商客服,多数是机房侧没下发配置。

第二个坑是只给主域名加了 AAAA,其他子域名忘了加。博客的图片域名、API 子域都要一并检查,否则会出现页面能开、图片加载慢的割裂体验。全站启用 HTTPS 后(配置方法见本站 Nginx HTTPS 实战一文),证书本身不区分 IPv4 和 IPv6,双栈下证书不会出问题,但如果用了按 IP 计费的某些防御服务,要注意确认它对 IPv6 流量同样生效。

第三个坑是反向代理场景。如果 Nginx 反代到后端(配置见本站《Nginx 反向代理配置实战》),后端只监听 IPv4 也没关系,因为代理服务器到后端通常是内网通信,走 IPv4 即可;但代理服务器对外必须双栈,否则 IPv6 用户到代理这一层就断了。使用 Docker 部署的站点,容器默认网络是 IPv4,需要在 docker-compose 里显式映射 IPv6 或者使用支持双栈的网络模式,这一点容器部署的同学要格外注意。

第四个坑是"本机通、外网不通"。在服务器上 curl 自己的 v6 地址一切正常,但从家里或手机访问却超时,这种割裂现象九成是云厂商安全组只放行了 IPv4。登录控制台检查安全组规则里是否有针对 IPv6 地址段的 80、443 入站规则,很多厂商的默认安全组并不包含 IPv6 规则,需要手动添加。

第五个坑是程序日志里出现 ::ffff: 开头的地址。这是 IPv4 地址映射到 IPv6 空间的表示法,说明客户端实际走的是 IPv4 连接,属于正常现象,不是故障。但如果你的统计代码只按 IPv4 格式解析客户端地址,遇到纯 IPv6 用户时可能会解析失败,记得在代码里同时兼容两种格式,避免统计丢失真实访客数据。

常见问题速查

为什么手机能打开、电脑打不开?多半是电脑所在网络(比如某些公司宽带)还没有 IPv6,而手机流量网络默认走 IPv6。域名双栈解析下,能走 v6 的设备走 v6,不能走的自动退回 v4,两端都应该正常;如果手机能开而电脑打不开,先检查电脑的 DNS 是否返回了 AAAA 记录,再看电脑所在网络是否被运营商劫持了 DNS。

ping6 不通但网页能打开是怎么回事?很多云厂商和机房会过滤 ICMPv6 报文,而网页走的是 TCP 80、443 端口,两者互不影响。判断 IPv6 是否可用,以 curl 访问网页的结果为准,不必纠结 ping 不通。

服务器商不提供 IPv6 怎么办?可以先看看控制面板里是否只是默认关闭,多数大厂开通即可;确实不支持的,可以考虑给网站套一层支持 IPv6 的 CDN,让 CDN 的 v6 入口接管 v6 用户流量,回源仍然走 IPv4,这是成本最低的过渡方案。

结语

IPv6 已经不是"未来的技术",而是当下每个站长都该完成的标配。好在个人站的改造工作量很小:服务器申请地址、域名加 AAAA、Nginx 加两行监听、防火墙放行,验证通过即完成。早一天支持 IPv6,就早一天让移动网络用户获得更快的访问体验,也给网站的长期收录和访问稳定性多上一道保险。

Last modification:September 9th, 2026 at 07:59 am

Leave a Comment