【IP 地址 03】纯 IPv6 VPS 网络配置指南:NAT64 与 WARP 实战(2026)

纯 IPv6 VPS 为什么这么便宜?因为没有公网 IPv4 所以省下稀缺地址成本。但 SSH 连不进、GitHub 访问不了怎么办?本文手把手教你配置 NAT64/DNS64 公共解析、安装 Cloudflare WARP 拿到 IPv4 出口,并用 Cloudflare CDN 让 IPv4 访客也能访问你的网站。

延伸阅读

更多相关攻略推荐:【VPS 硬件选型指南 (CPU 篇) 04】AMD EPYC 还是【发行版选型 07】Arch Linux 深度科普:滚动发布、pac【VPS 进阶玩法精选 014】ARM 架构 VPS 值不值得上?A【对象存储 01】对象存储怎么选:Backblaze B2 vs C【TCP优化 01】美国 VPS 跑不快?多半是没开 BBR,一个命

一、纯 IPv6 VPS 为什么能压到 1 美元/年

你可能在一些商家(比如 Hax、某些 LET 特价机)看到过只要 1 美元/年甚至免费的纯 IPv6 VPS。便宜到离谱,是不是坑?不完全是——它的便宜有硬道理:它根本没有公网 IPv4 地址

现在一个可用的公网 IPv4 地址,在二级市场要几美元/年,量大了是实打实的成本。机器只分配一个 IPv6 地址,省掉了这部分稀缺资源,价格自然能压到地板。所以纯 IPv6 机器本身不是"垃圾",它只是少了 IPv4 这层入口和出口。只要你补上这两块,它就是一台正常的、甚至很香的廉价小鸡。

二、纯 IPv6 的痛点:到底卡在哪

买回来你很快就会撞网络封锁,主要是两个方向的"连不上":

  • 出不去(出口问题):机器要访问只支持 IPv4 的网站/服务时,直接解析失败。最典型的就是 GitHubDocker Hub、部分软件更新源(apt 源里有些镜像只有 IPv4)、部分第三方 API。表现就是 apt update 卡死、git clone 连不上、curl api.xxx.com 超时。
  • 进不来(入口问题):你本地网络如果只有 IPv4(国内绝大多数家庭宽带和手机流量还没普及 IPv6),用 ssh 直接连 ssh root@机器IPv6 会连不上,因为你的网络根本发不出 IPv6 包到公网。

记住一个关键区分:下面要讲的 NAT64 和 WARP 解决的是"出口"问题(让机器能访问 IPv4 世界);而"入口"问题(让你从 IPv4 网络连进机器)要靠 Cloudflare CDN 代理网站流量,或者你本地先有个 IPv6 环境。

三、救活步骤 1:NAT64 / DNS64 公共解析

原理先讲人话:IPv6-only 机器去查一个"只有 IPv4"的域名时,普通 DNS 返回的是 IPv4 地址,机器看不懂。DNS64 会返回一个"假的" IPv6 地址;NAT64 网关再把这台机器发往这个假 IPv6 的流量,翻译成真正的 IPv4 目的地。整个过程对机器是透明的,你啥都不用配,只要换个 DNS。

好消息是,不用自己搭网关,有人免费提供了公共 NAT64/DNS64 服务。你只需要把机器的 DNS 改成它们给的 IPv6 名字服务器。

临时改(立刻生效,重启可能丢)

echo -e "nameserver 2a00:1098:2c::1\nnameserver 2a01:4f9:c010:3f02::1\nnameserver 2a00:1098:2b::1\n" > /etc/resolv.conf

上面三组是 TREX(nat64.net)提供的公共 DNS64 地址,长期稳定。也可以用 Google 的 DNS64:2001:4860:4860::64642001:4860:4860::64。更多地址见 https://nat64.nethttps://nat64.xyz

持久化(重启不丢,按发行版来)

较新的 Ubuntu(22.04+)/ Debian 12 默认用 systemd-resolved,直接改 /etc/resolv.conf 会被覆盖。正确姿势是改 resolved 的配置:

# Ubuntu / Debian 12 用 systemd-resolved
sudo mkdir -p /etc/systemd/resolved.conf.d
sudo tee /etc/systemd/resolved.conf.d/dns64.conf > /dev/null <<'EOF'
[Resolve]
DNS=2a00:1098:2c::1 2a01:4f9:c010:3f02::1 2a00:1098:2b::1
EOF
sudo systemctl restart systemd-resolved
# 再把 /etc/resolv.conf 指向 resolved 的 stub
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

如果是老一点的 Debian 用 resolvconf 管理,则写头部文件:

sudo apt install resolvconf -y
sudo tee /etc/resolvconf/resolv.conf.d/head > /dev/null <<'EOF'
nameserver 2a00:1098:2c::1
nameserver 2a01:4f9:c010:3f02::1
nameserver 2a00:1098:2b::1
EOF
sudo resolvconf -u

验证出口通了没

# 用 IPv6 方式访问,能看到你的 IPv6 地址就说明 DNS64 生效
curl -6 ipinfo.io
# 再试一个纯 IPv4 域名,能返回内容就说明 NAT64 通了
curl -6 https://github.com

