IPv6 入门:开启、配置与常见问题

从地址格式到在 VPS 上启用 IPv6、加 AAAA 记录、绕开防火墙与网关这几个常见坑。

IPv4 地址早已耗尽,越来越多的网络只能靠 IPv6 直连。给服务器配好 IPv6,既能被纯 IPv6 用户访问,也能少依赖运营商 NAT。本文以 Ubuntu/Debian(netplan)为主,走完启用、配置与排错的全流程。

为什么要用 IPv6

  • 地址不再稀缺:IPv6 有 128 位地址空间,基本告别短缺。
  • 覆盖更完整:移动网络、部分家宽只分配 IPv6,不配可能连不上你的服务。
  • 少一层 NAT:每台机器都能拿到公网地址,连接更直接。

地址格式速览

IPv6 地址是 128 位,写成 8 组、每组 4 位十六进制,用冒号分隔:

2001:0db8:0000:0000:0000:0000:0000:0001

可以简写:每组前导零省略,连续的全零组用一个 :: 压缩(全址只能用一次 ::)。上面等价于:

2001:db8::1

常见前缀:fe80::/10 是链路本地地址(每块网卡自带,不可路由);服务商通常给你一个 /64 子网。

在 VPS 上启用与配置

先确认服务商是否已分配 IPv6、给的是单个地址还是一个 /64 段、网关是多少。拿到信息后编辑 netplan 配置(在 /etc/netplan/ 下,名字类似 01-netcfg.yaml):

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
      addresses:
        - "2001:db8:1234:5678::100/64"
      routes:
        - to: "::/0"
          via: "fe80::1"

把网卡名(eth0)、地址和网关(via)换成服务商给的值。很多服务商的 IPv6 网关就是链路本地地址 fe80::1。保存后应用:

sudo netplan try     # 60 秒内确认,配错会自动回滚
sudo netplan apply

如果服务商支持 SLAAC/DHCPv6 自动下发,也可以只写 dhcp6: true 让系统自动获取。

验证连通性

ip -6 addr show eth0        # 应看到你配置的全局地址(scope global)
ip -6 route show           # 确认有默认路由 ::/0
ping6 -c 3 2606:4700:4700::1111   # ping 通公网(Cloudflare DNS)

ping6 能通,说明地址、路由、网关都正确。若 ping6 提示 Network is unreachable,多半是网关或默认路由没配好。

给域名加 AAAA 记录

IPv4 用 A 记录,IPv6 用 AAAA 记录。在你的 DNS 服务商控制台新增一条:

类型: AAAA    主机: www    值: 2001:db8:1234:5678::100

验证:

dig AAAA www.example.com +short

双栈(Dual-Stack)

双栈指一台机器同时跑 IPv4 和 IPv6。同一域名可同时有 A 和 AAAA 记录,客户端自动选可用协议(现代系统偏好 IPv6)。这是最平滑的过渡:老用户走 IPv4,纯 IPv6 用户也能访问,互不影响。

常见坑

  • 只配地址没配网关:能 ping 通同网段,却出不了公网。务必配好默认路由 ::/0。
  • 防火墙要单独放行 IPv6:IPv4 与 IPv6 规则互相独立。iptables 规则对 IPv6 无效,要用 ip6tables;ufw 默认已管两栈,但要确认 /etc/default/ufw 里 IPV6=yes,再放行端口:
sudo ufw allow 443/tcp     # 同时对 IPv4/IPv6 生效
sudo ip6tables -L -n       # 直接查 IPv6 规则时用这个
  • 服务只监听 IPv4:绑在 0.0.0.0 只听 IPv4;改绑 :: 或另开 IPv6 监听。用 ss -6 -tlnp 确认端口在 IPv6 上也开着。

小结

给 VPS 配 IPv6 的核心步骤:确认服务商分配 → 在 netplan 写好地址与网关 → 用 ip -6 addr 和 ping6 验证 → 加 AAAA 记录。记住两条铁律:默认路由别忘、防火墙要单独放行 IPv6。配成双栈后,新老用户都能顺畅访问你的服务。