TCP туннель
Обзор
TCP туннель позволяет предоставить доступ к любому сервису, использующему TCP-протокол, наиболее популярные примеры:
- Базы данных (mySQL, PostgreSQL, MSSQL)
- ПО для удаленного доступа (SSH, RDP)
- Игровые серверы (Minecraft)
Начиная с версии 0.36.0 tuna показывает в терминале полноэкранный интерфейс.
Создание TCP туннеля доступно только по подписке.
Примеры
Все актуальные флаги, подсказки и примеры можно посмотреть вызвав справку:
tuna tcp --help
Почти для всех флагов есть аналогичные переменные окружения.
Базовый пример
tuna tcp 5432
С передачей IP-адреса
tuna tcp 10.0.0.1:5432
Unix-сокет
Вместо порта можно указать unix-сокет, байты из туннеля передаются в него как есть. Путь указывается с префиксом unix:// и должен быть абсолютным:
tuna tcp unix:///var/run/app.sock
- Путь без префикса (
/var/run/app.sock), относительный (unix://tmp/app.sock) или пустой (unix://) не принимается. - Флаги
--cidr-allow,--cidr-denyи--proxy-protocolработают так же, как с портом. - Если сокета нет при запуске, tuna выведет предупреждение и продолжит работу. К сокету она подключается на каждое входящее соединение, поэтому сокет может появиться позже, перезапускать туннель не нужно.
- tuna подключается к сокету от имени пользователя, который её запустил. У него должны быть права на запись в сокет, иначе подключение завершится ошибкой
permission denied. - Unix-сокеты поддерживают только
tuna tcpиtuna http, специализированные команды вродеtuna ssh,tuna postgresиtuna redis— нет. - На Windows работа не гарантируется, именованные каналы (
npipe://в Docker Desktop) не поддерживаются.
Доступ к Docker API
Доступ к docker.sock равнозначен root-доступу к хосту: через Docker API можно запустить контейнер с примонтированной корневой файловой системой. Не публикуйте сокет без --cidr-allow, ограничьте доступ своим IP-адресом.
tuna tcp unix:///var/run/docker.sock --cidr-allow="203.0.113.10/32"
Пользователь, от имени которого запущена tuna, должен состоять в группе docker, иначе подключение к сокету завершится ошибкой permission denied.
На своей машине укажите адрес туннеля из вывода tuna:
docker -H tcp://ru.tuna.am:12345 ps
С указанием токена
Можно указать специфичный токен через флаг --token или переменную окружения TUNA_TOKEN. Переопределение происходит в соответствии с политикой очерёдности конфигурации.
tuna tcp 8080 --token=tt_***
С указанием региона для подключения
Можно указать специфичный регион через флаг --location/-l или переменную окружения TUNA_LOCATION. Переопределение происходит в соответствии с политикой очерёдности конфигурации.
tuna tcp 8080 --location=nl
Генерация QR кода с ссылкой
При добавлении флага --qr для ссылки будет сгенерирован QR код и напечатан в консоли. Это может быть удобно если вы тестируете сайт на мобильном устройстве.
Статичный порт
В качестве значения флага --port/-p может выступать алиас или назначенный порт.
Порты можно резервировать в личном кабинете и после перезапуска туннеля адрес останется прежним.
Подробнее о портах читайте в отдельной инструкции.
tuna tcp 5432 --port=postgres
tuna tcp 5432 --port=35000
Ограничение доступа по подсетям IP
Вы можете определить белый список подсетей в CIDR-формате:
tuna tcp 3389 --cidr-allow="10.0.0.1/32"
Либо запретить доступ из определенных подсетей:
tuna tcp 3389 --cidr-deny="10.0.0.1/32"
Можно комбинировать, например указать широкую сеть и вычесть частные IP:
tuna tcp 3389 --cidr-allow="10.0.0.1/24" --cidr-deny="10.0.0.33/32"
Также можно передавать списки через запятую:
tuna tcp 3389 --cidr-allow="10.0.0.1/24,192.168.0.1/24" --cidr-deny="10.0.0.33/32,192.168.0.33/32"
Proxy Protocol
Позволяет передавать оригинальный IP и Port клиента, если ваше приложение поддерживает это. В аргументе нужно передать версию 1 или 2, что соответствует версии Proxy Protocol, 1 - текстовый , 2 - бинарный. Haproxy или Nginx поддерживают оба и определяют автоматически.
tuna tcp 8443 --proxy-protocol=1
tuna tcp 8443 --proxy-protocol=2