reverse tunnel
v1.3.2
rtun是一个通过公共网关服务器向 Internet 公开 TCP 和 UDP 端口的工具。您可以在防火墙和 NAT 后面的计算机上公开 ssh 和 mosh 服务器。
已编译的二进制文件可在发布页面中找到。要构建您自己的,请克隆存储库并制作:
$ git clone https://github.com/snsinfu/reverse-tunnel
$ cd reverse-tunnel
$ make
或者,
$ go build -o rtun github.com/snsinfu/reverse-tunnel/agent/cmd
$ go build -o rtun-server github.com/snsinfu/reverse-tunnel/server/cmd
Docker 镜像可用:
快速使用:
$ docker run -it
-p 8080:8080 -p 9000:9000
-e RTUN_AGENT="8080/tcp @ samplebfeeb1356a458eabef49e7e7"
snsinfu/rtun-server
$ docker run -it --network host
-e RTUN_GATEWAY="ws://0.1.2.3:9000"
-e RTUN_KEY="samplebfeeb1356a458eabef49e7e7"
-e RTUN_FORWARD="8080/tcp:localhost:8080"
snsinfu/rtun
请参阅 docker 镜像自述文件。
创建名为rtun-server.yml
的配置文件:
# Gateway server binds to this address to communicate with agents.
control_address : 0.0.0.0:9000
# List of authorized agents follows.
agents :
- auth_key : a79a4c3ae4ecd33b7c078631d3424137ff332d7897ecd6e9ddee28df138a0064
ports : [10022/tcp, 60000/udp]
您可能想使用openssl rand -hex 32
生成auth_key
。代理通过其密钥进行标识,并且代理只能使用配置文件中列出的白名单端口。
然后,启动网关服务器:
$ ./rtun-server
现在代理可以连接到网关服务器并启动反向隧道。服务器和代理使用WebSocket进行通信,因此网关服务器可以放置在HTTPS反向代理(例如caddy)后面。这样隧道就可以通过 TLS 得到保护。
rtun-server
支持TLS证书的自动获取和更新。设置控制地址为:443
, domain
为公共网关服务器的域名。
control_address: :443
lets_encrypt:
domain: rtun.example.com
默认情况下,非 root 用户不能使用端口 443。您可能希望在 Linux 上使用setcap
允许rtun-server
绑定到特权端口:
sudo setcap cap_net_bind_service=+ep rtun-server
创建一个名为rtun.yml
的配置文件:
# Specify the gateway server.
gateway_url : ws://the-gateway-server.example.com:9000
# A key registered in the gateway server configuration file.
auth_key : a79a4c3ae4ecd33b7c078631d3424137ff332d7897ecd6e9ddee28df138a0064
forwards :
# Forward 10022/tcp on the gateway server to localhost:22 (tcp)
- port : 10022/tcp
destination : 127.0.0.1:22
# Forward 60000/udp on the gateway server to localhost:60000 (udp)
- port : 60000/udp
destination : 127.0.0.1:60000
并运行代理:
$ ./rtun
注意:当您在服务器上使用 TLS 时,网关 URL 应以wss://
开头,而不是ws://
。在这种情况下,端口号很可能应该是默认值:
gateway_url : wss://the-gateway-server.example.com
麻省理工学院许可证。