跳转到正文
~/tosaki
返回

墙外的人想进去:海外网络回国指南

约 6 分钟
编辑此页

目录

免责声明:本文只讨论身处海外时,如何通过代理访问中国大陆的服务,不涉及任何在中国大陆境内绕过防火墙的行为。请务必遵守所在地的法律法规。

虽说新加坡的宽带在全球网速榜上常年名列前茅,千兆入户不过是起步价,可在 SG 住过一阵子的人,大概都经历过下面这些场景:

  • 晚上想在 B 站补一个冷门视频,4K 进度条缓冲得比播放还慢,至于二倍速,想都别想;
  • 打开国服游戏,右上角的 Ping 值常年挂在 200 以上,就没下来过;
  • 部分国内网站干脆打不开,就算打开了,图片也是一张一张慢慢往外挤,仿佛梦回 2G 时代。

千兆的管子,怎么会这样?本文聊两件事:大陆和海外之间的线路到底出了什么问题,以及我自己是怎么绕过去的。

物理上,它不该这么慢

光在光纤里的速度大约是真空中的三分之二,所以延迟基本由距离决定。上海到美西直线约一万公里,往返的理论下限在 100ms 出头;实际线路要绕海缆走,最好的能做到 130ms 左右,普通线路的典型值则在 160ms 上下。按这个比例粗算,上海到东京的往返应该在 40ms 上下,深圳、上海到新加坡也就 50ms 左右。

那我们随手找两台普通的新加坡和日本服务器,看看它们访问国内的实际表现:

左:一台普通新加坡服务器;右:一台普通日本服务器。到国内三网的延迟大多在 220–360ms,日本那台有几条线路甚至超过 700ms,还伴随明显丢包——而日本到洛杉矶只要 106ms,横跨太平洋都比回国快

这对吗?

数据中心的网络可能有自己的问题,那换成真实的新加坡家庭宽带呢?下面是用本地运营商网络跑出的结果(脚本:bash <(curl -Ls Check.Place)):

新加坡普通家宽访问国内三网的 TCP 大包延迟:电信、联通全线红色,普遍 350–400ms

满屏飘红。电信和联通几乎全军覆没,移动稍好,但也和理论值相去甚远。

你的数据包去欧美旅游了

这事还真不能全怪方校长。一般认为,互联网流量从来不走物理上最短的路,而是走经济上最便宜的路。

亚太地区的网络互联成本是出了名的高。出于种种原因,“新加坡 → 美国 → 中国”的总成本往往比“新加坡 → 中国”直连还低,于是流量就老老实实地绕一个大圈。新加坡到美西本身就要 170ms 左右,再从美西折回国内,总延迟冲上 300ms 也就不奇怪了。

而且绕路也未必是去美国。BGP 路由是动态调整的,去程和回程甚至可能不是同一条路。下面是我分别用 SingTel 手机热点访问上海、用 StarHub 家宽访问北京的 NextTrace 结果:

左:SingTel → 上海,数据包先后途经马赛、法兰克福,最后从南京入境,全程 456ms;右:StarHub → 北京,经圣何塞绕太平洋一圈,全程 390ms

“我在海外搞网络这么多年,数据包怎么走我很清楚。一个 TCP 请求从新加坡去上海,先飞马赛,再到法兰克福,最后从南京入境回国;换个运营商去北京,又得经圣何塞绕太平洋一圈。我光念完这些路由节点都要半分钟,而这些数据包在地球上公费旅游一圈只需要 400 毫秒。400 毫秒啊!这 400 毫秒的 Ping 值,让你们在国服打十年游戏都放不出一个大招!”

世界加钱可及

看到这里,你可能要举手了:“不对啊,我用过 tz,这些地区的节点延迟明明没那么高?”

因为奇迹和魔法都不是免费的。运营商当然也准备了加钱的选项:链路两端都能买到更贵的优化线路,甚至专线。这类服务通常只对大客户开放,但也有例外——比如上海联通就曾允许个人用户加钱开通国际精品网。

国内这一端不方便加钱的话(毕竟我们控制不了国内的服务器),还可以在海外那一端加:买一台接入优化线路的服务器,在上面架设代理节点。下文的示例,是我在 GreenCloud 买的一台“中国优化”新加坡 VPS:

GreenCloud 的 CN Premium Optimized Plan Mini(新加坡):25 美元/月,500GB 流量,宣称接入 CN2 GIA / 联通精品网 / CMI

商家宣称它接入了三网的高端线路。如果你分不清 CN2 GIA、9929、CMIN2 这一串代号,可以看看这篇大陆网络线路科普。实际效果如何,用同一个脚本测一下就知道了:

同一个测速脚本,换成优化线路 VPS 后:三网延迟普遍回落到 50–100ms,回程分别走 CN2 GIA、9929 和 CMIN2

从满屏飘红到一片翠绿,这就是钱的颜色。如果你也想试试,欢迎走我的 Referral 链接,我能拿到一点返利。

开始之前

怎么在 VPS 上搭节点、怎么在本地接入,本文不打算展开。这类教程网上汗牛充栋,而且如今随便哪个 AI Agent 都能手把手带你做完。

我唯一的建议是:用 Sublink Works 给节点生成订阅链接,后面会用到它的自定义规则功能。当然,你也可以直接把这篇文章丢给 Agent,让它替你生成一份完整的回国加速配置。至于我为什么还在手搓,纯粹是因为这套工作流搭建于前 Agent 时代,现在懒得推倒重来了。

