Домашний сервер без белого IP: сайт, Nextcloud и Jellyfin
Домашний сервер без белого IP: как открыть в интернет сайт, Nextcloud и Jellyfin через туннель, что поправить в их настройках и где у схемы пределы.
Домашний сервер можно открыть в интернет и без белого IP. Клиент fxTunnel на домашней машине сам подключается к серверу fxTunnel и получает публичный адрес вида https://mycloud.fxtun.ru с готовым сертификатом. Роутер и провайдер при этом не участвуют: соединение исходящее, NAT ему не мешает. Одна команда на сервис: fxtunnel http 80 для Nextcloud, fxtunnel http 8096 для Jellyfin. Ниже по шагам, с настройками, без которых Nextcloud откроется криво, и с честным разговором о том, чего домашний канал не выдержит.
Что можно держать дома
Любую программу, у которой есть веб-интерфейс или сетевой порт. Чаще всего это:
- сайт: личный блог, портфолио, тестовая версия проекта;
- Nextcloud: свои файлы, календарь и контакты вместо облака;
- Jellyfin: медиатека, фильмы и музыка с домашнего диска на телефоне;
- Home Assistant: умный дом. Ему посвящён отдельный разбор: Home Assistant через туннель.
Сервером может быть старый ноутбук, мини-ПК или Raspberry Pi. Главное условие одно: машина включена, и на ней запущен клиент. Выключили компьютер, и сайт перестал отвечать.
Если вы ещё не знаете, серый у вас адрес или белый, начните со статьи «Серый IP: как узнать и что делать». А если порт на роутере открыть не получается по другим причинам, загляните в «Как открыть порты, если открыть их нельзя».
Как это работает без белого IP
Обычная схема с белым адресом: интернет стучится в ваш роутер, роутер пробрасывает порт на сервер. За NAT провайдера этот стук до роутера не доходит.
Туннель работает наоборот. Клиент fxtunnel сам открывает исходящее соединение к серверу fxTunnel и держит его. Посетитель приходит на https://mycloud.fxtun.ru, сервер fxTunnel передаёт запрос по уже открытому соединению, а клиент отдаёт его локальной программе.
mycloud.fxtun.ru *.fxtun.ru fxtunnel http 80localhost:80 Из схемы следуют две вещи, которые понадобятся дальше. Сертификат для *.fxtun.ru уже есть на сервере fxTunnel, так что выпускать свой не нужно. А до вашей программы запрос доходит обычным HTTP с адреса 127.0.0.1: именно так её видит клиент туннеля.
Установка клиента
На сервере с Linux или macOS:
curl -fsSL https://fxtun.ru/install.sh | sh
fxtunnel loginНа Windows установка — irm https://fxtun.ru/install.ps1 | iex в PowerShell, вход тот же. fxtunnel login откроет браузер для входа в аккаунт, делается это один раз.
Сайт на домашнем компьютере
Проверим схему на самом простом сайте. Любая папка с index.html превращается в сайт встроенным сервером Python:
python3 -m http.server 8080Во втором окне терминала:
fxtunnel http 8080Connecting to fxtunnel server...
Tunnel established!
HTTP: http://lemon.fxtun.ru
HTTPS: https://lemon.fxtun.ru
Forwarding to localhost:8080
Ready to receive connections
Адрес из строки HTTPS: откроется с любого устройства. Для настоящего сайта вместо http.server будет nginx, Apache или ваше приложение, а команда туннеля та же, с его портом.
Поддомен здесь случайный, и при следующем запуске он сменится. Для сервера это неудобно, поэтому дальше будем задавать имя флагом --domain. О том, как закрепить имя за собой, ниже в разделе про постоянный адрес.
Nextcloud через туннель
Допустим, Nextcloud уже стоит и открывается дома по адресу http://localhost (веб-сервер слушает порт 80). Открываем туннель с постоянным именем:
fxtunnel http 80 --domain mycloudЕсли Nextcloud запущен в Docker с публикацией -p 8080:80, туннель открывается на порт хоста: fxtunnel http 8080 --domain mycloud.
Откройте https://mycloud.fxtun.ru, и Nextcloud скорее всего откажется работать с сообщением о недоверенном домене. Это нормально, его нужно донастроить.
Три параметра config.php
Nextcloud пускает только по адресам из списка trusted_domains. Локальные адреса вроде localhost доверенные всегда, а новое имя надо добавить (документация Nextcloud).
Второй момент связан с HTTPS. Посетитель открывает сайт по HTTPS, но шифрование заканчивается на сервере fxTunnel, и до Nextcloud запрос доходит обычным HTTP. Сервер fxTunnel к тому же передаёт заголовок X-Forwarded-Proto: http. Без подсказки Nextcloud решит, что работает по HTTP, и начнёт строить ссылки и редиректы на http://. Для прокси, который сам завершает TLS, документация Nextcloud велит выставить overwriteprotocol в https. Там же описан overwrite.cli.url: базовый адрес для ссылок, которые Nextcloud формирует из командной строки и фоновых задач.
Сначала посмотрите, какие домены уже в списке:
cd /var/www/nextcloud
sudo -E -u www-data php occ config:system:get trusted_domainsЗатем добавьте новое имя под следующим свободным номером. Если в списке один элемент (номер 0), новый будет 1:
sudo -E -u www-data php occ config:system:set trusted_domains 1 --value=mycloud.fxtun.ru
sudo -E -u www-data php occ config:system:set overwriteprotocol --value=https
sudo -E -u www-data php occ config:system:set overwrite.cli.url --value=https://mycloud.fxtun.ruКоманды occ и синтаксис с номером элемента взяты из справки по occ. Путь /var/www/nextcloud и пользователь www-data типичны для Debian и Ubuntu; в Fedora пользователь веб-сервера apache, в Arch http. В Docker-образе Nextcloud те же команды выполняются через docker exec --user www-data <контейнер> php occ ….
В итоге в config.php появится примерно такое:
'trusted_domains' =>
array (
0 => 'localhost',
1 => 'mycloud.fxtun.ru',
),
'overwriteprotocol' => 'https',
'overwrite.cli.url' => 'https://mycloud.fxtun.ru',Если Nextcloud открывают ещё и из домашней сети по http://192.168.…, ограничьте подмену протокола запросами через туннель. Параметр overwritecondaddr из той же документации включает overwrite* только для запросов с адреса, подходящего под регулярное выражение, а клиент туннеля подключается с 127.0.0.1:
sudo -E -u www-data php occ config:system:set overwritecondaddr --value='^127\.0\.0\.1$'Обновите страницу, и Nextcloud откроется по HTTPS. Тот же адрес https://mycloud.fxtun.ru вводится в приложениях Nextcloud на телефоне и компьютере.
Имя mycloud вписано в настройки, поэтому менять его потом хлопотно. Выбирайте один раз и закрепите за собой, об этом ниже.
Jellyfin: порт 8096
По документации Jellyfin сервер слушает HTTP на TCP-порту 8096, HTTPS на 8920 и UDP-порт 7359 для поиска серверов в локальной сети. Для туннеля нужен только первый:
fxtunnel http 8096 --domain mymediaHTTPS даёт сервер fxTunnel, поэтому порт 8920 открывать не нужно. Порт 7359 работает только внутри домашней сети, через интернет он не нужен. В приложениях Jellyfin на телефоне или телевизоре укажите адрес сервера https://mymedia.fxtun.ru.
Документация Jellyfin прямо называет открытие порта в интернет небезопасным и советует обратный прокси, VPN или VPS. Туннель ближе всего к обратному прокси: ваш домашний адрес никто не видит. Но сам Jellyfin всё равно доступен из интернета, так что пароли у всех пользователей нужны длинные.
Страница-предупреждение на *.fxtun.ru
У адресов *.fxtun.ru есть защита от фишинга. Когда человек впервые открывает туннель в браузере, вместо сайта он видит страницу fxTunnel: сайт работает через туннель разработчика, содержимое не проверено. После кнопки «Продолжить» браузер получает cookie на 12 часов, и страница пропадает (документация).
Показывается она при трёх условиях сразу: запрос методом GET, ваш сервер ответил HTML, адрес на поддомене fxtun.ru. Что это значит для домашних сервисов:
- В браузере страница появится при первом входе в Nextcloud или Jellyfin и дальше раз в 12 часов, на каждом устройстве и в каждом браузере отдельно. Экран входа у обоих отвечает HTML.
- Запросы к API отвечают JSON, а загрузки файлов в Nextcloud идут методом
PUT. Их страница не трогает. - Вход в приложениях Nextcloud идёт через веб-страницу. По описанию Login Flow клиент открывает её во встроенном окне (Login Flow v1) или в системном браузере (v2, рассчитан прежде всего на десктоп). Значит, там можно увидеть ту же страницу с кнопкой «Продолжить».
- Приложения Jellyfin, которые показывают веб-интерфейс сервера внутри себя, тоже могут её показать. Клиенты, которые общаются с сервером только через API, её не получают.
- HTML-файлы в Nextcloud. Если клиент синхронизации скачивает файл
.htmlи сервер отдаёт его с типомtext/html, по правилу выше вместо файла может прийти страница-предупреждение. У программы синхронизации нет cookie из браузера.
Мы не проверяли каждое приложение для каждой платформы, поэтому пишем то, что следует из правила. Надёжное решение одно: на своём домене страницы нет вовсе. Для Nextcloud с мобильными клиентами и синхронизацией лучше сразу подключить свой домен.
Несколько сервисов сразу
Сайт, Nextcloud и Jellyfin — это три туннеля. На бесплатном тарифе одновременно работает один, три и больше открываются с тарифа Base: там пять туннелей и пять резервируемых поддоменов.
Держать под каждый туннель окно терминала на сервере неудобно. Опишите их в файле fxtunnel.yaml:
# fxtunnel.yaml
tunnels:
- name: site
type: http
local_port: 8080
subdomain: myhome
- name: cloud
type: http
local_port: 80
subdomain: mycloud
- name: media
type: http
local_port: 8096
subdomain: mymediaИ поднимите всё в фоне одной командой из папки с файлом:
fxtunnel upКоманда вернёт терминал и напечатает адреса. fxtunnel status покажет, что работает, fxtunnel down всё остановит. Чтобы туннели поднимались вместе с сервером после перезагрузки, клиент оформляют службой systemd. Всё это по шагам разобрано в статье «fxtunnel up: все туннели в фоне по одному конфигу».
Постоянный адрес и свой домен
Флаг --domain mycloud и поле subdomain работают на любом тарифе, но с оговоркой: пока ваш туннель выключен, имя может занять кто-то другой. Для сервера, чьё имя вписано в trusted_domains и в приложения на телефонах, это риск. Закрепить имя за собой можно резервом с тарифа Base:
fxtunnel domains add mycloudСледующий шаг — свой домен вида cloud.example.com. На нём нет страницы-предупреждения, а адрес не зависит от поддомена fxtun.ru. На тарифе Base подключается один свой домен, сертификат сервер выпускает сам. Порядок такой: зарезервировать поддомен, добавить домен командой fxtunnel domains custom add cloud.example.com --target mycloud, прописать у регистратора TXT- и CNAME-записи и подтвердить домен. Подробно, с записями DNS, это описано в статье «Постоянный адрес туннеля».
Для Nextcloud после перехода на свой домен добавьте его в trusted_domains и поменяйте overwrite.cli.url теми же командами occ.
Честно о нагрузке и надёжности
Туннель снимает проблему серого IP, но домашний сервер остаётся домашним.
Скорость упирается в ваш канал. Всё, что уходит из дома, идёт через исходящий канал провайдера, а у домашних тарифов он часто медленнее входящего. Фильм в Jellyfin для двух-трёх человек обычно проходит, для целой компании одновременно может не хватить. Плюс весь трафик идёт через сервер fxTunnel, а не напрямую.
У туннеля есть лимиты частоты. Для HTTP-туннеля это 3600 запросов в минуту на туннель и 360 в минуту с одного IP; сверх лимита сервер отвечает 429 Too Many Requests (лимиты). Для семьи этого хватает с запасом, для публичного сайта с заметной посещаемостью уже нет.
Сервис живёт, пока живёт дом. Отключили свет, перезагрузился роутер, провайдер ушёл на профилактику: сервис недоступен. Клиент после обрыва переподключается сам и просит тот же поддомен, но пока дома нет интернета, снаружи сервис не увидеть. Бэкапы Nextcloud держите на другом диске, а лучше и вне дома.
Программа видит всех с адреса 127.0.0.1. К Nextcloud и Jellyfin подключается клиент туннеля на той же машине. Поэтому в их журналах и в правилах, завязанных на IP, будет локальный адрес, а не адрес посетителя. Ограничивать доступ по IP удобнее на самом туннеле флагом --allow-ip: сервер fxTunnel проверяет настоящий адрес посетителя и остальных отбрасывает. Как это устроено, вместе с паролем на туннель, разобрано в статье «Пароль и список IP для туннеля».
Если нужно попадать во всю домашнюю сеть целиком, со всеми устройствами, удобнее VPN вроде WireGuard. Туннель открывает конкретные сервисы по одному, и для сайта, облака и медиатеки этого обычно достаточно.
Что дальше
- Все туннели в фоне и автозапуск с системой — «fxtunnel up: все туннели в фоне по одному конфигу».
- Закрепить имя и подключить свой домен — «Постоянный адрес туннеля».
- Пароль и ограничение по IP для того, что открыто из дома, — «Пароль и список IP для туннеля».
- Умный дом из любой точки — Home Assistant через туннель.
Когда нужен TCP или несколько туннелей
TCP и UDP доступны на платных тарифах: Base — 210 ₽/мес и 5 туннелей одновременно, Pro — 420 ₽/мес и 15 туннелей, Business — 630 ₽/мес и 50 туннелей. Free включает один HTTP-туннель с HTTPS.
Выберите клиент на странице скачивания: GUI для работы через графический интерфейс или CLI для терминала.
Читайте дальше
Как открыть порты, если открыть их нельзя: CGNAT и мобильный интернет
Как открыть порты на роутере, проверить, открыт ли порт, и что делать, если мешает CGNAT, мобильный интернет или нет доступа к роутеру.
8 мин · 27 октября 2026Как узнать, белый или серый IP: WAN-адрес, CGNAT и двойной NAT
Как проверить белый или серый IP по WAN-адресу роутера: частные диапазоны, CGNAT, двойной NAT, динамический публичный адрес и варианты доступа домой.
5 мин · Выпуск 25 октября 2026Cloudflare Tunnel: настройка, ошибка 1033 и когда проще fxTunnel
Cloudflare Tunnel по шагам: быстрый туннель cloudflared, именованный туннель со своим доменом, ошибка 1033 и случаи, где проще взять fxTunnel.
6 мин · 29 октября 2026