懒猫微服自定义入口实践:用 Rathole 接入公网 VPS

玄兴梦影

发布于90天前
代码是生活,诗歌是精神。做一个诗意的工程师。

本文是官方《懒猫自定义入口控制器使用说明书》的 Rathole 实操补充:从公网 VPS 配置、端口放行到微服端创建入口,完整记录一次可复现的部署过程。

这篇文章补充什么

当客户端与微服无法直连时,可以把一台有公网 IP 的服务器设置为自定义入口,让客户端通过这台服务器访问微服。

官方说明已经介绍了路由器转发、Rathole、SSH、Mulan 等方式。本文不重复完整功能说明,只补充我在阿里云 ECS 上部署 Rathole 时遇到的几个具体问题:

  • Rathole 服务端和控制器内置客户端的版本如何匹配
  • 云服务器需要放行哪两个端口
  • 为什么服务刚启动时只看到 9994,看不到 7736
  • 自定义入口控制器中的字段如何对应 server.toml
  • 多台微服为什么不能共用同一个 Service

完整功能与其他接入方式请先看官方说明:懒猫自定义入口控制器使用说明书。

应用商店:[懒猫自定义入口控制器](https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.customrelay)(`cloud.lazycat.app.customrelay`)
https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.customrelay

下面是 Rathole 路线的实操记录。


自定义入口到底解决什么

一句话:用一台有公网 IP 的 VPS作为客户端访问微服的入口。

我这边没有家庭公网,因此选择 Rathole。商店应用「自定义入口控制器」已经内置 Rathole 客户端,云上只需要安装服务端。

角色装什么
公网 VPSRathole 服务端
懒猫微服「自定义入口控制器」(内置 client)
手机 / PC 客户端不用单独装 Rathole

拓扑如下:业务走 7736,控制面走 9994。

rathole-topology.png

官方说明:懒猫自定义入口控制器使用说明书

应用商店:[cloud.lazycat.app.customrelay](https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.customrelay)

准备

  1. 一台公网服务器(我用阿里云 ECS,Ubuntu 22.04,x86_64)
  2. SSH 能上去(建议本机免密)
  3. 安全组放行 TCP:
    • 控制口 9994
    • 对外口 7736
    • 本机 ufw 关着也没用,阿里云安全组拦了照样连不上

token 别用文档示例,自己生成:

openssl rand -hex 24

安装 Rathole 服务端

我这次使用的是 v0.4.8。自定义入口控制器里已经内置 Rathole 客户端,服务端需要与它保持同一版本。如果应用后续更新了内置版本,请以应用内的下载提示为准,不要照搬本文版本号。

官方确认-需同版本rathole.png

这次下载的文件是:rathole-x86_64-unknown-linux-gnu.zip。

踩坑:云机直连 GitHub 很慢,还可能没 unzip

ECS 里 curl GitHub 经常卡死;就算下到了,镜像里没有 unzip 也会挂。我实际做法:

  1. 本机下载并解压
  2. scp 把二进制拷到 /usr/local/bin/rathole
  3. chmod 755,确认 rathole --version 是 0.4.8

配置

mkdir -p /etc/rathole

/etc/rathole/server.toml:

[server]
bind_addr = "0.0.0.0:9994"

[server.services.s1]
token = "换成你自己生成的 token"
bind_addr = "0.0.0.0:7736"
chmod 600 /etc/rathole/server.toml

开机自启

/etc/systemd/system/rathole.service:

[Unit]
Description=Rathole Server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/rathole -s /etc/rathole/server.toml
Restart=on-failure
RestartSec=3s
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now rathole
systemctl status rathole
ss -lntp | grep 9994

日志里出现 Listening 0.0.0.0:9994 就对了。


7736 暂时没在听,不一定是坏了

刚启动时,ss 常常只看得到 9994。

7736 是对外口,很多情况下要等微服上的客户端连上之后才会监听。所以:

  • 本机测 7736 暂时拒绝,别急着重装
  • 安全组照样先放行 7736
  • 先保证外网能打到 9994,再去应用里测试

在懒猫微服里使用

