中文

在 Linux VPS 上配置静态 IPv6 地址

1 min
VPS/VDS 主机

如果你的服务器还无法通过 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):
Bash
ip -br link ip -6 addr show ip -6 route show

编辑网络文件时请保持另一个 SSH 会话处于打开状态,以免配置错误把你锁在门外。

🟠 Ubuntu 24.04:Netplan

Netplan 文件位于 /etc/netplan/。在云镜像上,该文件通常由 cloud-init 生成,重启后可能被覆盖,因此请先禁用它对网络的管理:

Bash
sudo nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
YAML
network: {config: disabled}

然后编辑你的 Netplan 文件(例如 /etc/netplan/50-cloud-init.yaml),添加 IPv6 地址和路由,保留现有的 IPv4 行:

YAML
1network: 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]
Bash
sudo chmod 600 /etc/netplan/*.yaml sudo netplan try

如果你没有确认,netplan try 会在 120 秒后自动回滚,避免错误配置让你失联。按 Enter 确认,或在确定无误后使用 sudo netplan apply。

🔴 Debian 12:/etc/network/interfaces

Bash
sudo nano /etc/network/interfaces

为同一网卡添加一段配置:

INI
iface eth0 inet6 static address VPS_IPV6/PREFIX gateway IPV6_GATEWAY dns-nameservers 2606:4700:4700::1111

dns-nameservers 这一行只有在安装了 resolvconf 软件包时才有效;否则请把解析器写入 /etc/resolv.conf。应用更改:

Bash
sudo systemctl restart networking

重启该服务可能会让连接短暂中断。如果网卡的 IPv4 由 DHCP 管理而你只想添加 IPv6,也可以在控制台中运行 sudo ifdown eth0 && sudo ifup eth0。

🔵 AlmaLinux 9 / Rocky 9:nmcli

网卡由 NetworkManager 管理。先列出连接名称:

Bash
nmcli connection show

使用你看到的名称(CON_NAME,例如 System eth0 或 cloud-init eth0):

Bash
sudo 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'

更改会保存在连接配置文件中,重启后依然有效。

✅ 测试连接

Bash
ip -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 地址进行检查:

Bash
ping -6 -c 3 VPS_IPV6 ssh root@VPS_IPV6

🔥 IPv6 防火墙

只针对 IPv4 的规则会让 IPv6 一侧处于开放状态。使用 UFW 时,请确认已启用 IPv6 支持:

Bash
grep 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 用相同的命令同时覆盖两种协议族:

Bash
sudo 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 记录,你的服务就能通过两种协议访问。

及时了解最新的优惠、折扣和特别促销活动。

查看促销

我们使用Cookie

我们使用分析性Cookie来改善您在我们网站上的体验。数据不会出售给第三方。了解更多请查看我们的 隐私政策.