|
直接说结论:绝大多数情况下,登录的网你打不开某个境外网站,境外不是登录的网因为你的设备坏了,而是境外因为数据包在中间被拦住了。这事我最早是登录的网在2013年碰上的。当时想查一个开源项目的境外文档,托管在Google Code上,登录的网浏览器转了半天圈,境外最后蹦出一个“连接超时”。登录的网我以为是境外路由器的问题,重启了三回,登录的网后来才反应过来——那条路根本不通。境外 数据从你的登录的网电脑出发,要经过好几层路由节点才能到达目标服务器。境外正常情况下,登录的网这些节点只管转发,不管内容。但某些节点会检查你访问的地址,发现不在白名单里,直接把包丢了。丢包的表现就是超时,不是报错,不是拒绝连接,就是干等。所以判断标准很简单:ping得通但网页打不开,大概率是DNS被污染;连ping都超时,那多半是IP层就被阻断了。 DNS污染是最常见的。你输入一个域名,电脑先要问DNS服务器“这个域名对应哪个IP”。如果DNS返回了一个假地址,你的浏览器就会跑去敲一个根本不存在的门。解决办法是换DNS。把系统或路由器的DNS改成1.1.1.1或者8.8.8.8,有时候能直接解决问题。但别高兴太早,很多网络环境下,UDP 53端口的DNS查询也会被劫持,换了也白换。这时候可以用DNS over HTTPS,浏览器里搜“安全DNS”就能设置,Firefox和Chrome都支持。 DNS通了之后,还有SNI检测。TLS握手的时候,客户端会明文发送你要访问的域名,这个字段叫SNI。中间设备看到SNI里包含敏感域名,直接切断连接。表现就是浏览器显示“连接已重置”。对付这个,可以用ECH(Encrypted Client Hello),把SNI加密。Cloudflare从2023年开始默认支持ECH,但需要客户端也支持。目前Firefox开了network.dns.echconfig.enabled就能用,Chrome还在实验阶段。 上面说的都是“绕”,不是“翻”。真要稳定访问,还是得走代理。代理的原理是把你的请求先发给一个中间服务器,由它替你访问目标网站,再把结果传回来。中间服务器不在被阻断的路径上,所以能通。常见的有HTTP代理、SOCKS5代理,还有各种基于加密隧道的方案。选哪个取决于你的需求:只是看网页,HTTP代理够用;要跑P2P或者游戏,SOCKS5更合适;需要混淆流量特征,那就得用带伪装层的协议。 我自己常用的组合是:本地跑一个代理客户端,浏览器插件SwitchyOmega做分流。国内网站直连,境外走代理。这样速度最快,也不会因为全局代理导致国内服务变慢。配置的时候注意一点:代理规则要写对,*.google.com和google.com是两回事,前者不匹配裸域名。我见过有人配了半天打不开,最后发现是规则少写了一个星号。 手机上的情况稍微不同。Android可以用V2RayNG或者Clash for Android,iOS上Shadowrocket和Quantumult X都行。但iOS有个坑:某些代理协议在后台会被系统杀掉,需要开“始终连接”的VPN开关。另外,别在公共WiFi下裸奔用代理,尤其是那些不需要密码的热点。我朋友在咖啡馆连了一个免费WiFi,第二天邮箱就被撞库了。代理只解决“能不能访问”的问题,不解决“安不安全”的问题。 最后说一个容易被忽略的点:时间。代理协议大多依赖TLS证书验证,而证书验证依赖系统时间。如果你的设备时间偏差超过几分钟,握手就会失败。表现是代理客户端显示连接成功,但浏览器打不开任何网页。这时候校准一下系统时间就行。我帮人排查过至少五次这个问题,每次对方都以为是节点挂了,其实只是电脑时间慢了七分钟。 |