写在前面

最近一直在折腾手里的几台小鸡,试图解决一个老大难问题:怎么才能稳定、快速地访问海外网络?

我手里的“原料”清单如下:

  1. 前置鸡:一台阿里云的广州轻量应用服务器(腾讯云、华为云的同类产品也一样),贪图它便宜、带宽大,用来做流量入口。
  2. 中转鸡:一台香港的 IX 鸡,从圈内一家服务商那儿买的。它的核心价值是从广州到香港这一跳的延迟和稳定性。
  3. 落地鸡:一台月抛的日本东京 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 IDApiHostApiKey “三件套”复制到记事本里,这是后面配置后端的核心凭证。

第2步:日本落地鸡 - 部署“大脑”XrayR

这是最终干活的机器。

  1. 安装 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
    
  2. 配置 XrayR

    • vi /etc/XrayR/config.yaml
    • 把“三件套”填进去。
    • 【坑点一】: NodeType 别忘了改成 Shadowsocks。我第一次就忘了改,日志里一直报错,说节点类型不匹配。
    • ControllerConfig.Port 我这里设置为 50001。这是 XrayR 在这台日本鸡上监听的端口,一会儿中转鸡的流量会发到这里。
  3. 配置防火墙

    • 【坑点二】: 别忘了在这台机器的防火墙里放行 50001 端口!不然中转鸡的流量会被挡在门外。我用的 ufw
      ufw allow 50001
      
    • 如果是云平台,要去控制台的安全组里放行。
  4. 启动 XrayR 并检查

    systemctl start xrayr && systemctl enable xrayr
    # 检查下服务状态
    systemctl status xrayr
    # 确认端口是否在监听
    ss -nltp | grep 50001
    

    看到绿色 active (running) 和端口监听信息,这台机器就绪。

第3步:香港 IX 中转鸡 - 部署“快递员”Realm

这台是“过路神仙”,是整个架构的核心跳板。

  1. 安装 Realm

    • mkdir -p /etc/realm && cd /etc/realm
    • 建议本地下好 realm 压缩包,用 scp 上传到这个目录,再解压授权。国内服务器直连 Github 经常抽风。
    • tar -zxvf realm-*.tar.gz && chmod +x realm
  2. 配置 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" 
      
  3. 配置 Systemd 守护进程并启动

    • vi /etc/systemd/system/realm.service,写入标准配置,让它能开机自启、稳定运行。
    • systemctl enable realm && systemctl start realm && systemctl status realm
    • 看到绿色 active (running),跳板搭建完毕。

第4步:阿里云前置鸡 - 部署“门面”Realm

这是流量的入口,也是最容易出问题的地方。

  1. 配置防火墙(最关键的一步!)

    • 【坑点三,新手劝退点】: 这是最多人翻车的地方。必须先去阿里云的控制台
    • 找到这台轻量应用服务器的 网络与安全 -> 防火墙
    • 点击 添加规则,放行 TCP 和 UDP 协议的 10086 端口(或者你在 Xboard 里设置的任何端口)。源IP保持 0.0.0.0/0
    • 不放行这个,客户端的流量根本进不来,后面的一切都白搭。
  2. 安装与配置 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" 
      
  3. 启动 Realm

    • 同样用 systemd 启动并检查状态。

多说几句:为啥用Realm?其他工具行不行?

这次折腾全程用的 realm,主要是图它简单。但实际上,做转发的工具很多,各有各的适用场景,在这里也顺便记一下我的理解。

  • Realm

    • 优点:就像笔记里写的,配置超级简单,一个 .toml 文件就搞定所有。TCP/UDP 都支持,性能对于绝大多数场景来说绰绰有余。对新手非常友好。
    • 缺点:功能比较纯粹,就是端口转发。想玩点花的就无能为力了。
  • iptables

    • 优点:Linux 内核自带的大杀器,性能理论上是最好的,因为它直接在内核层做 NAT 转发。不用装任何额外软件,非常底层,逼格也高。
    • 缺点:配置相对繁琐,得敲好几条命令(PREROUTING, POSTROUTING 这些),还得开启内核转发。对新手不太友好,容易出错。这是追求极致性能和原生主义者的选择。
  • gost

    • 优点:功能最强大的瑞士军刀。它远不止是端口转发,还能做各种协议转换、多级代理链、负载均衡等等。
    • 缺点:对于我这个单纯的流量转发需求,用 gost 有点杀鸡用牛刀了,它的配置文件或命令行参数相对复杂一些。但如果你想玩得更花,比如给中转链路加个密,那 gost 就是不二之选。

简单总结一下我的选择逻辑:

  • 就想简单转发 -> Realm
  • 极致性能控,不爱装东西 -> iptables
  • 想玩各种花活儿 -> gost