HTTP-туннели
Как открыть локальный веб-сервер по HTTPS через HTTP-туннель fxTunnel: свой поддомен, защита паролем, доступ по IP и время жизни туннеля.
HTTP-туннель даёт локальному веб-серверу публичный адрес вида https://<поддомен>.fxtun.ru. WebSocket через него тоже работает.
$fxtunnel http <порт> [флаги]Свой поддомен
По умолчанию поддомен выбирается случайно. Чтобы задать его самому, укажите --domain:
$fxtunnel http 3000 --domain myapp
→ HTTP: http://myapp.fxtun.ru
→ HTTPS: https://myapp.fxtun.ru--subdomain — то же самое, что --domain. В поддомене допустимы латинские буквы, цифры и дефис, длина — до 32 символов, дефис не может стоять первым или последним. Заглавные буквы приводятся к строчным.
Зарезервируйте поддомен в личном кабинете, в разделе «Домены». Тогда его не займёт другой пользователь, даже когда ваш туннель выключен.
Защита паролем
Флаг --auth включает HTTP Basic Auth: без логина и пароля туннель ответит 401 Unauthorized.
$fxtunnel http 3000 --auth user:MySecurePass123Проверка:
$curl -u user:MySecurePass123 https://myapp.fxtun.ruПароль — не короче 8 символов, логин — не пустой и без двоеточия. Иначе клиент не запустится и напишет, что не так.
Клиент отправляет на сервер не сам пароль, а его bcrypt-хеш.
Пресет со случайным паролем
Пресет openclaw придумывает пароль сам — случайные 16 символов, новые при каждом запуске — и печатает логин и пароль перед подключением:
$fxtunnel http 3000 --preset openclaw
→ Preset 'openclaw' credentials:
→ Username: admin
→ Password: …Если вместе с пресетом указан --auth, действует --auth. Список пресетов показывает команда fxtunnel presets, подробнее — в справочнике CLI.
Доступ только с нужных IP
Флаг --allow-ip пускает к туннелю только перечисленные адреса. Остальные получат 403 Forbidden. Флаг можно повторять или перечислить значения через запятую; поддерживаются одиночные IP и подсети в CIDR-нотации:
$fxtunnel http 3000 --allow-ip 203.0.113.10 --allow-ip 10.0.0.0/8Время жизни туннеля
Когда туннель закрывается по таймеру, клиент продолжает работать — остановите его Ctrl+C.
Закрытие при простое
Туннель закроется, если к нему не обращались указанное время. Каждый запрос сбрасывает таймер. Допустимо от 1m до 24h:
$fxtunnel http 3000 --auto-close 30mМаксимальное время жизни
Жёсткий предел, независимо от активности. Допустимо от 1m до 7d:
$fxtunnel http 3000 --max-lifetime 8hОтсчёт идёт с момента подключения к серверу. Если клиент переподключился, например после обрыва сети, отсчёт начинается заново.
Значение пишется числом с единицей m, h или d, единицы можно сочетать: 45m, 1h30m, 2d.
Предупредительная страница
Когда человек впервые открывает туннель в браузере, он видит страницу с предупреждением: сайт работает через туннель разработчика, содержимое не проверено. Это защита от фишинга. После кнопки «Продолжить» браузер получает cookie _fxt_consent_<поддомен> на 12 часов, и страница больше не показывается.
Предупреждение появляется, только если одновременно:
- запрос —
GET; - ваш сервер ответил HTML (
text/htmlилиapplication/xhtml+xml); - туннель открыт по поддомену
fxtun.ru, а не по своему домену.
Поэтому запросы к API, отдающему JSON, и вебхуки методом POST проходят без предупреждения.
Пропуск заголовком
Для скриптов, тестов и мониторинга добавьте заголовок X-FxTunnel-Skip-Warning с любым непустым значением:
$curl -H "X-FxTunnel-Skip-Warning: true" https://myapp.fxtun.ruHTTP-заголовки
Сервер добавляет к запросу, который получает ваш локальный сервер:
| Заголовок | Значение |
|---|---|
X-Forwarded-Host | Адрес, по которому обратились к туннелю, без порта — например myapp.fxtun.ru |
X-Trace-Id | Идентификатор запроса из 16 шестнадцатеричных символов — удобно искать в логах |
Все флаги
| Флаг | Описание | По умолчанию |
|---|---|---|
--domain, -d | Поддомен; синоним — --subdomain | случайный |
--auth | Basic Auth в формате user:password, пароль от 8 символов | — |
--allow-ip | Разрешённые IP или подсети, можно повторять | все адреса |
--auto-close | Закрытие при простое, от 1m до 24h | — |
--max-lifetime | Максимальное время жизни, от 1m до 7d | — |
--preset | Пресет безопасности, сейчас есть openclaw | — |