写在前面
最近一直在折腾手里的几台小鸡,试图解决一个老大难问题:怎么才能稳定、快速地访问海外网络?
我手里的“原料”清单如下:
- 前置鸡:一台阿里云的广州轻量应用服务器(腾讯云、华为云的同类产品也一样),贪图它便宜、带宽大,用来做流量入口。
- 中转鸡:一台香港的 IX 鸡,从圈内一家服务商那儿买的。它的核心价值是从广州到香港这一跳的延迟和稳定性。
- 落地鸡:一台月抛的日本东京 VPS,用来做最终的业务处理和出口。
目标很明确:客户端的流量,要先经过国内的阿里云,然后通过香港 IX 的高速通道,最后从日本的机器出去。这样能最大限度地保证连接稳定和低延迟。
这套 国内前置 -> IX 中转 -> 海外落地 的三层架构跑了几天,效果拔群。怕时间长了忘了各种细节,干脆写一篇超详细的笔记给自己备忘,也分享给像我一样爱折腾的你,把所有坑点和关键配置都记录下来。
磨刀不误砍柴工:先规划好架构
在动手前,必须把流量的路径规划清楚,不然配置的时候肯定会乱。这就好比画作战地图。
我的作战地图:
客户端 -> 阿里云(前置) -> 香港IX(中转) -> 日本VPS(落地) -> Google
每台机器的角色分工:
阿里云 (前置鸡):门面担当
- 任务: 它是我们整个架构的入口,直接面对用户的连接请求。上面需要跑一个转发工具,把所有收到的流量都原封不动地“扔”给下一站——香港IX鸡。
- 关键点: 它自己的防火墙必须开门(放行指定端口),不然客人都进不来。
香港IX (中转鸡):高速快递员
- 任务: 它的作用就是个“高速跳板”。它也跑一个转发工具,接收从阿里云发来的“包裹”,然后利用自己优秀的国际网络,光速把“包裹”再发给最终的日本落地鸡。
- 关键点: 它要知道下一站(日本鸡)的地址和门牌号(IP和端口)。
日本VPS (落地鸡):最终执行者
- 任务: 这是真正干活的机器。它上面跑着
XrayR,负责和我们的Xboard面板“对暗号”(用户认证、流量统计),然后处理代理请求,作为最终的互联网出口。 - 关键点: 它也得开好防火墙,只让我们的中转鸡能连接。
- 任务: 这是真正干活的机器。它上面跑着
旁注:能不能简单点? 当然可以。如果你的 IX 鸡本身出口就很好(比如就是香港出口),那可以简化成
前置 -> IX落地的两层架构。这种情况下,IX 鸡身兼数职,直接在上面装 XrayR 就行。本文主要讲更灵活的三层模型,但思路是完全通用的。
开干!超详细的步骤记录
下面是按顺序的操作记录,包含了我自己踩过的坑,跟着做能省不少事。
第1步:Xboard 面板 - 画好蓝图
这是起点,定义了最终客户端看到的节点信息。
- 登录 Xboard,添加节点。
- 节点地址:
阿里云的公网IP。 - 连接端口:
10086。(这个端口是我计划在前置机上暴露给公网的,你可以换成别的)。 - 协议等:我用的是
Shadowsocks+aes-256-gcm,你按需选择。 - 创建好后,把
Node ID、ApiHost、ApiKey“三件套”复制到记事本里,这是后面配置后端的核心凭证。
第2步:日本落地鸡 - 部署“大脑”XrayR
这是最终干活的机器。
安装 XrayR
wget -N [https://raw.githubusercontent.com/wyx2685/XrayR-release/master/install.sh](https://raw.githubusercontent.com/wyx2685/XrayR-release/master/install.sh) && bash install.sh配置 XrayR
vi /etc/XrayR/config.yaml- 把“三件套”填进去。
- 【坑点一】:
NodeType别忘了改成Shadowsocks。我第一次就忘了改,日志里一直报错,说节点类型不匹配。 ControllerConfig.Port我这里设置为50001。这是 XrayR 在这台日本鸡上监听的端口,一会儿中转鸡的流量会发到这里。
配置防火墙
- 【坑点二】: 别忘了在这台机器的防火墙里放行
50001端口!不然中转鸡的流量会被挡在门外。我用的ufw:ufw allow 50001 - 如果是云平台,要去控制台的安全组里放行。
- 【坑点二】: 别忘了在这台机器的防火墙里放行
启动 XrayR 并检查
systemctl start xrayr && systemctl enable xrayr # 检查下服务状态 systemctl status xrayr # 确认端口是否在监听 ss -nltp | grep 50001看到绿色
active (running)和端口监听信息,这台机器就绪。
第3步:香港 IX 中转鸡 - 部署“快递员”Realm
这台是“过路神仙”,是整个架构的核心跳板。
安装 Realm
mkdir -p /etc/realm && cd /etc/realm- 建议本地下好
realm压缩包,用scp上传到这个目录,再解压授权。国内服务器直连 Github 经常抽风。 tar -zxvf realm-*.tar.gz && chmod +x realm
配置 Realm
vi /etc/realm/config.toml,这是它的行动指南:[network] use_udp = true # UDP必须开,不然游戏、视频通话会出问题 [[endpoints]] # 监听哪个端口。如果是NAT鸡,这个40014必须是商家分配给我的。 # 我这台是独立IP,就自己定一个,但别忘了在IX鸡自身的防火墙(如果有的话)里放行。 listen = "0.0.0.0:40014" # 转发到哪去。目标非常明确,就是我那台最终干活的日本小鸡。 remote = "日本鸡的公网IP:50001"
配置 Systemd 守护进程并启动
vi /etc/systemd/system/realm.service,写入标准配置,让它能开机自启、稳定运行。systemctl enable realm && systemctl start realm && systemctl status realm- 看到绿色
active (running),跳板搭建完毕。
第4步:阿里云前置鸡 - 部署“门面”Realm
这是流量的入口,也是最容易出问题的地方。
配置防火墙(最关键的一步!)
- 【坑点三,新手劝退点】: 这是最多人翻车的地方。必须先去阿里云的控制台!
- 找到这台轻量应用服务器的 网络与安全 -> 防火墙。
- 点击 添加规则,放行 TCP 和 UDP 协议的
10086端口(或者你在 Xboard 里设置的任何端口)。源IP保持0.0.0.0/0。 - 不放行这个,客户端的流量根本进不来,后面的一切都白搭。
安装与配置 Realm
- 同上一步,安装好 Realm 并配置好 systemd。
vi /etc/realm/config.toml- 这里的
remote地址要特别注意,它指向的是“中转鸡”,而不是“落地鸡”。[network] use_udp = true [[endpoints]] # 监听我在阿里云防火墙里放行了的那个公网端口 listen = "0.0.0.0:10086" # 转发的目标是我的香港IX中转鸡,以及它上面Realm监听的端口 remote = "香港IX鸡的IP:40014"
启动 Realm
- 同样用
systemd启动并检查状态。
- 同样用
多说几句:为啥用Realm?其他工具行不行?
这次折腾全程用的 realm,主要是图它简单。但实际上,做转发的工具很多,各有各的适用场景,在这里也顺便记一下我的理解。
Realm- 优点:就像笔记里写的,配置超级简单,一个
.toml文件就搞定所有。TCP/UDP 都支持,性能对于绝大多数场景来说绰绰有余。对新手非常友好。 - 缺点:功能比较纯粹,就是端口转发。想玩点花的就无能为力了。
- 优点:就像笔记里写的,配置超级简单,一个
iptables- 优点:Linux 内核自带的大杀器,性能理论上是最好的,因为它直接在内核层做 NAT 转发。不用装任何额外软件,非常底层,逼格也高。
- 缺点:配置相对繁琐,得敲好几条命令(
PREROUTING,POSTROUTING这些),还得开启内核转发。对新手不太友好,容易出错。这是追求极致性能和原生主义者的选择。
gost- 优点:功能最强大的瑞士军刀。它远不止是端口转发,还能做各种协议转换、多级代理链、负载均衡等等。
- 缺点:对于我这个单纯的流量转发需求,用
gost有点杀鸡用牛刀了,它的配置文件或命令行参数相对复杂一些。但如果你想玩得更花,比如给中转链路加个密,那gost就是不二之选。
简单总结一下我的选择逻辑:
- 就想简单转发 ->
Realm - 极致性能控,不爱装东西 ->
iptables - 想玩各种花活儿 ->
gost