企业出海 IPv6 双栈架构实战:VPC 网段规划、NAT64 与仅出站网关、K8s 双栈与分阶段迁移(2026版)
Meta Description: 出海业务要不要开 IPv6?
- 一句话结论:IPv6 不是一个"开关",是一次安全边界的重做
- 本文边界:与站内相邻五篇怎么分工
- 为什么 2026 年 IPv6 从"合规加分项"变成"硬约束"
- 地址账:动手前必须算清三个数
- 参考架构:三种边界,一条单向通道
- 三类子网:谁跟谁能通,一张矩阵说清
- 多云能力对照:三家给的积木不一样
- 实操一:在 AWS 上从零建一个双栈 VPC
Meta Description: 出海业务要不要开 IPv6?本文给出双栈 VPC 的地址规划账(/56 与 /64 怎么切)、AWS/阿里云/腾讯云能力对照表、NAT64 与仅出站网关的取舍、EKS 与 kubeadm 双栈实操命令、IPv6 特有的 8 个安全坑和 90 天四阶段迁移路线。
关键词: IPv6 双栈、VPC 网段规划、NAT64、仅出站网关、Kubernetes 双栈、出海网络架构
一句话结论:IPv6 不是一个"开关",是一次安全边界的重做
如果你的用户里有东南亚、印度、中东或欧美的移动端流量,2026 年不开 IPv6 已经在真实丢单;但千万不要"全站一键开启双栈"——那会让内网机器的"隐身"属性一夜消失。正确顺序是三步:入口先行(负载均衡/CDN 加 AAAA 记录,只影响外部可达性)、出站收紧(用仅出站网关或 NAT64 让内部不发散)、内部最后(IPv6-only 新集群从第一天就规划 /64,老系统留在 IPv4 不动)。判断能不能动手的唯一硬指标不是"地址够不够",而是你有没有一套能对 IPv6 生效的安全组/防火墙与流量日志。
很多团队对 IPv6 的想象停留在"地址多到用不完",于是把它当成一次 DNS 记录变更。真正的坑全在别处:IPv4 时代内网之所以安全,靠的是 NAT 天然的单向性——外部无法主动连进来;而 IPv6 是端到端寻址,一旦给子网开了公网路由并把 ::/0 写进出站规则,你的数据库就从"不在公网上"变成"在公网上但没有密码"。这不是配置错误,是范式切换。所以本文不会教你点哪个按钮,而是给出一套能过评审的地址账、边界模型和迁移节奏。
本文边界:与站内相邻五篇怎么分工
站内网络类文章已经写得很密,划清边界免得重复:
- VPC 与子网的基础概念、路由表、安全组:见 云网络架构指南,本文只讲 IPv6 带来的增量差异,不复述 IPv4 基础。
- 跨云专线、VPN、骨干网:见 多云网络互通与 Transit 架构。本文涉及 IPv6 在专线/隧道上的承载,但不展开 BGP 选路。
- 出站流量的私有化收敛:见 多云出站与私有访问架构。那篇讲"NAT 网关怎么做集中出口",本文讲"IPv6 时代这件事为什么必须重做一遍"。
- 零信任与身份化边界:见 多云零信任网络架构。IPv6 是零信任最好的落地前提(每个工作负载可有唯一地址),本文只引用结论。
- 流量日志与网络可观测:见 多云网络可观测:Flow Logs 与流量镜像。本文给出 IPv6 流的字段缺失问题,采集侧细节看那篇。
为什么 2026 年 IPv6 从"合规加分项"变成"硬约束"
三股力量同时压过来,任何一股单独出现都可以拖,三股叠加就拖不动了。
第一股是终端侧的现实。 Google 官方 IPv6 采用率统计长期在四成上下浮动,但均值掩盖了结构:印度、越南、马来西亚、沙特的移动网络已经接近或达到 IPv6-only 的可运行状态,部分运营商对 IPv4 走 CGNAT 且质量明显劣化。对这些用户来说,你的站点"只有 A 记录"意味着每一次请求都要穿过一层运营商级 NAT,首包延迟、连接复用、并发上限全都吃亏。这不是理论——移动端首屏慢 300 ms,转化率的损失是能算出来的钱。
第二股是采购与合规的硬门槛。 美国联邦采购对 IPv6 的要求已推行多年,欧盟的互联互通法案(Data Act 体系下的云切换条款)把"可迁移性"写进了合同义务,而 IPv6 就绪度是其中最容易核查的一项。更实际的是企业客户的安全问卷:过去两年我见到的 RFP 里,"是否支持 IPv6 双栈接入"从选填变成了勾选必答,答"否"直接进不了技术评审。
第三股是成本结构的变化。 AWS 自 2024 年 2 月起对每个公网 IPv4 地址按 $0.005/小时计费(约 $3.6/月/地址,以官网 Pricing 页为准),一个中等规模的双可用区集群,光 NAT 网关和负载均衡占用的弹性 IP 就能堆出每月几十到上百美元。IPv6 地址不计这项费用,这让"出站改 IPv6-only"从纯技术洁癖变成了有 ROI 的工程改造。
判据很简单:如果你的月活跃用户里亚太移动端超过三成,或者你的客户名单里有政府、金融、运营商,IPv6 就不是"要不要做"而是"这个季度做到哪一步"。
地址账:动手前必须算清三个数
IPv6 规划最常见的失败不是"地址不够",而是"地址给得太随意,三年后发现没法做网络分段"。开子网之前,先把这三个数写进设计文档。
第一个数:VPC 拿多大的段。 AWS 与阿里云给 VPC 分配的默认 IPv6 段是 /56,腾讯云同为 /56 量级。一个 /56 能切出 256 个 /64,而每个 /64 是 2^64 ≈ 1.8×10^19 个地址。注意:子网最小粒度就是 /64,不要试图切 /72——SLAAC 与无状态地址自动配置依赖 64 位接口标识,切碎了会直接导致自动配置失效,这也是 RFC 4291 的硬规定。
第二个数:每个子网留几个 /64。 工程上按"环境 × 可用区 × 用途"三层切,一个典型出海业务长这样:
| 用途 | 段位示例(VPC 为 2408:xxxx:xxxx:1200::/56) | 说明 |
|---|---|---|
| 生产 · 可用区 A · 应用 | ...:1200::/64 | 双栈期默认落这里 |
| 生产 · 可用区 B · 应用 | ...:1201::/64 | 与 A 区严格对称,便于故障切换 |
| 生产 · 数据层 | ...:1210::/64 | 永不给公网路由 |
| 预发 | ...:1280::/64 | 与生产隔离,禁止跨段互通 |
| IPv6-only 新集群 Pod | ...:1300::/56 | 单独留一整个 /56 给 K8s |
| 预留扩容 | ...:1400::/56 起 | 留 8 个 /56 不碰,给未来区域扩展 |
第三个数:NAT 端口够不够。 这是 IPv4 迁移中最容易被忽略、也最容易在上线当天炸掉的数字。一个公网 IP 的可用端口约 6.4 万个,扣除保留段实际可用约 6 万。若你的服务峰值并发出站连接为 5 万,且连接平均存活 60 秒,按 所需 IP ≈ 峰值并发 ÷ 60000 × 1.5 估算,至少需要 2 个出口 IP;如果没有 IPv6,扩容只能买更多 IP,而每个 IP 每月都在计费。走 IPv6 出站(每台机器自带地址、不经 NAT)则直接把这个约束消掉——这也是"仅出站网关"最大的隐性收益,它不只是省钱,是去掉了单点瓶颈。
参考架构:三种边界,一条单向通道
下图是一个可以直接照抄的双栈生产架构。关键设计点:公网入口只存在于负载均衡层,计算层没有直接入向路径;出站走仅出站网关,不可反向;数据层完全不宣告 IPv6 公网前缀。
┌──────────── IPv4 + IPv6 双栈入口 ────────────┐
用户 (v4/v6) ───▶ │ CDN / WAF → 双栈 ALB (A + AAAA) │
└──────────────────┬───────────────────────────┘
│ 仅入站,安全组只放 443
┌────────────────────────▼────────────────────────┐
│ VPC 2408:xxxx:xxxx:1200::/56 │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 子网 AZ-A │ │ 子网 AZ-B │ │
│ │ :1200::/64 │ │ :1201::/64 │ │
│ │ 双栈应用节点 │ │ 双栈应用节点 │ │
│ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │
│ └──────────┬───────────┘ │
│ │ 出站: 0.0.0.0/0 + ::/0 │
│ ┌──────────▼───────────┐ │
│ │ 仅出站网关 (EIGW) │──▶ 互联网 │
│ │ 无入向状态, 不可回连 │ │
│ └──────────────────────┘ │
│ │
│ ┌───────────────────────────────────────┐ │
│ │ 数据子网 :1210::/64 无公网路由 │ │
│ │ RDS / Redis / 内部 API │ │
│ └───────────────────────────────────────┘ │
└─────────────────────┬───────────────────────────┘
│ 私网互通 (对等/Transit)
┌───────────▼───────────┐
│ IPv6-only 新集群 │
│ 2408:xxxx:...:1300::/56│
│ + NAT64/DNS64 出口 │
└───────────────────────┘
三个不要省的设计约束:
- 入口与出口分离。入向只经负载均衡,出向只经仅出站网关。一旦允许实例同时挂公网 IP 又走 NAT 出口,流量日志会出现"同一服务两个源地址",排障时无法归因。
- 安全组写
::/0之前先问一句"为什么要开"。IPv6 没有 NAT 兜底,安全组就是唯一门。默认拒绝、按端口白名单,是最低要求。 - 数据层不宣告公网前缀。在 AWS 上体现为数据子网不关联带
::/0路由的路由表;在阿里云上体现为交换机不开 IPv6 公网带宽。
三类子网:谁跟谁能通,一张矩阵说清
双栈迁移期一定同时存在三种子网,把它们的能力写清楚,比画十张图有用:
| 子网类型 | 地址形态 | 出站路径 | 入站路径 | 适用对象 |
|---|---|---|---|---|
| 双栈子网 | IPv4 + IPv6 并存 | NAT 网关(v4)/ 仅出站网关(v6) | 双栈 LB 回源 | 存量业务过渡期,默认选项 |
| IPv6-only 子网 | 仅 IPv6 | NAT64 + DNS64 | 双栈 LB 回源(v6) | 新建集群、批处理、Serverless |
| IPv4-only 子网 | 仅 IPv4 | NAT 网关 | 双栈 LB 回源(v4) | 不能改的老中间件、只支持 v4 的第三方 Agent |
互通矩阵(✅ 直通,⚠️ 需转换,❌ 不可达):
| 源 → 目标 | 双栈 | IPv6-only | IPv4-only |
|---|---|---|---|
| 双栈 | ✅ | ✅ | ✅ |
| IPv6-only | ✅ | ✅ | ⚠️ 需 NAT64 且有 A 记录可达 |
| IPv4-only | ✅ | ❌ 需目标做 4→6 代理 | ✅ |
矩阵里唯一的"❌"是最容易漏的:IPv4-only 的老系统无法主动访问 IPv6-only 的新服务,因为 IPv4 到 IPv6 没有通用的反向转换机制(NAT64 只做 6→4 单向)。这意味着只要还留着一台 IPv4-only 的调度器或监控 Agent,就不能把那批新服务做成纯 IPv6——除非你在它前面放一个双栈反向代理。判断标准:先清点"调用方"的地址族,再决定"被调用方"能不能只留 v6,顺序不能反。
多云能力对照:三家给的积木不一样
同样是"支持 IPv6",可用的积木差别很大。下表按架构决策点排列,均为 2026 年 11 月核对的能力形态(具体配额、地域覆盖与接口名以各家控制台与文档为准):
| 决策点 | AWS | 阿里云 | 腾讯云 |
|---|---|---|---|
| VPC 分配 IPv6 段 | Amazon 提供 /56,亦可 BYOIP | 免费分配 /56,可申请更大段 | VPC 支持 IPv6 网段,按 /56 起步 |
| 子网粒度 | /64 | /64 | /64 |
| 公网出口组件 | Egress-Only Internet Gateway | IPv6 网关 + 共享带宽 | IPv6 公网网关 / 弹性公网 IPv6 |
| 仅出站模式 | EIGW 天然仅出站(有状态) | ECS IPv6 可设"仅主动出" | 弹性公网 IPv6 支持仅出站配置 |
| 6→4 转换 | NAT 网关内置 NAT64 + Route 53 Resolver DNS64 | 需自建(NAT 实例/自建 DNS64) | 需自建或依赖第三方 |
| 双栈负载均衡 | ALB/NLB 均支持 dualstack | ALB/CLB 支持双栈 | CLB/ALB 支持 IPv6 |
| 托管 K8s 双栈 | EKS 支持 IPv6 集群(Pod 走 v6) | ACK 支持双栈/IPv6 | TKE 支持双栈 |
| 地址计费 | 公网 IPv4 $0.005/小时;IPv6 不计该费 | 按带宽/流量计费,地址本身不单独收 | 按带宽/流量计费 |
两条选型结论:
- 想要"IPv6-only 集群开箱即用",AWS 目前最省事:EIGW + NAT64/DNS64 是原生组合,Route 53 Resolver 的 DNS64 规则一条命令就能挂上,IPv6-only 子网里的实例访问纯 IPv4 的老 API 不需要你自己搭转换层。
- 阿里云与腾讯云的强项在"仅主动出"这个开关:ECS 设成"仅主动出"后,实例可以访问公网但公网无法主动连入,语义上非常接近 IPv4 时代 NAT 的安全感,适合那些"我们只想让机器能装包、不想让它暴露"的运维团队。代价是 NAT64 要自己补,纯 v6 子网访问 v4 老服务时需要自建转换。
如果业务横跨两家,务实的做法是把"仅出站"作为统一抽象,各云用自己的实现(AWS 用 EIGW,阿里云用仅主动出),而上层只维护一份出站白名单策略表,避免两套语义导致审计时对不上账。
实操一:在 AWS 上从零建一个双栈 VPC
下面 7 步用 CLI 完成,全部命令可直接改参数执行。这里刻意不写"一键脚本"——双栈的每一步都需要你确认地址段,脚本反而会掩盖风险。
第 1 步,建 VPC 并同时申请 IPv6 段。 --amazon-provided-ipv6-cidr-block 让 AWS 直接分配一个 /56,返回结果里的 Ipv6CidrBlockAssociationSet 就是你的段:
aws ec2 create-vpc --cidr-block 10.20.0.0/16 \
--amazon-provided-ipv6-cidr-block \
--region ap-southeast-1 \
--tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=prod-sg-vpc}]'
第 2 步,把 /56 里的一段挂到交换机(子网)。 注意 --ipv6-cidr-block 必须是 /64,且要在 VPC 的 /56 之内:
aws ec2 create-subnet --vpc-id vpc-0a1b2c3d \
--cidr-block 10.20.1.0/24 \
--ipv6-cidr-block 2408:4005:1c0:1200::/64 \
--availability-zone ap-southeast-1a
第 3 步,建仅出站网关。 这是 IPv6 架构里最重要的一个组件:它有状态、只允许已建立的连接返回,公网无法主动发起入向连接。它免费,且不按流量额外收费:
aws ec2 create-egress-only-internet-gateway --vpc-id vpc-0a1b2c3d
第 4 步,给应用子网配默认路由。 入站路由表与出站路由表要分开建,应用子网只关联出站表:
aws ec2 create-route-table --vpc-id vpc-0a1b2c3d --query 'RouteTable.RouteTableId' --output text
aws ec2 create-route --route-table-id rtb-0123456789abcdef0 \
--destination-ipv6-cidr-block ::/0 \
--egress-only-internet-gateway-id eigw-0123456789abcdef0
aws ec2 associate-route-table --route-table-id rtb-0123456789abcdef0 --subnet-id subnet-0a1b2c3d4e
第 5 步,安全组按 IPv6 白名单放行。 这里的 ::/0 只给 443,其余一律不开。写完立刻用 describe-security-groups 复核一遍,别信任控制台的"已保存":
aws ec2 authorize-security-group-ingress --group-id sg-0123456789abcdef0 \
--ip-permissions 'IpProtocol=tcp,FromPort=443,ToPort=443,Ipv6Ranges=[{CidrIpv6=::/0,Description=public-https}]'
第 6 步,DNS64 与 NAT64 解决"v6 子网访问 v4 老服务"。 路由侧是给 IPv6-only 子网加一条 ::/0 指向 NAT 网关(该网关所在子网需具备 IPv6 能力);解析侧在 Route 53 Resolver 打开 DNS64,让 v6-only 实例请求 v4-only 域名时拿到合成 AAAA 记录(RFC 6147)。控制台入口名随版本变化,但验证方式固定:在 v6-only 实例里执行下面两条,第一条应返回 AAAA,第二条应返回 A:
dig +short AAAA legacy-partner-api.example.com
curl -6 -sS -o /dev/null -w '%{http_code}\n' https://legacy-partner-api.example.com/health
第 7 步,验证"出不去也进不来"的不对称性。 这是验收的核心,两步都要做:从外部用 nc -6 连你的应用端口(应当超时),从实例内 curl -6 访问公网(应当通)。只要这两条都符合预期,仅出站网关才算配置正确。
实操二:阿里云与腾讯云的开通顺序
两家的控制台路径不同,但顺序完全一致:先给 VPC 申请 IPv6 段 → 再给交换机分配 /64 → 最后决定公网出口形态。顺序错了会很折腾:段没批下来就建交换机,交换机只能先只带 v4,后面补 v6 需要停机改配置。
阿里云的关键是那个"仅主动出"开关。ECS 绑定的 IPv6 地址可以设为仅主动出模式——机器能访问公网(装包、调外部 API、上报监控),但公网无法主动连入。对绝大多数后端服务这是最优解,因为它把 IPv4 时代 NAT 的安全语义原样保留了下来,迁移的心理成本几乎为零。代价有两个:一是需要 IPv6 网关与共享带宽配合,二是纯 v6 子网访问 v4 老服务要自建 NAT64,官方不提供托管转换。
腾讯云的形态接近,弹性公网 IPv6 支持按带宽或流量计费,也有仅出站类配置。真正要注意的是混合计费陷阱:如果你的实例同时持有 IPv4 弹性 IP 和 IPv6 公网地址,两条路径各自计费,账单会出现"同一份出站流量被算两次"的错觉(实际是两条链路各有流量)。上线前把其中一个关掉,或者在监控里按地址族拆分流量,否则成本复盘时无法归因。
实操三:Kubernetes 双栈,两条路
K8s 是双栈迁移里最容易翻车的一层,因为"集群双栈"和"节点双栈"是两件事:节点有 v6 地址,不代表 Pod 能拿到 v6 地址;Pod 拿到 v6,也不代表 Service 的 ClusterIP 有 v6。
路线 A:托管集群(EKS/ACK/TKE)直接建 IPv6 集群。 以 EKS 为例,建集群时把 kubernetesNetworkConfig.ipFamily 设为 ipv6,集群必须建在已具备 IPv6 段的 VPC 里,且安全组要放通 IPv6。此时 Pod 由 VPC CNI 以 /80 前缀为单位从 ENI 分配 IPv6 地址,Pod 直接持有可路由的 v6 地址——这既是优势(无需 SNAT、无端口耗尽)也是风险(Pod 地址对 VPC 内可见,网络策略必须真的生效)。EKS 的 IPv6 集群不支持"混合地址族",一旦选了 v6,Service 也走 v6,访问 v4 外部依赖必须依赖 NAT64/DNS64。
路线 B:自建集群用 kubeadm 开双栈。 初始化时把 v4 与 v6 的 CIDR 用逗号并列,顺序决定主族(第一个是主地址族):
kubeadm init \
--pod-network-cidr=10.244.0.0/16,fd00:10:244::/56 \
--service-cidr=10.96.0.0/12,fd00:10:96::/112 \
--apiserver-advertise-address=10.20.1.10
装 CNI 时别漏掉 v6:Calico 需要在 calico-config 里打开 assign_ipv6_addresses 与对应 IPPool;Cilium 需要 --set ipv6.enabled=true 并显式声明 cluster-pool-ipv4-cidr 与 cluster-pool-ipv6-cidr。装完用三条命令验收,缺一条都说明没真正双栈:
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{" "}{.spec.podCIDRs}{"\n"}{end}'
kubectl get svc kubernetes -o jsonpath='{.spec.clusterIPs}'
kubectl run t6 --image=busybox --restart=Never -- sleep 3600 && kubectl exec t6 -- ip -6 addr show eth0
第一条应看到每节点两个 CIDR(一个 v4 一个 v6),第二条应看到两个 ClusterIP,第三条应看到 Pod 网卡上确实有 v6 地址。只在 Service 层看到 v6、Pod 层没有 v6,是最常见的"假双栈"——这种情况下 Ingress 对外是双栈的,但集群内部东西向流量全是 v4,等于花了两倍精力只做了一半。
IPv6 特有的八个安全坑(每个都给判据与修法)
这八条来自真实事故,按"上线第一天就会遇到"的顺序排列。RFC 9099 是 IPv6 运营安全的权威参考,值得让安全团队通读一遍。
坑 1:把 ICMPv6 全禁了。 很多团队从 IPv4 继承了"禁 ICMP 防扫描"的习惯,直接照搬到 v6 就是灾难。IPv6 没有广播、没有 ARP,邻居发现(ND)、路由器通告(RA)、重复地址检测(DAD)全部依赖 ICMPv6;更关键的是路径 MTU 发现(PMTU)只靠 ICMPv6 Type 2 "Packet Too Big" 通知,禁掉之后大包直接黑洞,表现为"小请求正常、上传文件卡死"——这个症状极难排查。判据:如果 ping 通但 curl 上传大文件超时,先查 ICMPv6 过滤规则。修法:至少放行 Type 1/2/3/4 与 133–137,Type 128/129(echo)可选。
坑 2:安全组写了 ::/0 却以为是"内网段"。 IPv4 里 0.0.0.0/0 因为 NAT 存在,实际常常只是"VPC 内";而 ::/0 就是字面意义的全互联网,没有 NAT 缓冲。审计时最高频的发现就是"管理端口 22 对 ::/0 开放"。判据:describe-security-groups 里搜 CidrIpv6,凡是非具体 /64 的都是待确认项。
坑 3:以为内网"看不见"。 IPv4 下内网地址 10.x 不可路由,扫描器扫不到;IPv6 的全局单播地址(2000::/3)天生全球可路由,只要路由表泄了一条,内网就暴露。修法:内网子网用 ULA(fd00::/8)承载东西向流量,公网段只给需要入向的负载均衡回源;或者在边界上做入向过滤,只允许来自负载均衡安全组的流量。
坑 4:地址里带着 MAC。 默认的 EUI-64 接口标识会把 MAC 地址编进 IPv6 地址,攻击者据此推断硬件型号、跨网络追踪设备。修法:开隐私扩展(RFC 4941)或在 Linux 上设 net.ipv6.conf.all.use_tempaddr=2;云上更简单——用 DHCPv6 或手工分配固定地址,养成"地址与资产表一一对应"的习惯,顺便解决资产清点问题。
坑 5:防火墙规则写了一半。 双栈期最常见的事故是"v4 规则收紧了,v6 规则忘了补",于是攻击者从 v6 进来。这不是理论风险:攻击者会主动探测 AAAA 记录。判据:把 v4 与 v6 的放行规则数做对比,两边差超过 10% 就要逐条对齐;更好的做法是用 IaC 把规则模板参数化,地址族作为变量,从结构上保证对称。
坑 6:日志里没有 v6 字段。 很多自建日志解析正则写死了 IPv4 的点分十进制,v6 地址进来直接丢弃或解析成空。后果是"从 v6 发起的攻击在 SIEM 里不可见"。修法:采集侧统一用 ip_address 类型或专门的 v6 解析器;查询时用 INET6_ATON/ipaddress 库而不是字符串比较。上线前做一次验证:故意从 v6 发起一次失败登录,确认能在告警里看到完整地址。
坑 7:IPv6-only 实例偷偷依赖 v4 元数据服务。 云厂商的元数据服务(169.254.169.254)在部分实现里只监听 v4。当实例切成 v6-only 后,SDK 取凭证会超时,表现为"服务启动时报凭证错误"。修法:先在一台上做灰度,确认 IMDS 走 v6 可达;AWS 的 IMDS 同时支持 fd00:ec2::254,这是很多迁移文档没提的关键一条。
坑 8:DDoS 防护策略只覆盖了 v4。 清洗、限速、地理封禁如果只按 v4 前缀配置,攻击者换 v6 就绕过了。修法:把 WAF/清洗策略按"域名"而非"IP 族"维度配置,并确认上游 CDN 的 v6 回源路径也受同一套规则保护。
90 天迁移路线:四个阶段,每阶段有硬验收
不要试图并行推进,双栈改造的失败几乎都来自"想一次做完"。
阶段一(第 1–3 周):清点与定账。 产出三张表:资产地址族清单(哪些主机/服务/中间件只能 v4)、DNS 记录清单(哪些域名需要加 AAAA)、出站依赖清单(哪些外部 API 只有 A 记录)。验收标准:能回答"如果我今晚把所有入口切到双栈,哪些调用链会断",答案必须具体到服务名而不是"应该没问题"。
阶段二(第 4–7 周):入口先行。 给对外域名加 AAAA、负载均衡开双栈、CDN 开 v6 回源,后端完全不动(回源仍走 v4)。这一步风险最低、收益最直接,因为它只影响"用户怎么进来"。验收标准:dig AAAA 有记录、curl -6 端到端 200、监控里 v6 流量占比与预期的终端侧占比接近。
阶段三(第 8–11 周):出站收紧。 建立仅出站网关,把后端实例的公网 IPv4 摘掉,出站统一走 EIGW 或 NAT64。这一步是省钱和消除 NAT 端口瓶颈的主要来源,也是风险最高的一步——任何"白名单式"的对外调用都会在这里暴露。验收标准:连续 7 天无出站失败告警,且公网 IPv4 地址数量下降 80% 以上。
阶段四(第 12–13 周):内部与新集群。 新建的 K8s 集群直接按 IPv6-only 或双栈规划,老集群不动。验收标准:新集群的东西向流量 100% 走 v6,且网络策略在 v6 下同样生效(用一个"禁止 namespace A 访问 B"的策略实测,而不是看配置)。
四个阶段的顺序不可交换,理由是风险可控性:入口阶段失败只掉一部分用户的访问,出站阶段失败会让服务整体不可用,内部阶段失败是"新集群起不来"。把最贵的一步放在你已经积累了两轮实战经验之后。
成本账:省下的钱在哪儿
IPv6 的成本影响是双向的,别只看省的那一半。
省的部分:公网 IPv4 地址费(AWS $0.005/小时/地址,一个 20 个 EIP 的环境一年约 $876)、NAT 网关的小时费与数据处理费(NAT64 场景下这部分会显著下降,因为 v6 出站不经 NAT)、以及因端口耗尽而追加的公网 IP。
增加的部分:如果走 NAT64,转换仍有数据处理费(按 GB 计),且 DNS64 查询会增加解析成本;双栈期监控指标数量翻倍(每个指标多一个地址族维度),可观测平台的存储账单会涨 20%–60%,这一项经常被漏算;日志里多了 v6 地址,存储与索引成本同步上升。
净账的判断标准:如果公网 IPv4 地址数超过 20 个,或 NAT 网关月费超过 $200,出站改 v6 通常 3–6 个月回本;如果只有三五台机器,改造的工程投入远大于省下的地址费,那就只做入口双栈(阶段二),出站保持原状。架构决策要跟着账走,不要跟着"技术先进性"走。
DNS 与可观测:让回退路径是通的
双栈上线后最容易出现的"神秘慢"来自客户端地址选择。现代浏览器与 curl 都实现了 Happy Eyeballs(RFC 8305):同时发起 v6 与 v4 连接,谁先握手成功用谁,默认约 250 ms 的 v6 优先窗口。这带来一个副作用——如果 v6 路径是"能连但很慢"(比如跨洲绕行),用户会稳定地落到慢路径上,因为 v6 先握手成功。
判据:如果只有部分地区的用户变慢,且这些地区的 v6 路由绕行明显,先查 AAAA 记录的解析结果与 CDN 的 v6 节点覆盖。修法有三:调低 AAAA 的 TTL 以便快速回退、在 CDN 侧确认 v6 节点与 v4 节点同源、或在极端情况下临时撤下 AAAA 记录(这是最快的止损手段,要提前演练)。
可观测侧需要补三个维度:流日志按地址族拆分(否则 v6 流量在报表里"消失")、健康检查同时覆盖 v4/v6 端点、以及把"v6 入向连接数 / v4 入向连接数"做成一个比率指标——这个比率应该缓慢上升,如果它突然掉到 0,说明 AAAA 记录或 v6 入口已经挂了,而这类故障单看总 QPS 是看不出来的。
总结
IPv6 双栈的技术难点不在"开启",而在三件事上:地址账要算清(/56 怎么切、/64 为什么不能细拆、NAT 端口够不够)、边界要重做(仅出站网关替代 NAT 的隐身性、安全组替代 NAT 的过滤、ULA 承接内网)、顺序不能乱(入口 → 出站 → 内部,风险从低到高)。把这三件事做完,IPv6 就是一次干净的基础设施升级;跳过任何一件,它就是一次持续数月的排障。
最后给一个务实的判断:如果你的业务还没有真实的 v6 用户,入口双栈(阶段二)做完就可以停,成本几乎为零,收益是"客户安全问卷能勾是";如果亚太移动端占比已经超过三成,那阶段三必须排进本季度——因为 NAT 端口瓶颈和地址费不会等你准备好才发作。
相关阅读
- 云网络架构指南 — VPC、子网、路由与安全组的完整基础
- 多云出站与私有访问架构 — NAT 网关集中出口与私有化收敛
- 多云网络互通与 Transit 架构 — 专线、VPN 与跨云骨干
- 多云零信任网络架构 — 用身份替代网段作为边界
- 多云网络可观测:Flow Logs 与流量镜像 — 地址族维度的流量归因
- 多云负载均衡 ALB/NLB/CLB 选型与成本 — 双栈入口的组件选型
- 海外服务器安全加固清单 — 主机侧的 24 项检查
本文由 7.chengzicloud.cloud 提供,点击访问首页了解更多
常见问题(FAQ)
只给域名加 AAAA 记录,就算支持 IPv6 了吗?
不算。AAAA 只解决"用户能否用 v6 连到你",回源如果还是 v4,那只是 CDN 帮你转了一次协议。真正要回答的是三层:入口是否双栈(AAAA + 双栈 LB)、回源是否双栈(LB 到后端)、后端到依赖是否双栈(出站路径)。只做第一层是营销口径,三层都通才是能力。 判断方法:在后端实例上抓包,看出站流量有没有 v6 源地址。
开了 IPv6 会不会更容易被攻击?
会,但原因不是"IPv6 不安全",而是"边界被重新定义而规则没跟上"。IPv4 时代 NAT 替你挡掉了入向扫描,v6 里这个保护消失,安全组成了唯一门。把默认拒绝、最小端口、::/0 逐条复核这三件事做到位,攻击面和 v4 双栈环境没有本质差别。反过来说,如果你现在的安全依赖的是"内网地址不可路由"这种假设,那本来就不该算安全。
IPv6-only 集群要访问只有 IPv4 的老 API,怎么办?
两条路:一是 NAT64 + DNS64(AWS 有托管实现,其他云需自建),v6-only 实例解析 v4-only 域名时拿到合成 AAAA,出站流量经由 NAT64 转换;二是在前面放一个双栈反向代理,让 v6 应用只跟代理说话。前者透明但引入转换层单点,后者多一跳但边界清晰、可审计。规模小选代理,规模大选 NAT64;最差的选择是"给这台机器再绑一个 v4 地址",那等于双栈永远退不掉。
云上内网可以用 ULA(fd00::/8)吗?
可以,而且推荐。ULA 是私有地址,不能全球路由,正好对应 IPv4 的 10.0.0.0/8 语义,适合数据库、中间件、管理面这些"永不该被公网访问"的组件。注意两点:ULA 地址不能直接访问公网,需要 NAT 或双栈;容器网络规划时 ULA 段不要与云厂商内部服务段冲突(AWS 的 IMDS 用了 fd00:ec2::254,规划时避开)。
双栈会让成本翻倍吗?
不会翻倍,但会涨。涨的部分主要是可观测(指标维度翻倍)、日志存储(地址变长、流量记录增多),以及双栈期两套入口的并行成本。省的部分是公网 IPv4 地址费和 NAT 网关费用。净效应取决于你的地址数量:地址多就是省,地址少就是略涨。真正该做的动作是阶段三把公网 v4 地址砍掉一大半,而不是"为了省钱全站切 v6"。
为什么 ping 能通,但上传大文件总是失败?
典型的 PMTU 黑洞:IPv6 路由器不做分片,大包依赖 ICMPv6 Type 2 通知源端缩小 MSS,一旦这条 ICMPv6 被防火墙拦掉,1500 字节以上的包全部静默丢弃。修法:放行 ICMPv6 Type 1/2/3/4,或在隧道场景下把接口 MTU 调到 1400–1420。这个坑在 IPv4 里被"路由器可分片"掩盖了很多年,v6 只是把它暴露出来。
阿里云的"仅主动出"和 AWS 的仅出站网关是一回事吗?
语义相同、实现不同。两者都保证"实例能出去、外面进不来",区别在状态维持与计费方式:AWS 的 EIGW 是有状态网关,按连接状态跟踪返回流量,不额外收流量费;阿里云是通过地址模式在实例侧控制,配 IPv6 网关与共享带宽,按带宽或流量计费。多云环境下建议把"仅出站"抽象成策略层的一个布尔开关,各云用自己的实现,避免上层逻辑分裂。
要不要给每个 Pod 分配公网可达的 IPv6 地址?
除非你在做特定的边缘场景,否则不要。EKS 的 IPv6 集群天然让 Pod 持有 VPC 内可路由地址,但"VPC 内可路由"不等于"公网可达"——只要子网没有公网路由、安全组默认拒绝,它就是内部地址。真正要防的是有人为了图省事关掉网络策略。K8s 层用 NetworkPolicy 兜住东西向,VPC 层用安全组兜住南北向,两层都不能省。
企业出海需要云架构咨询?无论是 IPv6 双栈改造、VPC 网段规划,还是多云网络互通与合规落地,通过 7.chengzicloud.cloud 联系我们,获取专属方案。