IPv6-only 的 VPS 竟然也能这么好使?
对于开发者,尤其是中国的开发者而言,有个海外 VPS 还是挺重要的。就我而言 VPS 有两大重要用途,一是快速验证一些自己搭建的 HTTP 服务,二是实现科学上网。
抛开一些 Azure、Google 提供的用于快速吸引顾客的免费服务不谈,大部分海外 VPS 价格还是略高的,最便宜的规格一般也需要 20-30 元每月。VPS 的价格主要来源于线路和 IPv4 地址的使用费用:对中国使用者来说,较低延迟、较大带宽的线路(它们往往被标注为 China-optimized VPS)花费是非常高的,往往还需要在普通 VPS 的价格上加个二三十块;而 IPv4 地址总量先天不足、早期分配粗放浪费、联网设备爆发式增长、地址池已耗尽,导致目前价格较高。
IPv6 解决了 IPv4 地址总量不足的问题,其价格也极其低廉,几乎接近免费。IPv6 地址虽多,但和 IPv4 不兼容,且全球海量老旧设备、网络和系统改造代价极高。NAT 等技术又不断给 IPv4 续命,运营商和企业缺乏快速替换的动力,只能长期双栈共存、缓慢推进。虽然大部分互联网服务均已支持 IPv6(如 Apple Store 强制要求所有上架 APP 支持 IPv6),但由于全球互联网基础设施更替缓慢,因此大部分用户还未真正使用上 IPv6。这使得直接盲目购买 IPv6-only 的 VPS 可能没有意义,尽管它极其便宜——目前甚至有 5元/年 的 IPv6-only VPS 解决方案。
然而,互联网慈善家 Cloudflare 提供的代理服务很大程度上解决了这个问题。只需要使用 Cloudflare 的域名解析服务,可以很容易给 IPv6-only 的服务上双栈代理。如图,我曾购买过 Cloudflare 的域名服务,只需要打开解析项中的"Proxied"选项,即可打开双栈代理。即使在纯 IPv4 环境下也可以通过 http 直接访问目标 IPv6-only VPS 的全部端口。

利用这个特点,我进一步尝试了一下在我购买的 IPv6-only VPS 上搭建科学上网代理。我自己长期使用 brook 这个工具,它提供了通过 https 加密的 websocket 进行代理的选项。这个过程中遇到了一点小问题,brook 似乎会使用自带的 DNS 进行解析,直接得到的 IPv4 地址是无法在 IPv6-only 环境访问的。这个问题 AI 一度也没办法解决,它总是认为 brook 应该直接使用了本机提供的 DNS。直到我看到 github issue 上有相关的讨论。但这个方法似乎略有过时,它仅支持 2024 版本的 brook,而 brook 本身文档实在太简单了。
Anyway,使用 brook 时需要通过 Global Option 配置特定的 DNS。我使用的是 Google DNS64 服务,它把 IPv4 地址合成一个特殊的 IPv6 地址,让纯 IPv6 主机能通过 NAT64 间接访问 IPv4 网络。指令如下:
brook --dialWithDNS '[2001:4860:4860::6464]:53' --dialWithDNSPrefer AAAA wssserver --domainaddress example.com:443 --password mysecret
实际体验下来,经过 Cloudflare 代理后,访问延迟略有增长,但 Cloudflare 本身带宽极大,几乎能用满 VPS 本身提供的所有带宽。Cloudflare 本身提供了极其优越的海外线路,只是国内访问延迟略高。但对于一般上网需求来说也绰绰有余了,且在大带宽加持下看视频之类的需求也非常丝滑。另外,IPv6 地址似乎普遍质量比较高,风险较低。