Запустить туннель бесплатно
☰
Гайды

Постоянный адрес туннеля: свой поддомен и свой домен

Почему адрес туннеля меняется при каждом запуске и как его закрепить: свой поддомен на fxtun.ru, резерв имени, свой домен и порт TCP-туннеля.

Без флага --domain каждый запуск fxtunnel http даёт новый случайный адрес: сегодня https://lemon.fxtun.ru, завтра https://river.fxtun.ru. Клиент прошлый поддомен не запоминает. Чтобы адрес не менялся, есть три уровня: выбрать имя самому флагом --domain myapp, зарезервировать его за аккаунтом командой fxtunnel domains add myapp или подключить свой домен вроде app.example.com. У TCP- и UDP-туннелей адрес устроен иначе, это fxtun.ru:порт, и о нём отдельный раздел ниже.

Что ломается, когда адрес меняется

Пока туннель нужен на пять минут, чтобы показать коллеге вёрстку, случайный адрес никому не мешает. Проблемы начинаются, когда адрес куда-то записан.

Вебхуки. Адрес обработчика вписан в настройки сервиса. После перезапуска туннеля сервис шлёт события на старый адрес, а он уже никуда не ведёт. События теряются или копятся в очереди повторов, пока вы не зайдёте в настройки и не впишете новый. Подробнее в статье о вебхуках на своём компьютере.

OAuth. Адрес возврата (redirect URI) регистрируется у провайдера входа заранее, и запрос с другим адресом провайдер отклонит. Каждый новый поддомен означает очередную правку настроек приложения. Разбор есть в статье про OAuth callback на localhost.

Ссылки для людей. Заказчик сохранил ссылку на демо, тестировщик — в закладки, друг — в чат. Завтра ссылки мёртвые, и всем нужно рассылать новые.

Боты и мини-приложения. Адрес вебхука бота и адрес Mini App в настройках бота тоже придётся менять при каждом новом поддомене.

Уровень 1: выбрать поддомен самому

Флаг --domain задаёт имя вместо случайного:

BASH
fxtunnel http 8080 --domain myapp
CONSOLE
Connecting to fxtunnel server...
Tunnel established!
HTTP:  http://myapp.fxtun.ru
HTTPS: https://myapp.fxtun.ru
Forwarding to localhost:8080
Ready to receive connections

Флаг --subdomain делает то же самое. Этот уровень доступен на любом тарифе, включая бесплатный.

Требования к имени: до 32 символов, строчные латинские буквы, цифры и дефис, первый и последний символ — буква или цифра. Часть имён закреплена за сервисом (www, api, app, admin, dev, test и другие), их занять нельзя.

Ограничение этого уровня в том, что имя ваше только пока работает туннель. Выключили клиент, и myapp может занять кто угодно. Тогда при следующем запуске вы получите ошибку: subdomain already in use, если имя сейчас используется чужим туннелем, или subdomain is reserved by another user, если его зарезервировали. Для личных экспериментов такой риск терпим. Для адреса, вписанного в настройки платёжной системы, уже нет.

Проверить имя заранее можно так:

BASH
fxtunnel domains check myapp
CONSOLE
myapp — available

Уровень 2: зарезервировать поддомен

Резерв закрепляет имя за вашим аккаунтом. Чужой туннель на нём сервер не откроет, даже когда ваш выключен.

Команды fxtunnel domains работают от имени аккаунта, поэтому сначала войдите: fxtunnel login. Затем:

BASH
fxtunnel domains add myapp
CONSOLE
Reserved: myapp → https://myapp.fxtun.ru

И запускайте туннель как раньше:

BASH
fxtunnel http 8080 --domain myapp

Адрес https://myapp.fxtun.ru теперь постоянный: можно один раз вписать его в сервис и забыть. То же самое делается в личном кабинете, в разделе «Домены».

Резервировать поддомены можно с тарифа Base: на нём пять имён, на Pro — пятнадцать, на Business — пятьдесят. Если лимит тарифа исчерпан, сервер ответит maximum domains reached.

Полезные команды:

BASH
fxtunnel domains list          # ваши поддомены и лимит тарифа
fxtunnel domains remove myapp  # освободить имя

Освобождённое имя сразу становится доступно другим, поэтому не удаляйте его, если адрес ещё где-то записан.

Уровень 3: свой домен

Вместо myapp.fxtun.ru туннель может открываться по вашему домену, например app.example.com. Сертификат Let’s Encrypt сервер выпускает и продлевает сам.

Свой домен нужен, когда адрес видят клиенты и партнёры, или когда сервис требует ваш домен в настройках. Есть и приятная мелочь: предупредительная страница, которую браузер показывает при первом заходе на поддомен fxtun.ru, на своём домене не появляется.