重要提醒:这些公共 DNS64 是热心人白嫖的,有速率限制,别拿来做高并发爬虫或刷流量,把坑填了大家都没得用。正式生产建议自己搭或用 WARP(下面讲)。

四、救活步骤 2:Cloudflare WARP 拿到 IPv4 出口

NAT64 只解决了"解析+部分访问",但有些应用(比如需要真实 IPv4 源站、或者要走特定出口)更干脆的办法是装 Cloudflare WARP。WARP 本质是基于 WireGuard 的加密隧道,把机器所有流量从 Cloudflare 的全球节点中转出去,于是这台纯 IPv6 机器就获得了一个 Cloudflare 分配的虚拟 IPv4 出口

区分清楚:WARP 给你的是 IPv4 出口(出网能力),不是 IPv4 入口(别人还是不能直接 ssh 进你)——入口问题后面用 CDN 解决。

先确认内核

uname -r

内核 5.6+ 自带 WireGuard,直接装 wireguard-tools 即可;老内核要用 wireguard-go 用户态实现(以你实际环境为准)。

用 wgcf 安装(官方推荐思路)

# 装依赖
sudo apt update
sudo apt install -y curl wireguard-tools openresolv

# 下载 wgcf(第三方非官方 Cloudflare WARP CLI)
curl -fsSL git.io/wgcf.sh | sudo bash

# 注册 WARP 账户,生成 wgcf-account.toml(建议备份)
wgcf register

# 生成 WireGuard 配置文件 wgcf-profile.conf
wgcf generate

改配置:让 IPv6-only 机器只拿 IPv4 出口

默认生成的配置 AllowedIPs = 0.0.0.0/0, ::/0 会同时接管 IPv4 和 IPv6 流量。纯 IPv6 机器我们一般只想补 IPv4 出口(保留原生 IPv6 速度),所以把 ::/0 删掉,只留 0.0.0.0/0;并确认 Endpoint 用 IPv6 地址(因为机器本身只有 IPv6 能出网):

# 编辑生成的配置
nano wgcf-profile.conf

# 关键两行改成这样(Endpoint 用 IPv6 形式):
#   AllowedIPs = 0.0.0.0/0
#   Endpoint = [2606:4700:d0::a29f:c001]:2408
# DNS 建议换成纯 IPv6 的,避免 WARP 故障时 DNS 也挂:
#   DNS = 2001:4860:4860::8888, 2001:4860:4860::8844

把 Endpoint 里的域名 engage.cloudflareclient.com 换成 IPv6 地址 [2606:4700:d0::a29f:c001]:2408 是为了防止 DNS 解析阶段就卡住(机器一开始没 IPv4,解析域名可能失败)。

启用并验证

sudo cp wgcf-profile.conf /etc/wireguard/wgcf.conf
sudo wg-quick up wgcf

# 验证:用 IPv4 方式访问,应显示 Cloudflare 分配的 IPv4
curl -4 ipinfo.io
# 开机自启
sudo systemctl enable wg-quick@wgcf

看到 curl -4 返回的是 Cloudflare 的 IP,说明 IPv4 出口已通,apt updategit clone github.com 都不在话下。

懒人一键脚本(warp-go)

不想手敲命令,可以用社区的一键脚本(以你实际环境为准,注意脚本来源可信度):

