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
麻省理工學院許可證。