服务器配 IPv6 不是“开个开关”
服务器配置 IPv6 地址的核心就三步:确认内核未禁用 IPv6、给网卡绑定地址和前缀(通常是 /64)、补上默认路由和 DNS,最后用 ping6 和 curl -6 验证出网,Linux 靠 ip 命令临时生效、靠 netplan/ifcfg/nmcli 持久化,Windows 用 netsh 两条命令搞定,云主机还得额外在控制台开通 IPv6 并在安全组放行。
听起来简单,真上手会发现坑集中在三个地方:前缀长度写错、网关地址没带网卡后缀、安全组忘了放行,下面按“能不能用怎么配怎么验”的顺序拆开讲。
为什么现在配 IPv6 不再是可选项
移动端流量里 IPv6 占比早就不是小数,据中国互联网络信息中心(CNNIC)历年互联网发展统计报告显示,国内 IPv6 活跃用户规模持续处于亿级水平,三大运营商的移动网络基本完成双栈改造,落到运维层面的现实是:部分纯 IPv6 终端访问你的站点时,如果服务端只有 IPv4,那就是直接打不开。
行业共识认为,双栈是当前成本最低的过渡方案保留 IPv4 保证兼容,同时挂上 IPv6 地址吃新增流量,真正纯 IPv6 单栈的服务器目前还是少数,多见于内部集群和特定合规场景。
动手前先看一个前提:IPv6 地址由前缀和接口标识组成,公网前缀一般由运营商或云厂商分配,长度多为 /64。前缀长度写成 /128 或者 /56,后面的路由基本一定出问题,这是新手最常见的失误。
Linux服务器配置IPv6地址命令:从临时生效到永久写入
先确认这台机器到底支不支持 IPv6
别急着敲 add,先看内核有没有把 IPv6 关掉:
cat /proc/sys/net/ipv6/conf/all/disable_ipv6 ip -6 addr show
第一行返回 1,说明被禁用了,去 /etc/sysctl.conf 里把 net.ipv6.conf.all.disable_ipv6 和 net.ipv6.conf.default.disable_ipv6 改成 0,再执行 sysctl -p。
ip -6 addr show 里每块网卡至少会有一个 fe80:: 开头的链路本地地址,这个地址只能在同一链路内通信,不能拿来做业务访问,看到它别误以为已经配好了。
临时添加一个 IPv6 地址(重启即失效)
排查问题阶段建议先用临时命令试,错了直接删:
ip -6 addr add 2001:db8:1:2::10/64 dev eth0 ip -6 route add default via 2001:db8:1:2::1 dev eth0
2001:db8::/32 是 RFC 3849 专门留给文档示例的地址段,实际配置时替换成你自己的前缀,要删掉就换成 ip -6 addr del,路由用 ip -6 route del default。
永久配置:不同发行版写法不一样
Ubuntu / Debian:netplan 与 interfaces 两条路
新版 Ubuntu 走 netplan,编辑 /etc/netplan/ 下的 yaml:
network:
version: 2
ethernets:
eth0:
dhcp4: true
addresses:
- 2001:db8:1:2::10/64
routes:
- to: default
via: 2001:db8:1:2::1
nameservers:
addresses: [2400:3200::1, 2400:3200:baba::1]
保存后执行 netplan apply,YAML 对缩进极其敏感,空格和 Tab 混用会导致整份配置解析失败,建议用 netplan try 先试运行,出错会自动回滚。
老版本 Debian 还是改 /etc/network/interfaces:
iface eth0 inet6 static
address 2001:db8:1:2::10
netmask 64
gateway 2001:db8:1:2::1
CentOS / Rocky / AlmaLinux:ifcfg 与 nmcli
传统写法改 /etc/sysconfig/network-scripts/ifcfg-eth0,追加:
IPV6INIT=yes
IPV6ADDR=2001:db8:1:2::10/64
IPV6_DEFAULTGW=2001:db8:1:2::1
systemctl restart network 或 nmcli connection reload,新版系统推荐直接上 nmcli:
nmcli connection modify eth0 ipv6.method manual \ ipv6.addresses 2001:db8:1:2::10/64 \ ipv6.gateway 2001:db8:1:2::1 \ ipv6.dns "2400:3200::1" nmcli connection up eth0
网关和路由别漏掉
很多人的地址配成功了但完全出不了网,就是因为只加了地址没加路由,看默认路由:
ip -6 route show default
云环境里网关常常是链路本地地址,fe80::1,这种必须带上网卡名写成 via fe80::1 dev eth0,否则内核不知道往哪块网卡发,系统启动时自动生成的那条默认路由,重启后是需要重新配置的,务必写进配置文件。
服务器IPv6地址怎么配置才能上网:连通性验证三步走
从本机到外网:ping6 与 curl -6
配完依次执行:
ip -6 addr show eth0确认地址状态是scope global,没有tentative字样ping6 -c 4 2400:3200::1先测公网 DNS,能通说明路由和出网正常curl -6 -I https://www.taobao.com强制走 IPv6 访问真实站点,返回 200 或 301 就说明全线打通ss -6 -tlnp看业务端口有没有监听在 IPv6 上
第四步经常被忽略,Nginx 只写了 listen 80; 的话,IPv4 能访问,IPv6 请求直接连接失败,正确写法是补一行 listen [::]:80;,方括号不能省,MySQL 的 bind-address = ::、Redis 的 bind :: 同理。
DAD 与邻居发现排查
地址显示 tentative,说明还在做重复地址检测(DAD),1 到 2 秒内变正常,若卡在 dadfailed,基本可以判定这个地址在链路内已经被别人用了,换一个接口标识就行。
网关 ping6 不通但本机地址正常,检查两点:交换机或安全组是否放行了 ICMPv6,以及是否被 ip6tables 或 nftables 拦了,IPv6 的邻居发现协议强依赖 ICMPv6,把 ICMPv6 整类封掉会导致地址解析直接失效。
云服务器开通IPv6要额外收费吗:云上场景的特殊之处
这是被问得最多的问题,先说结论:主流云厂商的 IPv6 地址本身大多免费,但公网带宽或流量会单独计费,且不少产品默认不分配 IPv6 地址,需要手动开通。
操作路径一般是:在实例详情页找到“网络与安全”,开启 IPv6 或分配 IPv6 地址;再到 VPC 和交换机层面确认 IPv6 网段已启用;最后在安全组里新增 IPv6 规则安全组规则默认只写 IPv4 网段,0.0.0/0 不会覆盖 IPv6,需要另加一条 :/0 或者更精确的前缀。
计费维度值得留意:
- 按固定带宽计费的实例,IPv6 流量通常共用带宽包
- 按流量计费的实例,IPv6 出方向流量单独出账
- 部分厂商的 IPv6 公网网关属于独立产品,另有费用
选型前建议直接查对应产品的计费文档,别按 IPv4 的直觉套。
双栈还是纯 IPv6
| 方案 | 适用场景 | 优点 | 注意点 |
|---|---|---|---|
| 双栈 | 对外业务、常规站点 | 兼容性最好,回退方便 | 安全组和防火墙要各配一套 |
| 纯 IPv6 单栈 | 内部服务、新建集群 | 地址规划简洁 | 外部访问依赖转换或终端支持 |
大部分对外业务现阶段仍建议双栈,纯 IPv6 单栈更适合有明确 IPv6 终端覆盖的内部环境。
Windows Server 和 Linux 配置IPv6的区别
Windows 侧命令更少,但网卡名称要写对,中文系统里常显示为“以太网”:
netsh interface ipv6 show interfaces netsh interface ipv6 add address "以太网" 2001:db8:1:2::10/64 netsh interface ipv6 add route ::/0 "以太网" 2001:db8:1:2::1
图形界面路径是“网络和共享中心适配器设置属性Internet 协议版本 6”,在高级里手动添加 IP 和网关,差异点在于:Linux 靠配置文件持久化,Windows 用 netsh 添加后即写入注册表,重启仍生效;Linux 临时命令重启丢失,Windows 命令添加即持久。
配完别只测一下就收工
还有三件事收尾:
- DNS 加 AAAA 记录,让域名能解析到 IPv6 地址,解析平台里 A 和 AAAA 各一条,互不影响
- 防火墙双栈同步,iptables 管不了 IPv6,得配 ip6tables 或统一走 nftables
- 监控补一条 ICMPv6 探测,IPv6 出问题往往静默失败,不主动探测很难发现
近年来不少故障排查案例都指向同一个原因:配置本身没错,只是某个环节默认只处理了 IPv4。
服务器配置IPv6地址常见问题解答
Q:配好地址后本地能 ping 通网关,但浏览器访问不了网站,问题出在哪?
优先查业务监听。ss -6 -tlnp 看不到对应端口,说明服务只绑了 IPv4;再看云安全组是否放行 IPv6 网段;最后确认域名是否已添加 AAAA 记录,三个环节按顺序排,命中率最高。
Q:为什么我的 IPv6 地址重启后就消失了?
用 ip -6 addr add 添加的地址只在运行时有效,属于临时配置,要持久化必须写进 netplan、ifcfg、nmcli 连接配置或 Windows 的 netsh 持久化命令中,改完记得重载网络服务。
Q:云服务器上 IPv6 地址 ping 不通内网其他主机,是什么原因?
多数情况是 VPC 或交换机未真正启用 IPv6 网段,或者安全组没有放行对应前缀,地址分配成功只代表网卡层面完成绑定,链路层互通还需网络侧配置到位,需同时检查子网 IPv6 开关和安全组规则。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/783973.html


