rtun é uma ferramenta para expor portas TCP e UDP à Internet através de um servidor gateway público. Você pode expor o servidor ssh e mosh em uma máquina protegida por firewall e NAT.
Binários compilados estão disponíveis na página de lançamento. Para construir os seus próprios, clone o repositório e faça:
$ git clone https://github.com/snsinfu/reverse-tunnel
$ cd reverse-tunnel
$ make
Ou,
$ go build -o rtun github.com/snsinfu/reverse-tunnel/agent/cmd
$ go build -o rtun-server github.com/snsinfu/reverse-tunnel/server/cmd
Imagens Docker estão disponíveis:
Uso rápido:
$ 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
Consulte o leia-me da imagem do docker.
Crie um arquivo de configuração chamado 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]
Você pode querer gerar auth_key
com openssl rand -hex 32
. Os agentes são identificados por suas chaves e só podem usar as portas da lista de permissões listadas no arquivo de configuração.
Em seguida, inicie o servidor gateway:
$ ./rtun-server
Agora os agentes podem se conectar ao servidor gateway e iniciar o túnel reverso. O servidor e o agente usam WebSocket para comunicação, portanto, o servidor gateway pode ser colocado atrás de um proxy reverso HTTPS como o caddy. Desta forma, o túnel pode ser protegido por TLS.
rtun-server
suporta aquisição e renovação automática de certificado TLS. Defina o endereço de controle como :443
e domain
como o nome de domínio do servidor gateway público.
control_address: :443
lets_encrypt:
domain: rtun.example.com
O usuário não root não pode usar a porta 443 por padrão. Você provavelmente pode querer permitir a ligação rtun-server
à porta privilegiada usando setcap
no Linux:
sudo setcap cap_net_bind_service=+ep rtun-server
Crie um arquivo de configuração chamado 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
E execute o agente:
$ ./rtun
Nota: Quando você estiver usando TLS no servidor, a URL do gateway deverá começar com wss://
em vez de ws://
. Neste caso, o número da porta provavelmente deverá ser o padrão:
gateway_url : wss://the-gateway-server.example.com
Licença MIT.