IPv6 已经不算"未来技术"了。移动网络大面积是 IPv6,部分国家/地区的宽带也以 IPv6 为先,海外机房普遍免费给一段 IPv6 地址,很多业务(尤其是面向移动端用户和应用商店审核)已经要求支持 IPv6。但很多人的海外服务器买回来只配了 IPv4,IPv6 空着没用,或者配了之后发现"服务不监听 IPv6""安全组没放行 IPv6""域名没加 AAAA 记录",折腾半天没通。
这篇文章面向用海外服务器的运维新手和中小企业 IT,把 IPv6 的配置讲完整:从地址与前缀的基础概念,到 Ubuntu(netplan)和 Rocky/CentOS(ifcfg)两套静态配置方法,再到服务监听、防火墙放行、连通性测试和 DNS 解析。命令都标注发行版差异,涉及防火墙放行时给出安全提示。地域表述规范:香港称"中国香港地区",台湾称"中国台湾地区"。
一、基础概念:地址、前缀、子网
IPv6 是 128 位地址,写成 8 组四位十六进制,例如 2001:db8:1234:5678::1。几个必须理解的点:
- 地址长度:128 位,是 IPv4(32 位)的 4 倍,地址总量极大。
- 冒号十六进制表示法:连续的
0可以用::压缩,但一个地址里只能出现一次::。全小写、不加前导零是推荐写法。 - 前缀(Prefix):类似 IPv4 的网段,用
/表示长度。机房通常给一个/64前缀(一个标准子网)甚至更大的/56//48。 - 常见分配:很多服务商给"一个 /64 子网",你在这段里可以自由给服务器分配地址。有的给"一个地址 + 一个 /64 网关段",有的直接给一个可用地址。
- 链路本地地址:以
fe80::开头,仅在同一链路有效,用于自动发现,不用来对外服务。 - 地址类型:全局单播(2000::/3,公网可用)、唯一本地(fc00::/7,类似私网)、组播(ff00::/8)。
举个规划的常见做法:机房给你 2001:db8:abcd:1::/64,网关是 2001:db8:abcd:1::1,你就可以把服务器地址设为 2001:db8:abcd:1::100,前缀长度填 64。
二、Ubuntu(netplan)配置静态 IPv6
Ubuntu 18.04 之后默认用 netplan 管理网络,配置文件在 /etc/netplan/ 下,通常是 50-cloud-init.yaml 或 01-netcfg.yaml。
先确认网卡名和现有配置:
ip addr show # 查看网卡名(如 ens3、eth0)
ls /etc/netplan/
cat /etc/netplan/*.yaml
编辑配置文件(示例,按实际网卡名和地址替换):
# /etc/netplan/50-cloud-init.yaml
network:
version: 2
ethernets:
ens3:
dhcp4: true
dhcp6: false
addresses:
- "2001:db8:abcd:1::100/64" # 你的 IPv6 地址与前缀长度
routes:
- to: "::/0"
via: "2001:db8:abcd:1::1" # 网关地址
nameservers:
addresses: ["2001:4860:4860::8888", "8.8.8.8"]
应用配置:
netplan try # 先试运行,120 秒内不确认会自动回滚(安全)
netplan apply # 确认无误后正式应用
注意:改网络配置前,务必保留一个可用的登录通道(如控制台 VNC),或确认配置无误再用
netplan apply。netplan try是防止把自己关在门外的安全机制,推荐优先使用。
三、Rocky / CentOS(ifcfg)配置静态 IPv6
Red Hat 系(Rocky Linux、CentOS、AlmaLinux)用 /etc/sysconfig/network-scripts/ifcfg-<网卡> 配置。新版 Rocky 也可能用 NetworkManager(nmcli)。
查网卡名:
ip -br addr
nmcli device status
编辑 ifcfg 文件(示例):
# /etc/sysconfig/network-scripts/ifcfg-ens3
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=ens3
DEVICE=ens3
ONBOOT=yes
IPV6INIT=yes
DHCPV6C=no
IPV6ADDR=2001:db8:abcd:1::100/64
IPV6_DEFAULTGW=2001:db8:abcd:1::1
IPV6_AUTOCONF=no
重启网络使配置生效:
# 传统 network 服务(较老版本)
systemctl restart network
# 用 NetworkManager 的版本
nmcli connection reload
nmcli connection up ens3
如果用 nmcli 命令行配置:
nmcli con mod ens3 ipv6.method manual \
ipv6.addresses 2001:db8:abcd:1::100/64 \
ipv6.gateway 2001:db8:abcd:1::1
nmcli con up ens3
注意:重启网络会短暂中断连接,请在控制台可达的前提下操作,并确认新配置正确。
四、服务监听 IPv6
网络配好只是第一步,服务还要"监听" IPv6 地址才会响应。
通用判断
服务配置里监听地址要包含 IPv6 通配地址 [::](相当于 IPv4 的 0.0.0.0),或者显式写你的 IPv6 地址。
Nginx
server {
listen 80;
listen [::]:80; # 监听 IPv6 全部地址
listen 443 ssl;
listen [::]:443 ssl; # IPv6 的 HTTPS
server_name example.com;
# ...
}
改完用 nginx -t 校验,再 systemctl reload nginx。
sshd
/etc/ssh/sshd_config 中的 ListenAddress 若只写了 IPv4,就只监听 IPv4;要用 IPv6 需加上:
ListenAddress 0.0.0.0
ListenAddress ::
或注释掉 ListenAddress 行让它监听全部。改完 systemctl reload sshd(部分系统是 ssh)。
检查监听状态
ss -tlnp # 查看监听端口,IPv6 地址显示为 [::]:port
ss -tlnp | grep ':::'
看到 [::]:80 这类输出,说明服务已经在监听 IPv6。
五、防火墙放行 IPv6
这是最容易漏的一环:IPv6 的防火墙规则是独立的,放行了 IPv4 不等于放行 IPv6;云服务商的安全组也要单独放行 IPv6 规则。
nftables(现代默认,很多发行版已切换)
# 查看规则
nft list ruleset
# 放行 80/443(示例,按你的实际策略调整)
nft add rule inet filter input tcp dport { 80, 443 } accept
ip6tables(传统)
# 放行已建立连接和本机流量
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT
# 放行 SSH、HTTP、HTTPS
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
# 查看规则
ip6tables -L -n -v
firewalld(Red Hat 系)
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
# firewalld 默认同时作用于 IPv4/IPv6,确认 zone 配置即可
ufw(Debian/Ubuntu)
ufw allow 80/tcp
ufw allow 443/tcp
# ufw 默认同时管理 IPv4/IPv6(确认 /etc/default/ufw 中 IPV6=yes)
安全提示:不要为了图省事直接放行
::/0到所有端口。::/0相当于 IPv4 的0.0.0.0/0,即对全网开放全部端口,风险极高。只放行业务需要的端口,SSH 端口尽量限制来源。放行规则前先在控制台准备好回滚方案。
六、连通性测试
配好后要一层层验证:
# 1. 检查本机 IPv6 地址是否生效
ip -6 addr show
# 2. 检查 IPv6 路由(是否有默认路由)
ip -6 route show
# 3. ping6 网关和外部地址
ping6 2001:db8:abcd:1::1 # 网关
ping6 2001:4860:4860::8888 # 外部(Google DNS 的 IPv6)
ping6 ipv6.google.com # 域名形式
# 4. 追踪路径
tracepath6 ipv6.google.com
traceroute6 ipv6.google.com
# 5. 用 curl 强制走 IPv6 访问你的服务
curl -6 -I http://[2001:db8:abcd:1::100]/
curl -6 -I https://example.com
# 6. 查看服务监听
ss -tlnp | grep ':::'
判读:地址生效 + 有默认路由 + ping6 通网关 = 网络层 OK;再测外部和 curl -6 通服务 = 应用层 OK。
七、IPv6 的常见坑与排障
IPv6 配置有几个高频"坑",提前知道能省很多时间:
- 有地址但没默认路由:这是最常见的"配了却不通"原因。检查
ip -6 route show,如果没有default via ...的行,说明网关没配或没生效。IPv4 能用不代表 IPv6 就有路由,两者独立。 - SLAAC 与静态地址冲突:如果网卡同时接受路由通告(SLAAC)和静态地址,可能出现多个地址或路由混乱。要静态配置时,应关闭
IPV6_AUTOCONF或 DHCPv6,避免地址漂移。 - 地址写错导致整台机器失联:把前缀长度写错(比如 /64 写成 /128),或网关写成不存在的地址,都会导致网络不通。改配置前留好控制台 VNC 通道。
- 只监听 IPv4:服务配置里没加
[::],即便系统有 IPv6 地址,外部也连不上。用ss -tlnp确认监听地址。 - 防火墙只放行 IPv4:安全组和主机防火墙的 IPv6 规则独立,容易漏。
- DNS 只有 A 记录没有 AAAA:域名不会走 IPv6,需要显式添加 AAAA。
- 应用不支持 IPv6:有些老应用、老库、老脚本写死了 IPv4 地址格式,需要改用
getaddrinfo之类的通用解析方式,否则无法绑定 IPv6。
排障的基本顺序是:ip -6 addr(有地址吗)→ ip -6 route(有路由吗)→ ping6 网关(二层到网关通吗)→ ping6 外网(出口通吗)→ ss -tlnp(服务在听吗)→ curl -6(业务端口通吗)→ dig AAAA 域名(解析对吗)。按这个顺序走一遍,问题基本都能定位到具体一层。
八、DNS AAAA 记录与双栈注意事项
AAAA 记录
要让域名通过 IPv6 被访问,需要给域名添加 AAAA 记录(IPv4 是 A 记录),指向你的 IPv6 地址:
| 记录类型 | 用途 | 值示例 |
|---|---|---|
| A | 指向 IPv4 | 203.0.113.10 |
| AAAA | 指向 IPv6 | 2001:db8:abcd:1::100 |
| CNAME | 别名 | 指向另一个域名 |
可以同时配置 A 和 AAAA,这就是双栈:客户端优先用 IPv6,失败回退 IPv4。
双栈注意事项
- 别在没测通前就加 AAAA:如果 IPv6 实际不通却加了 AAAA,部分客户端会先尝试 IPv6 再回退,导致额外的超时延迟。先确保 IPv6 完全可用,再挂 AAAA。
- 服务要同时监听 IPv4/IPv6:否则加 AAAA 后用户可能连不上。
- 安全组和防火墙都放行:IPv4 和 IPv6 是两套规则。
- 监控要覆盖 IPv6:很多监控默认只测 IPv4,要单独加 IPv6 检查。
- 回退机制:客户端(Happy Eyeballs)通常会回退,但服务器侧要保证两条路都通。
常见问题
Q1:配了 IPv6 但 ping 不通外网?
先看 ip -6 addr 是否有地址、ip -6 route 是否有默认路由。没路由通常是网关没配对;有路由但不通,检查上游是否给了 IPv6 出口,以及防火墙是否放行。
Q2:为什么加了 AAAA 记录网站反而变慢?
很可能 IPv6 没真正通,客户端先试 IPv6 超时再回退 IPv4。先确认 curl -6 能通,再加 AAAA。
Q3:安全组放了 IPv4,为什么 IPv6 还是不通?
安全组和主机防火墙的 IPv6 规则是独立的。光放行 IPv4 规则不够,要单独为 IPv6 添加入站规则。
Q4:Ubuntu 改完 netplan 连不上了怎么办?
用 netplan try 可自动回滚;如果已经 apply,需要从控制台 VNC 登录修复配置。
Q5:需要同时配置 IPv4 和 IPv6 吗?
建议双栈:保留 IPv4 兼容老客户端,同时提供 IPv6 面向新网络。两者并存最稳妥。
Q6:一个 /64 前缀够用吗?
完全够用。一个 /64 子网里的地址数量是 2 的 64 次方,远超任何单台服务器的需求。机房给一个 /64,你可以只取其中一个地址给服务器用,其余留作扩展;也可以把不同地址分给同一台机器的不同服务,便于做基于源地址的策略。
Q7:改了 IPv6 配置后 SSH 断了,怎么救?
如果只断了 IPv6、IPv4 还能用,直接从 IPv4 登进去改回配置即可;如果网络整体断了,需要用云控制台的 VNC/串口控制台登录修复。这也是为什么强烈建议改网络前先确认控制台通道可用,并优先用 netplan try 这类会自动回滚的方式。
总结
- IPv6 是 128 位地址,机房通常给一个 /64 前缀,地址、前缀长度、网关三要素要配对。
- Ubuntu 用 netplan(
/etc/netplan/*.yaml),Rocky/CentOS 用 ifcfg(/etc/sysconfig/network-scripts/ifcfg-*)或 nmcli;改配置前留好控制台通道,优先用netplan try。 - 服务要监听
[::](Nginx 的listen [::]:80、sshd 的ListenAddress ::),用ss -tlnp确认。 - 防火墙和安全组的 IPv6 规则独立,要单独放行;切勿直接开放
::/0到所有端口。 - 测试分层:
ip -6 addr/ip -6 route→ping6网关 →ping6/tracepath6外部 →curl -6业务端口。 - DNS 用 AAAA 记录,务必在 IPv6 完全可用后再添加,避免双栈回退造成额外延迟。
企业QQ咨询




