rtun — это инструмент для предоставления доступа к портам TCP и UDP Интернету через сервер общедоступного шлюза. Вы можете открыть сервер ssh и mosh на машине за брандмауэром и NAT.
Скомпилированные двоичные файлы доступны на странице выпуска. Чтобы создать свои собственные, клонируйте репозиторий и сделайте:
$ 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
См. файл readme для образа докера.
Создайте файл конфигурации с именем 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]
Возможно, вы захотите сгенерировать auth_key
с помощью openssl rand -hex 32
. Агенты идентифицируются по своим ключам, и агенты могут использовать только порты из белого списка, указанные в файле конфигурации.
Затем запустите сервер шлюза:
$ ./rtun-server
Теперь агенты могут подключиться к серверу шлюза и начать обратное туннелирование. Сервер и агент используют WebSocket для связи, поэтому сервер шлюза может быть размещен за обратным прокси-сервером HTTPS, например caddy. Таким образом, туннель может быть защищен TLS.
rtun-server
поддерживает автоматическое получение и обновление сертификата TLS. Установите управляющий адрес :443
, а domain
— имя домена сервера общедоступного шлюза.
control_address: :443
lets_encrypt:
domain: rtun.example.com
Пользователь без полномочий root не может использовать порт 443 по умолчанию. Возможно, вы захотите разрешить привязку rtun-server
к привилегированному порту с помощью setcap
в Linux:
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
Лицензия МТИ.