rathole简介
rathole为一个内网穿透软件,用rust编写。GitHub上6.6k的star了。对比frp,rathole性能好,占用低。配置文件和frp类似,会写frp的,就会写rathole。
rathole缺点
配置比frp要复杂点,因为rathole服务器端配置文件也要添加相关内容,frp服务器端不需要,只是在客户端添加。而且rathole文档少,官方的docker示例有坑。功能应该是比frp要少的。
部署
服务器端
- 先安装dockers
curl https://get.docker.com | bash
- 在主机建立文件夹,以及
server.toml文件
server.toml:
[server]
bind_addr = "0.0.0.0:1234" #1234端口可以随意改,和客户端一致就行。
default_token = "your token" #自己改token,和客户端一致。如果不写default,也可以每个services都分开写。
[server.services.OpenWrt]
type = "tcp"
bind_addr = "0.0.0.0:60001"
[server.services.NAS]
type = "tcp"
bind_addr = "0.0.0.0:60002"
以上services依次添加
- 将
server.toml文件放到文件夹,建立容器。以目录root/rathole/server.toml为例
docker run --restart=always --network host -d -v "/root/rathole/server.toml:/app/server.toml" --name rathole rapiz1/rathole --server /app/server.toml
dockerhub上,rathole的说明里面的一键服务器命令,我运行有问题,用上面的就可以。
客户端
- 准备
client.toml文件
[client]
remote_addr = "主机ip或域名:1234" #填写自己主机的ip或对应的域名,端口号要和服务端对应上
default_token = "your token" #和服务端对应上,如果不写default,也可以分别在services中写
[client.services.OpenWrt]
type = "tcp"
local_addr = "192.168.0.1:80" #本地的内网ip和端口
[client.services.NAS]
type = "tcp"
local_addr = "192.168.0.1:8001" #本地的内网ip和端口
名称和服务端对应
- 部署镜像
以群晖为例。将client.toml放至docker/rathole目录中

添加命令:--client /app/client.toml

这个对于群晖是个坑。
运行
用服务端定义的端口访问,主机的ip或者域名:60001就是访问本地的openwrt,ip:60002就是访问本地的nas。
其他
如果觉得加端口不方便,可以用nginx之类的在开放80和443端口的主机上做反代。其余可以多看看官方文档。

技术贴,绑定
收藏 技术贴【教程】docker部署rathole内网穿透软件教程,比frp效率高占用少
这个比frp麻烦的一点是改配置要同时改服务端和客户端,frp的服务端配置一般写好了就不用动了,加转发端口只需要改客户端就行。
有个PR解决了这个问题,不过还没有被合并:https://github.com/rapiz1/rathole/pull/275
所以虽然frp性能也许没那么高,但我还是选择frp,懒得同一份配置写两遍(