# 例如 yonggekkk 的 warp-yg 脚本
bash <(wget -qO- https://raw.githubusercontent.com/yonggekkk/warp-yg/main/CFwarp.sh)
# 跑起来选安装 WARP-Go,再选"1"默认一路回车即可

五、用纯 IPv6 VPS 搭网站,让 IPv4 用户也能访问

这是纯 IPv6 机器最香的用途:当网站源站。你本地没 IPv6 没关系,访客也不需要 IPv6——靠 Cloudflare CDN 的"橙色云"代理就能搞定入口问题。

原理(一句话)

Cloudflare 的边缘节点是双栈的(同时有 IPv4 和 IPv6)。你把域名 NS 接入 Cloudflare,添加一条 AAAA 记录指向你机器的 IPv6,再开启代理(橙色云图标)。这样 IPv4 访客的请求先到 Cloudflare 的 IPv4 边缘,Cloudflare 再用 IPv6 回源到你的纯 IPv6 机器。访客全程不知道你的源站只有 IPv6,体验"开箱即用"。

操作步骤

  1. 域名在 Cloudflare 添加站点,把 NS 改成 Cloudflare 给的两组。
  2. DNS 里添加 AAAA 记录,名称填 @ 或子域,内容填你 VPS 的 IPv6 地址。
  3. 点那条记录右边的云图标,变成橙色(Proxied)。这一步最关键,灰色(仅 DNS)不行。
  4. 等 DNS 生效(几分钟到几小时),用 IPv4 网络访问你的域名,能打开就成功了。
# 在你的 IPv6 机器上起个简单 web 服务自测
sudo apt install -y python3
echo "hello from ipv6-only vps" > index.html
python3 -m http.server 80 --bind ::

两个必须注意的坑

  • CDN 代理只代理 HTTP/HTTPS:SSH(22 端口)不走 Cloudflare,IPv4 网络的你还是 ssh 不进机器。要管理机器,要么你本地有 IPv6,要么用 WARP 只解决出网、管理走 Cloudflare 的 SSH over WARP / 或者借助一台有 IPv4 的跳板机。别指望橙色云能让你 ssh 进来。
  • SSL 证书:开了代理,建议源站用 Cloudflare 的 Origin Certificate(源站证书),在 Cloudflare 后台 SSL/TLS → Origin Server 里生成,装到机器上,加密模式选 Full 或 Full (strict),否则会有证书不匹配。
  • 别把 A 记录也加上:纯 IPv6 源站就不要填 A 记录(IPv4),否则 Cloudflare 回源可能走错;只留 AAAA + 橙色云即可。

六、进阶与收尾:TUN、监控与成本控制

  • 检查 TUN:如果你后续要在机器上跑 OpenVPN 之类,先确认 TUN 是否开启:cat /dev/net/tun。显示 File descriptor in bad state 是已开启;显示 No such file or directory 则没开,需要找商家开或换 KVM。
  • 选 KVM 别选 OpenVZ:要装 WireGuard/WARP,内核权限很重要,KVM 基本都能搞,OpenVZ 受限严重。
  • WARP 免费版有带宽/用途限制:个人折腾足够,别拿来干违规或高带宽业务,Cloudflare 会限速甚至封。
  • 公共 DNS64 速率限制:如前所述,别滥用 nat64.net,生产环境优先 WARP 或自建。

常见翻车现场排查

  • wgcf register 卡住/连不上:因为机器本身没 IPv4,wgcf 注册时要访问 Cloudflare API,先确保已经配好公共 DNS64(第一步),否则域名解析不了会直接失败。配好 DNS 再重试就行。
  • wg-quick up wgcf 报 RTNETLINK: Operation not permitted:多半是 OpenVZ 或 LXC 容器没给 NET_ADMIN 权限,换 KVM 机型,或在商家后台开"启用 TUN/TAP / 内核模块"。
  • 装完 WARP 后机器整个断网:检查是不是手滑把 ::/0 也留着了,而 Endpoint 又写成了 IPv4 域名,导致 IPv6 流量也被塞进隧道、隧道又起不来,形成死循环。纯 IPv6 机器务必只留 0.0.0.0/0 且 Endpoint 用 IPv6 字面量。
  • Cloudflare 橙色云开了还是打不开:先确认 AAAA 记录填的是你机器当前 IPv6(有些商家会换 IP);再确认加密模式不是 Off;最后等 DNS 全球生效(最长几小时),别急着重启。
  • SSH 老断:纯 IPv6 入口问题没解决时,别用 IPv4 网络硬连。本地没 IPv6 就临时用支持 IPv6 的在线终端,或借一台有 IPv4 的跳板机做中转。

七、避坑清单(建议收藏)

  • 为什么便宜:纯 IPv6 省掉公网 IPv4 成本,所以 1 刀/年不是骗局,是少了 IPv4。
  • 出口用 NAT64/WARP:改 /etc/resolv.conf 用公共 DNS64 先救急;要稳定出网装 Cloudflare WARP(wgcf / warp-go)。
  • 持久化 DNS:Ubuntu/Debian 12 用 systemd-resolved 配置,别只改 resolv.conf 否则重启丢失。
  • WARP 给出口不给入口:装完 curl -4 ipinfo.io 看到 Cloudflare IP 才算成功;别人仍不能直接 ssh 你。
  • 网站入口靠 CDN:域名 NS 接 Cloudflare,AAAA 指向 IPv6,开橙色云代理,IPv4 访客自动通过 CDN 回源。
  • SSH 不走高云:管理机器需本地 IPv6 或跳板机;SSL 用 Cloudflare Origin 证书。
  • 公共 DNS64 别滥用:有速率限制,生产优先 WARP/自建。
  • 优先 KVM:装 WARP/WireGuard 需要内核权限,OpenVZ 大概率搞不定。

总结一句话:纯 IPv6 VPS 不是废物,是"半成品"。NAT64 让它看得懂 IPv4 世界,WARP 给它一张 IPv4 出网门票,Cloudflare CDN 把 IPv4 访客引进门。三件套一套,1 美元/年的小鸡就能当正经服务器用。

常见问题 FAQ

  • 纯 IPv6 VPS 能访问 IPv4-only 网站吗?:能,靠 NAT64/DNS64 解析、或 Cloudflare WARP 拿到 IPv4 出口即可。
  • WARP 免费吗?:Cloudflare WARP 个人使用免费,能给纯 IPv6 机器一个稳定的 IPv4 出口。
  • NAT64 和 WARP 有什么区别?:NAT64 主要解决「出网时把 IPv4 域名解析并转发」,WARP 再多一层加密隧道出口,两者互补。
  • 纯 IPv6 VPS 建站,IPv4 用户看得到吗?:可以,配合 Cloudflare CDN / Tunnel(见第 05 篇)把 IPv4 流量转进来即可。