节点就绪后,可以在电脑上接入,也可以在路由器上接入。我更推荐后者:一次配置,全屋受益,不用每台设备各折腾一遍。下文以 OpenWrt + OpenClash 为例;如果你用的是 Clash Verge Rev、Clash Meta 等客户端,思路完全一样。

游戏:从 300ms 到 80ms

最简单粗暴的第一步:选中优化线路节点,开启 TUN 模式 + 全局模式。

OpenClash:运行模式选 TUN,代理模式选全局

这时重新打开游戏,延迟应该会立刻降到一个合理的区间:原神从 200ms 降到 80ms,鸣潮从 340ms 降到 100ms。对非竞技类游戏来说,这已经完全够用了;还想再低?要么继续加钱,要么物理回国。

加速前后的游戏内延迟,左为加速前、右为加速后:上排原神 196ms → 79ms,下排鸣潮 340ms → 108ms

注意,UDP 一定要被接管,最省事的办法就是 TUN。游戏大多走 UDP,而普通的系统代理只能接管 TCP。不开 TUN,游戏流量会原封不动地从代理旁边溜过去,继续去欧洲旅游。

别让全家都走 VPS

但全局模式有个显而易见的问题:家里所有流量都会从 VPS 过一遍。访问国外内容时平白多绕一跳,速度只会更慢;更要命的是 VPS 有流量配额。以我这台为例,代理流量进出 VPS 各算一次,标称的 500GB 实际只能代理约 250GB。

所以更推荐规则模式:其他分组一律设为 DIRECT(顺手把广告拦截分组设为 REJECT,还能顺便去掉一些广告),只把“国内服务”分组指向优化节点。

规则模式下,“国内服务”分组指向优化节点,其余走直连

更精细一点:只加速游戏

如果你只想加速游戏,不想让其他国内流量占用 VPS 的配额,可以在 Sublink Works 里加一个自定义规则分组:

[
  {
    "name": "🎮 国内游戏",
    "site": "",
    "ip": "",
    "domain_suffix": "yuanshen.com, genshinimpact.com, bhsr.com, starrails.com, honkaistarrail.com, juequling.com, zenlesszonezero.com, aki-game.com, aki-game2.com, kurobbs.com, kurogames.com, aki-game.net, aki-game2.net, kurogame-service.com, kurogame.net, kurogame.com, kurogame.xyz, carystudio.com, kuropage.com, kurogames.net, mihoyo.com, miyoushe.com, mhystatic.com, mhyurl.cn, mihayo.com, mihayou.com, mihoyocg.com, mihoyogift.com, mihoyomall.com, hoyoverse.com, hoyolab.com, hoyo.link, n0vadesktop.com, hypergryph.com",
    "domain_keyword": "",
    "ip_cidr": "",
    "protocol": ""
  }
]

(列表里是米哈游、库洛、鹰角等厂商的域名,你也可以换成自己玩的游戏。)

光靠域名还不够:游戏的实际对局往往直接连 IP,不经过域名解析。所以还要在 OpenClash 里加一条覆写规则:

rules:
- AND,((OR,((RULE-SET,cn-ip),(RULE-SET,cn))),(NETWORK,UDP)),🎮 国内游戏

它的意思是:凡是目的地为中国大陆、且走 UDP 的流量,一律归入“国内游戏”分组。再把这个分组指向优化节点,就大功告成了。

无论用哪种方案,都可以在连接列表里验证一下,游戏连接应该已经走上了代理:

连接列表中,一条 UDP 游戏连接命中了分组,走的是优化节点

这条规则也可能顺带代理一些 QUIC 流量和其他 UDP 流量,比如视频会议。不过 OpenClash 本身就能禁用 QUIC,其他 UDP 需求一般也用不了多少流量,我就暂时没管;你也可以按自己的需求细化规则。

B 站还是很卡

游戏搞定了,B 站却依然卡。

凭个人体感,B 站的海外 CDN 相当拉胯,冷门视频的 4K 几乎没法看。B 站在海外主要用 Akamai 的 CDN,我猜问题出在冷门视频的回源上:热门视频早已缓存在海外节点,冷门视频却每次都得从国内慢慢拉。

这就意味着,单纯把“哔哩哔哩”分组切到优化节点并不管用——优化节点的出口依然是新加坡 IP,B 站照样会给你分配海外 CDN。我们真正想要的,是让请求直接打到国内 CDN。

我试过下面两个方案,都能部分奏效:

它们都能把大部分视频的加载线路改到国内 CDN。在此基础上,再把规则里的 Bilibili 分组指向优化节点,加载速度还能再上一个台阶。

FAQ

Q:这些配置我看不懂……

把你的需求和节点信息交给一个足够强的 AI Agent,它大概率能写出比这篇文章还规范的 Clash 配置。

Q:我想以国内身份看版权受限的内容……

这比较高危,不建议这么做。如果你手头有国内服务器,可以去问问 AI,但请务必遵守相关法律法规。

Q:我还想加速其他网站……

如果没用自带的“国内服务”分组,在覆写规则里加上对应域名即可。

Q:这算不算“FQ”?

不算。这类行为在新加坡完全合法,而且所有操作都发生在境外,也没有任何绕过防火墙的尝试。

Q:去哪找带中国线路优化的 VPS?

除了上面那个 Referral 链接,还可以去 DigVPS 看看测评和线路信息。


编辑此页
分享这篇文章:



上一篇
Q3 随手拍
下一篇
海南追箭记