VPS 上的 Rathole 服务端起来之后,打开你的懒猫微服(客户端连上那台微服),在微服桌面里安装并配置「自定义入口控制器」。这一步不在阿里云上做,是在微服里面完成。

1. 商店安装 / 打开

在应用商店搜索「自定义」,找到 懒猫自定义入口控制器,安装后点打开。

应用商店详情:[cloud.lazycat.app.customrelay](https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.customrelay)

01-商店搜索-自定义入口控制器.png

02-打开应用.png

2. 添加 rathole 入口

点 添加,入口类型选 rathole。表单字段和前面的 server.toml 要一一对应:

表单项填什么对应服务端
自定义入口 · IP/域名VPS 公网 IP对外暴露的那台机器
自定义入口 · 端口7736bind_addr = "0.0.0.0:7736"
服务器地址公网IP:9994[server] bind_addr 控制口
Services1[server.services.s1] 这段名字
TypeTCP与文档一致
Token自己生成的那串token = "..." 必须完全一致

应用里下载链接也指向 v0.4.8,和前面说的同版本要求一致。

04-添加表单-rathole.png

建议顺序:

  1. 先点 测试,通了再 创建
  2. 列表里状态变为「正常」后,再点一次 测试 确认
  3. 打开 自启动(见下一步)

3. 创建成功后的列表

成功后列表会出现类似 /ip4/<你的公网IP>/tcp/7736 的入口,状态为「正常」。

03-入口列表-状态正常.png

4. 打开应用自启动

进微服「应用管理」,搜索「懒猫自定义」,找到 懒猫自定义入口控制器,把「应用自启动」设为 开启。微服重启后会自动把转发拉起来,不用每次重新启动。

05-应用管理-自启动开启.png

应用信息也可在商店核对:

[懒猫自定义入口控制器(cloud.lazycat.app.customrelay)](https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.customrelay)

服务端体检:

rathole --version
systemctl is-active rathole
ss -lntp | grep 9994

检查清单

  • 安全组放行 TCP 9994、7736
  • rathole 为 enabled + active
  • token 两端一致
  • 应用已自启动
  • 外网能通 9994
  • 应用内测试通过,入口列表状态显示为「正常」

这些检查全部通过后,客户端就可以使用你配置的自定义入口。实际体验取决于 VPS 的带宽、线路、延迟以及本地网络环境。


多微服:每台微服使用独立 Service

如果同一台 VPS 要给多台微服提供自定义入口,控制口可以共用,但每台微服都应该使用独立的 Service、token 和对外端口。

两台微服都使用 s1 和同一 token 时,会互相抢占控制通道;服务端日志可能反复出现 Dropping previous...。两台微服可以这样拆分:

[server]
bind_addr = "0.0.0.0:9994"

[server.services.s1]
token = "微服A自己的token"
bind_addr = "0.0.0.0:7736"

[server.services.s2]
token = "微服B自己的token"
bind_addr = "0.0.0.0:7737"

第一台填写 s1、7736 和自己的 token;第二台填写 s2、7737 和另一串 token。安全组也要同步放行新增的 7737 端口。修改服务端配置后重启 Rathole,再分别测试两条入口。


使用后的体验与成本

启用后,远程访问会经过自己配置的 VPS。我的实际体验明显改善,但这只是个人环境下的结果,不代表所有线路都能达到相同效果。

我这边阿里云带宽采用按使用流量计费,峰值设置为 50 Mbps。这种计费方式适合我的使用频率;选购时仍要结合自己的流量、地域和云厂商规则计算成本。

阿里云-按流量峰值50Mbps.png

如果暂时不需要这条入口,可以在控制器中停用自定义入口;需要时再启用即可。

反馈-自定义入口丝滑.png


写在后面

这篇文章不是替代官方说明,而是把 Rathole 方案中最容易卡住的几步补完整:版本匹配、双端口放行、字段对应、自启动和多微服隔离。

建议先读官方说明,再把本文当作部署与排障清单。后续应用版本或界面变化时,以官方文档和应用内提示为准。

token、IP、端口记在自己的私有备忘里,别发公开仓库。

评论

0

暂无评论

说点什么呢~
收藏
0
0
0