如果你的服务器还无法通过 IPv6 响应,很可能是地址已分配但尚未在系统中配置。本指南演示如何在 Ubuntu、Debian 和 AlmaLinux 上静态设置该地址、测试连通性,并用防火墙加以保护。适用于任何分配了 IPv6 的 VPS Linux Infrawire。
📋 前提条件
- 一台可通过 root SSH 访问的 VPS,系统为 Ubuntu 24.04、Debian 12 或 AlmaLinux 9 / Rocky 9。在客户区中可以找到 IP 和 root 密码。
- 你的 IPv6 地址、前缀长度和网关,下文分别写作
VPS_IPV6、PREFIX(通常为64)和IPV6_GATEWAY。 - 网卡名称(本文示例为
eth0):
Baship -br link ip -6 addr show ip -6 route show
编辑网络文件时请保持另一个 SSH 会话处于打开状态,以免配置错误把你锁在门外。
🟠 Ubuntu 24.04:Netplan
Netplan 文件位于 /etc/netplan/。在云镜像上,该文件通常由 cloud-init 生成,重启后可能被覆盖,因此请先禁用它对网络的管理:
Bashsudo nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
YAMLnetwork: {config: disabled}
然后编辑你的 Netplan 文件(例如 /etc/netplan/50-cloud-init.yaml),添加 IPv6 地址和路由,保留现有的 IPv4 行:
YAML1network: 2 version: 2 3 ethernets: 4 eth0: 5 addresses: 6 - VPS_IP/IPV4_PREFIX 7 - VPS_IPV6/PREFIX 8 routes: 9 - to: default 10 via: IPV4_GATEWAY 11 - to: default 12 via: IPV6_GATEWAY 13 nameservers: 14 addresses: [1.1.1.1, 2606:4700:4700::1111]
Bashsudo chmod 600 /etc/netplan/*.yaml sudo netplan try
如果你没有确认,netplan try 会在 120 秒后自动回滚,避免错误配置让你失联。按 Enter 确认,或在确定无误后使用 sudo netplan apply。
🔴 Debian 12:/etc/network/interfaces
Bashsudo nano /etc/network/interfaces
为同一网卡添加一段配置:
INIiface eth0 inet6 static address VPS_IPV6/PREFIX gateway IPV6_GATEWAY dns-nameservers 2606:4700:4700::1111
dns-nameservers 这一行只有在安装了 resolvconf 软件包时才有效;否则请把解析器写入 /etc/resolv.conf。应用更改:
Bashsudo systemctl restart networking
重启该服务可能会让连接短暂中断。如果网卡的 IPv4 由 DHCP 管理而你只想添加 IPv6,也可以在控制台中运行 sudo ifdown eth0 && sudo ifup eth0。
🔵 AlmaLinux 9 / Rocky 9:nmcli
网卡由 NetworkManager 管理。先列出连接名称:
Bashnmcli connection show
使用你看到的名称(CON_NAME,例如 System eth0 或 cloud-init eth0):
Bashsudo nmcli connection modify 'CON_NAME' ipv6.method manual \ ipv6.addresses VPS_IPV6/PREFIX \ ipv6.gateway IPV6_GATEWAY \ ipv6.dns 2606:4700:4700::1111 sudo nmcli connection up 'CON_NAME'
更改会保存在连接配置文件中,重启后依然有效。
✅ 测试连接
Baship -6 addr show dev eth0 ip -6 route show default ping -6 -c 3 IPV6_GATEWAY ping -6 -c 3 2606:4700:4700::1111 curl -6 -I https://www.debian.org
在较旧的系统上,ping6 与 ping -6 作用相同。也可以从另一台支持 IPv6 的机器上,使用你的 VPS 地址进行检查:
Bashping -6 -c 3 VPS_IPV6 ssh root@VPS_IPV6
🔥 IPv6 防火墙
只针对 IPv4 的规则会让 IPv6 一侧处于开放状态。使用 UFW 时,请确认已启用 IPv6 支持:
Bashgrep IPV6 /etc/default/ufw # 必须显示 IPV6=yes sudo ufw allow 22/tcp sudo ufw allow 80,443/tcp sudo ufw enable sudo ufw status verbose
之后每条规则会出现两次,其中一条带有 (v6)。在 AlmaLinux 上,firewalld 用相同的命令同时覆盖两种协议族:
Bashsudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
🛠️ 故障排查
地址已存在,但 ping 网关失败。 检查前缀长度和网关。有些网络使用链路本地网关,例如 fe80::1;此时请把网关设为该值,如果工具要求,还要在路由中加入 dev eth0。
重启前一直正常,重启后失效。 有其他工具在改写配置:Ubuntu 上是 cloud-init(见第一节),或者是某条从未写入配置文件的 ip -6 addr add 命令。用 ip 执行的命令是临时的。
IPv6 能 ping 通但网站打不开。 防火墙或服务只监听了 IPv4。用 ss -tlnp 检查:Web 服务器除了 0.0.0.0:80,还必须显示 [::]:80。在 nginx 中,请在 server 块里加入 listen [::]:80;。
🚀 你的 VPS 现在支持 IPv6:添加一条 AAAA 记录,你的服务就能通过两种协议访问。