最近买了台 DMIT LAX Pro,前前后后折腾了一阵,最后把它做成了家里网络的美国入口。

买 VPS 很容易陷进参数表。几核 CPU、多少内存、硬盘多大、端口标多少 Gbps,看起来都很直观。可一台放在洛杉矶、主要从国内连接的 VPS,最影响体验的通常是跨境线路。机器配置再高,晚高峰一路绕、丢包、抖动,代理照样难用。

我买 DMIT,主要也是为了这条线路。

为什么是 DMIT LAX Pro

DMIT 的产品分成三类:Premium,也就是大家常说的 Pro;Eyeball,也就是 EB;以及面向国际网络的 Tier 1。按这份整理,Pro 的重点是 CN2 GIA 和中国大陆方向的线路质量,EB 更偏价格与体验的平衡,Tier 1 则没有专门为大陆访问做优化。

我需要的是一台长期在线的美国节点,平时从国内连接,同时还要承载一些 API 和轻量服务。香港和东京离得更近,但出口位置不在美国;普通洛杉矶 VPS 能给美国 IP,回国线路又经常要碰运气。LAX Pro 刚好卡在中间,保留美国西海岸的位置,又把中国方向的路由放在更高优先级。

这类机器卖得贵,钱主要花在线路上。要是只跑定时任务、离线下载或者面向海外用户的小网站,便宜的 Tier 1 机器更合适。我的流量需要每天从国内进来,线路稳定比多两核 CPU 更有用。

下面是这台机器跑 Bench、回程路由、IP 和国内延迟测试时的结果:

DMIT LAX Pro 的 Bench、回程路由、IP 和国内延迟测试结果

入口用的是 VLESS + TCP + REALITY + Vision

代理入口跑在 Xray 上,客户端协议是:

VLESS
  + TCP
  + REALITY
  + xtls-rprx-vision

一个 443 同时跑代理和 Web 服务

这台机器除了代理,还跑着一个对外的 Web 服务。两个入口都想用标准的 HTTPS 端口,我没有给 Xray 再开一个显眼的公网端口,而是在最前面放了 Nginx stream。

公网 :443
Nginx stream 读取 SNI
   ├─ 代理域名 ──> Xray ──> VLESS + REALITY
   └─ 服务域名 ──> Nginx HTTPS ──> Web 服务

stream 层只看 TLS ClientHello 里的 SNI,不解密内容。代理域名交给 Xray,服务域名交给普通 HTTPS 站点。两条链路共享一个公网端口,后端仍然彼此独立。Xray 重启时,Web 服务不会跟着中断。

真实客户端 IP 通过 PROXY protocol 继续传给后端。这个细节很容易漏掉。前面多了一层四层代理后,后端默认只能看到 Nginx 的地址,访问日志、限流和封禁都会失去依据。

这套结构也有代价。Nginx 成了两个公网入口共同依赖的一层,改配置前必须先做语法检查,能 reload 就不要直接 restart。代理和 Web 服务的后端端口只监听本机或容器网络,不直接暴露在公网。

出口没有全部交给 DMIT

DMIT 解决的是我到洛杉矶这一段连接。到了服务器以后,多数流量直接从 DMIT 出口访问互联网,少量指定业务再通过 Shadowsocks 2022 转到其他地区的落地节点。

普通流量        ──> DMIT 直连
指定美国业务    ──> Shadowsocks 2022 ──> 美国出口
指定地区业务    ──> Shadowsocks 2022 ──> 其他地区出口

这些规则同时匹配客户端和域名,只有指定客户端会命中。其他用户访问同一个域名,仍然走 DMIT 默认出口。对应隧道出问题时,规则会直接失败,不会悄悄退回直连,避免出口位置在不知情的情况下发生变化。

这里用 Shadowsocks 2022,是因为它只跑在服务器之间,目标固定,也可以限制来源 IP。相比再套一层 REALITY,它更轻,Xray 两端都原生支持,拿来做受控出口够用了。

线路质量和 IP 属性是两件事。DMIT LAX Pro 可以把国内流量比较稳地送到美国西海岸,但它仍然是数据中心 IP,不可能同时满足所有服务对出口地区和 IP 类型的要求。把 DMIT 当入口,再按业务选择出口,比指望一个 IP 包办所有事情省心。

管理流量走 Tailscale

面板没有直接放到公网。我用 Tailscale 把自己的电脑、手机和 VPS 放进一个私有网络,通过它访问管理页面。