V6IPv6Hub

实务篇 · 动手部署

让网站支持 IPv6:从 DNS 到服务器的完整清单 - IPv6Hub

网站改造服务器上线清单

本页目录

  1. 一、访问路径全景
  2. 二、第一层:DNS
  3. 三、第二层:网络可达
  4. 四、第三层:服务端监听
  5. 五、第四层:安全与运营
  6. 六、验证与灰度
  7. 七、几个中国环境的注意事项
  8. 八、上线检查表
  9. 小结

让网站支持 IPv6:从 DNS 到服务器的完整清单

给网站开 IPv6,本质是打通一条端到端的链路,而不是打开一个开关。这篇按访问路径的顺序,给出四层清单与逐项判据,可以直接当作上线前的检查表使用。

一、访问路径全景

用户 ──① DNS 解析(AAAA)──▶ ② 网络可达(公网 v6 地址/云安全组)
     ──③ 服务监听(nginx/后端)──▶ ④ 安全策略(防火墙/限流)
     ◀──────── 页面与静态资源全部可 v6 加载 ────────

任何一层缺失,v6 访客要么完全连不上,要么体验变差。

二、第一层:DNS

项目 要求
AAAA 记录 为主域名添加 AAAA,与 A 记录并存
子域名 www、api、静态资源域名都要逐一确认
TTL 切换前建议先调低 TTL,便于回滚
泛解析 泛解析(*.example.com)不覆盖裸域,裸域需单独配置
反向解析 如需邮件等服务,配置 ip6.arpa 下的 PTR

判据:dig AAAA 你的域名 +short 返回预期地址。

三、第二层:网络可达

场景 检查项
阿里云 ECS VPC 是否开通 IPv6、交换机是否有 v6 网段、实例是否分配 v6 地址
云安全组 是否放行了 v6 入站(很多默认规则只写了 v4 网段)
负载均衡 / CLB 实例是否支持 v6 接入,监听器是否配置了 v6
裸金属 / 自建机房 上游是否分配 v6 段并完成路由通告
CDN 是否支持 v6 接入;若仅 v4 回源,需明确回源策略

判据:从外部的 v6 网络能 ping 通或能建立 TCP 连接。

常见疏漏:只改了一条规则,忽略了"安全组按网段配置"的特性,导致 v6 侧全通或全不通。建议把 v6 规则与 v4 规则成对核对。

四、第三层:服务端监听

这里是实际改动代码/配置的地方。

nginx

server {
    listen       443 ssl;          # IPv4
    listen  [::]:443 ssl;          # IPv6
    server_name  example.com;
    # ……其余配置完全一致
}

三个必须知道的细节:

  1. listen 443 ssl; 只监听 IPv4,不会自动覆盖 v6,必须显式写 [::]。
  2. listen [::]:443 默认 ipv6only=on,因此不会顺带监听 IPv4。想让一条监听同时服务两栈,需写成 listen [::]:443 ssl ipv6only=off;(并非所有场景都推荐)。
  3. server_name 与证书都不需要修改。域名与证书和 IP 版本无关,v6 与 v4 共用同一份配置。

其他常见服务

服务 要点
Go net.Listen("tcp", ":8080") 通常同时监听两栈;若需分开可用 tcp4 / tcp6
Apache Listen [::]:443 或 Listen 443 配合 Listen [::]:443
Node.js server.listen(port) 默认监听 ::,需注意可能影响仅 v4 的客户端
数据库/中间件 若需 v6 访问,同样确认监听地址与访问控制

判据:在服务器上用 ss -lntp(或 netstat -lntp)确认端口存在 [::]:443 监听项。

五、第四层:安全与运营

这一层最容易"配完就忘",但风险最高。

项目 要点
主机防火墙 v6 规则与 v4 对等;不要只放行 v4 而默认放开 v6
频率限制 按 /64 前缀归并计数,不可按单个地址计数
黑名单/封禁 同样按 /64 粒度,否则前缀内换地址即可绕过
访问日志 字段长度、日志格式、统计口径都能容纳 v6 地址
审计与告警 来源判定同时支持 v6 的"可信代理"配置
第三方组件 WAF、统计、验证码等是否支持 v6

为什么频率限制必须按 /64? 家用宽带一般被分配一个 /64 甚至更长的前缀,前缀内可使用的地址数量是 2⁶⁴。按单地址计数意味着攻击者可以无限更换源地址绕过限流。正确做法是把同一个 /64 视为一个"来源"统一计数——这也是本站后台登录限流所采用的策略(在 nginx 层以 /64 生成限流键)。

六、验证与灰度

# 1. 从服务器本地验证两栈监听
ss -lntp | grep 443

# 2. 从有 v6 出口的机器验证可达
curl -6 -I https://你的域名
curl -4 -I https://你的域名

# 3. 用在线工具做外部视角验证
#    本站「网站 IPv6 检测」页 或 dig/web 服务

# 4. 检查页面内所有资源的域名是否都有 AAAA
for h in www static api; do dig AAAA $h.你的域名 +short; done

推荐上线方式:先发布 AAAA,观察一小段时间的错误率与延迟,再逐步放量。若出现异常,移除 AAAA 即可在 TTL 到期后回滚——这是 IPv6 上线最方便的一点:回滚成本极低。

七、几个中国环境的注意事项

八、上线检查表

# 检查项 完成
1 主域名与所有子域名均有 AAAA ☐
2 云安全组/防火墙 v6 规则与 v4 对等 ☐
3 ss -lntp 可见 [::] 监听 ☐
4 curl -6 能成功返回内容 ☐
5 页面内所有静态资源域名均可 v6 加载 ☐
6 限流与封禁按 /64 归并 ☐
7 日志与统计能正确记录 v6 来源 ☐
8 明确回滚方案(移除 AAAA) ☐

小结

下一篇:《如何正确检测 IPv6:方法、工具与结论边界》。

← 家庭网络开通 IPv6 全流程 IPv6 排障清单 →