从使用机场到自建服务
为什么要做这件事
过去两年我一直使用某个机场的最基础便宜的套餐,每年的花费大概在 200 元左右。平心而论,该机场服务很稳定,价格也不高,用户体验也还不错,因此过去我一直在用。该机场一直推荐首选 clash 作为科学上网的工具,而我为了方便家里多个设备同时使用,选择了在路由器上安装 openclash 的方案。openclash 其实功能挺全面的,虽然配置界面一言难尽,但好在基本上只需要初始配置一次后就不再需要经常面对了。因此也就一直相安无事的用着。
但从去年年底 ChatGPT 的发布后,情况出现了一些变化。无论是 chatGPT 还是 Claude,甚至是 Copilot 都限定了支持的区域。而我使用的那个机场会优先把我的访问调度到日本、台湾、新加坡等地区,而这些地区基本都不在支持的范围内。这就导致了我要经常切换线路才能正常使用这些服务。多次手工切换让我感到有点麻烦,于是我开始琢磨怎么能自动化的处理这个问题。
另一个问题是我喜欢在 Netflix 看美剧,Netflix 会检测来访的 IP 地址是否属于账号对应的国家。 虽然我我使用的机场支持 Netflix 线路切换,但在 4K 画质下偶尔会卡顿一下。虽然发生并不频繁,但却十分影响观影体验。我猜测原因可能是因为高峰期同时服务的用户过多,导致机场服务器带宽过载导致。
要解决线路切换的问题并不困难。最简单的解决方案是通过分流规则来处理,将特定域名的请求交给特定区域的代理节点来负责,这样就能解决这个问题了。但我是通过机场提供的订阅链接来实现代理节点的配置和分流设置的,无法直接修改配置文件。虽然 openclash 支持通过自定义的第三方规则来覆盖订阅链接中的分流规则,但是附加规则的定义不可避免的依赖订阅链接中定义的服务器策略组
,如果机场的服务器策略组
配置或名称发生变化,则第三方规则就会失效。并且这种情况我只有在出现问题后排查才能发现,为了避免这种不确定性,我没有采用这个方案。
另一个解决方案是不使用机场,转而采用在 VPS 上自建服务的方式来科学上网。这样既可以保证 VPS 的 IP 的所属国家,又可以独占 VPS 带宽。同时解决以上两个问题。
因此我打算先搭建一个服务做个简单的尝试,验证一下方案的可行性。
自建服务
由于目前 AI 产品基本是美国公司,自然不会限制美国访问。因此 VPS 毫无疑问要选择美国机房的。网上 VPS 提供商非常多。我稍微做了点功课后发现,廉价的且有美国机房的 VPS 提供商,口碑最好的是 RackNerd 和 Cloudcone。我最终选择了 Cloudcone LA 区域最便宜的 VPS,年付 17.5 美元。
自建服务最担心出现且很容易发生的一个情况是 IP 被 GFW 封锁。原因是 GFW 有协议嗅探能力,能够识别出部分代理协议。我在网上查阅了一些资料,发现 VLESS-XTLS-uTLS-REALITY 和 Hysteria2 这两个代理协议反嗅探能力最强,基本不会被 GFW 识别到。我最终选择了 VLESS-XTLS-uTLS-REALITY 协议,原因是 Hysteria2 需要配置一个域名,而我不想为科学上网再单独购买一个域名了。
原以为最复杂最容易出问题的服务器搭建环节,反而是最简单的和最快速完成的。使用 Xray-REALITY 管理脚本,只需几个回车就完成了服务搭建,全程耗时不超过 3 分钟。反而是客户端配置花费了最多的时间。
从 openclash 迁移到 sing-box
配置客户端时我才发现,开源的 clash 内核 不支持 VLESS 协议,只有闭源且收费的 clash premium 才支持,而在这个场景下我更愿意使用开源的产品。另外还有一个 clash 的二次开发版 clash meta 支持 VLESS 协议。但不知为何,在我将 openclash 切换到 meta 内核后,出现频繁的内核崩溃,导致完全无法使用。
这导致我不得不开始考虑 openclash 之外的客户端方案。又在网上做了一番功课后,我发现了 sing-box 这个后起之秀。其完全开源,同时软件更新非常活跃,并且最值得称道的是配置文档说明,既简洁又清晰明了。另外还有一个意外惊喜是,在 openwrt 23.05 版本 (当前最新稳定版) 的官方 opkg 仓库中,已经包含了 sing-box,因此在 openwrt 下安装完全不费事。
我当前使用的 openwrt 的版本是 22.03,不过从 22.03 升级到 23.05 并不困难,官方支持通过 Sysupgrade 直接升级。我只花了不到 20 分钟就完成系统升级并安装好了 sing-box。
我花了半个小时浏览了一遍配置说明后就开始进行配置文件编写,除了在 tun 模式配置上遇到了些问题(在网上搜索后在恩山论坛的一个帖子得到了答案)外,其他部分的配置基本都是查阅配置说明并复制参考配置按需修改即可。
从开始进行客户端配置到最终可以使用自建服务科学上网,我总共花费了半天左右时间。
使用感受
在写这篇博客时,我已经使用自建服务近一个月了。服务非常稳定,几乎没有出现过代理不可用的情况。之前担心的 IP 被封的情况也没发生,看 Netflix 也完全不卡了。简言之,这次自建服务的尝试是非常成功的。我会继续使用下去。如果后续我的看法发生了变化,我会继续更新此博客。
简单的总结一下,自建方案的优点是:
- 安全性高,不用担心机场存储你的网络访问记录和(可能存在的)窥视你在网上的一举一动。
- 稳定性强,不用承担机场跑路的风险。
- 网络速度快,独享流量和网络带宽。
相对于使用机场而言,自建方案也有一些不足之处的:
- 单 VPS 没有故障转移的能力,一旦 VPS 故障或 IP 被封就无法科学上网了。而如果采用多 VPS 部署服务,虽然可以自动故障转移,但每年花在 VPS 上的钱会比使用机场高出不少,并且绝大多数时间服务器都是闲置的。
- 自建服务也就意味着需要自行维护。也就没有了使用机场的简单省事。虽然在完成服务器搭建后的这一个多月里我都没有登陆过 VPS 了,但这并不意味着没有维护成本,后续的软件升级维护等事项依然会持续耗费精力。
总而言之,自建方案在得到了更多安全性的同时牺牲了一些便利性。因此更适合有一定技术能力且愿意在这方面投入精力的人。
One More Thing
通过这次自建服务的经历,我发现我甚至可以非常粗略的估算出机场的成本和利润率。估算方法如下:最便宜的 VPS 大概一年 17 美元,提供每月 3T 流量和 1G 带宽。而我使用的机场最便宜的套餐是一年 26 美元,提供每月 200G 流量和 100M 带宽。由此可以推算一台 VPS 可以支持 10 个用户同时使用完全绰绰有余。而实际情况是 10 个用户同时跑满带宽的情况非常低,因此机场应该会大量超卖。再考虑到机场大规模采购 VPS 甚至直接在 IDC 托管服务器设备的成本应该更低。由此可以推断在用户充足的情况下,占机场成本最大的服务器和网络成本还不到营收的 3%,甚至更低。这也就可以理解为什么机场都提供非常慷慨的分销返利了。