Перейти к основному содержимому

TCP туннель

Обзор​

TCP туннель позволяет предоставить доступ к любому сервису, использующему TCP-протокол, наиболее популярные примеры:

Начиная с версии 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