Порядок коротко:

  1. Зарезервируйте поддомен: fxtunnel domains add myapp. Свой домен привязывается к нему.
  2. Добавьте домен в личном кабинете (раздел «Домены» → «Добавить домен») или командой fxtunnel domains custom add app.example.com --target myapp.
  3. Создайте в DNS две записи. TXT _fxtunnel-challenge.app.example.com со значением fxtunnel-verify=<токен> подтверждает, что домен ваш; токен есть в карточке домена в кабинете. CNAME app.example.com → myapp.fxtun.ru направляет трафик. Для корневого домена вроде example.com вместо CNAME ставится A-запись на IP из карточки.
  4. Проверьте: fxtunnel domains custom verify app.example.com или кнопка «Проверить» в карточке. Успешная проверка выглядит так: app.example.com — verified! TLS certificate will be obtained automatically.
  5. Запустите туннель на целевом поддомене: fxtunnel http 8080 --domain myapp.

TXT-запись после проверки не удаляйте: сервер перепроверяет её каждые 12 часов и после трёх неудач подряд снимает подтверждение. Все подробности, типичные ошибки DNS и проверку через dig ищите в пошаговом руководстве по своему домену и в документации.

Свои домены подключаются с тарифа Base: один домен, на Pro — пять, на Business — пятьдесят.

Адрес TCP- и UDP-туннеля: закрепить нельзя, но можно попросить порт

У TCP- и UDP-туннелей поддомена нет. Адрес состоит из базового домена и порта: fxtun.ru:14215. Порт выдаёт сервер, и без подсказки это первый свободный номер в диапазоне: 10000–20000 для TCP, 20001–30000 для UDP.

Пока клиент работает, порт держится за туннелем: при обрыве сети клиент переподключится на тот же номер. После перезапуска клиента порт может быть другим. Резервировать TCP- и UDP-порты за аккаунтом, как поддомены, сейчас нельзя.

Зато можно попросить конкретный номер:

BASH
fxtunnel tcp 25565 --remote-port 15565

Работает, если выполнены два условия:

  • номер из диапазона своего протокола; --remote-port 25565 для TCP сервер отклонит с ошибкой outside allowed range;
  • номер свободен в момент запуска. Кто первым занял порт, того он и есть. Если занят, клиент сообщит port 15565 is already in use.

На практике это значит: выберите не самый очевидный номер, держите запасной и не обещайте, что адрес не изменится никогда. Для игрового сервера с друзьями такого подхода хватает. Как это выглядит в Майнкрафте, разобрано в статье «Майнкрафт по сети без Хамачи».

TCP-туннели работают на всех тарифах, UDP-туннели появляются с тарифа Base.

Какой уровень выбрать

Удобно рассуждать от того, кто и где хранит ваш адрес.

Адрес живёт только в вашей голове и в чате с коллегой, туннель нужен на вечер. Хватит случайного поддомена или --domain с любым свободным именем.

Адрес вписан в настройки чужого сервиса: вебхук платёжной системы, redirect URI у провайдера входа, URL бота. Здесь нужен зарезервированный поддомен. Иначе однажды утром имя окажется занятым, а вы узнаете об этом по пропавшим уведомлениям об оплате.

Адрес видят клиенты, партнёры или пользователи. Подключайте свой домен: он выглядит как часть вашего продукта, работает без предупредительной страницы и не зависит от того, как называется поддомен.

И отдельно про TCP и UDP: там закреплять нечего, есть только --remote-port. Если постоянный адрес для игрового сервера или базы критичен, заложите в инструкцию для друзей или коллег, что порт иногда придётся обновить.

Что на каком тарифе

ВозможностьFreeBaseProBusiness
Случайный поддомен при каждом запускедададада
Свой поддомен через --domain, пока туннель запущендададада
Зарезервированные поддомены—51550
Свои домены с сертификатом—1550
--remote-port для TCPдададада
UDP-туннели и --remote-port для них—дадада
Закрепить TCP/UDP-порт за аккаунтом————
Туннелей одновременно151550

Актуальные условия и цены — на странице тарифов.

Если коротко: для личных экспериментов хватает --domain на бесплатном тарифе. Как только адрес попадает в настройки чужого сервиса или в руки заказчика, имеет смысл зарезервировать поддомен или подключить свой домен.

Что дальше

Постоянный адрес

Закрепить поддомен за собой можно с тарифа Base, там же — свой домен вида app.example.com с сертификатом. На бесплатном тарифе адрес меняется при каждом запуске.

$ curl -fsSL https://fxtun.ru/install.sh | sh
@mephistofx

Пишу fxTunnel — туннели для разработчиков без белого IP. Рассказываю, как это устроено изнутри.

Написать в Telegram →

Читайте дальше