Bootstrap

dix.su — доступ к домашним сервисам без белого IP

dix.su — доступ к домашним сервисам без белого IP

dix.su — это сервис, который открывает доступ из интернета к тому, что запущено у вас дома, в офисе или на ноутбуке. Белый IP, проброс портов, свой VPS и nginx с сертификатами не нужны: вы запускаете небольшую программу device_client, и ваш localhost:3000 (или любой другой порт) открывается по адресу https://myslug.dix.su с валидным HTTPS-сертификатом.

☯

Terminal:

⌕

≡

✕
ваш ноутбук / сервер / Raspberry Pi / роутер на OpenWrt
        │  localhost:3000
        └─ device_client ──WSS──► proxy.dix.su ──► https://myslug.dix.su
                                                         │
                                                 любой браузер в мире

Зачем это нужно

Большинство домашних и мобильных провайдеров выдают серый IP и работают через CGNAT: один публичный адрес делят сотни абонентов. Входящее соединение до вашего компьютера просто не дойдёт — роутер провайдера не знает, кому его отдать. Проброс портов в этом случае не помогает.

Обычные обходы:

  • белый IP у провайдера — платно и не везде;
  • свой VPS с VPN или reverse-прокси — требует знаний и администрирования;
  • ngrok и Cloudflare Tunnel — оплата из России затруднена, на бесплатных тарифах адрес меняется или урезан.

dix.su решает задачу иначе: device_client сам открывает исходящее защищённое WebSocket-соединение (WSS) к прокси-серверу, и весь входящий трафик идёт обратно по этому каналу. Исходящие соединения разрешены почти везде, поэтому сервис работает за любым NAT, за мобильным интернетом и за большинством корпоративных файрволов.

Кому и для чего

Разработчикам

  • показать заказчику сайт или API прямо со своей машины, без деплоя;
  • принимать вебхуки (Telegram-боты, платёжные системы, GitHub) на локальный сервер во время отладки;
  • тестировать мобильное приложение против локального бэкенда;
  • поднять свой Git-сервер (Forgejo/Gitea) с Docker-реестром.

Домашним серверам (self-hosting)

  • медиасервер: Jellyfin, Plex, Navidrome;
  • облако для файлов: Nextcloud, Seafile;
  • умный дом: Home Assistant, openHAB;
  • менеджер паролей Vaultwarden;
  • личный сайт, блог или портфолио на своём железе.

Системным администраторам

  • SSH-доступ к машине за NAT без белого IP;
  • удалённый рабочий стол (RDP, VNC);
  • доступ к PostgreSQL, MySQL, Redis и MongoDB для DBeaver и консольных клиентов;
  • браузерный терминал, когда SSH-клиента под рукой нет.

Малому бизнесу

  • открыть внутреннюю CRM, кассовую панель или видеонаблюдение для сотрудников вне офиса;
  • держать сервис 24/7 на дешёвом мини-ПК вместо аренды сервера.

Что вы получаете

  • Постоянный адрес slug.dix.su, который не меняется при перезапуске клиента.
  • HTTPS из коробки. Сертификат на *.dix.su уже есть, на своей стороне ничего настраивать не нужно.
  • Свой домен. Достаточно прописать CNAME mysite.ru → slug.dix.su, и сертификат Let's Encrypt выпустится автоматически.
  • TCP-туннели для SSH, RDP, VNC и баз данных (на платных тарифах).
  • Приватный режим: туннель видят только вы и приглашённые пользователи, посторонние получают заглушку.
  • Сквозное шифрование (E2E): TLS-сессия устанавливается напрямую между браузером и вашим устройством, прокси передаёт зашифрованные байты, не расшифровывая их.
  • Аналитика: посещения, UTM-метки, география, выгрузка в Excel.
  • Заморозка туннеля: одной кнопкой временно закрыть сервис снаружи, не останавливая клиент.
  • Визитка dix.su/p/slug и короткие ссылки dix.su/код в том же аккаунте.
  • Готовые Docker-стеки: PostgreSQL, MySQL, Redis, MongoDB, Forgejo, Plausible и другие запускаются одной командой sh setup.sh.
  • Готовые устройства на shopdix.su: мини-ПК или смартфон с уже настроенным туннелем — достаточно включить в розетку.

Тарифы

ВозможностьSIMPLEVIPPROPERS
Цена за 30 днейбесплатно299 ₽499 ₽799 ₽
Трафик в месяц5 ГБ20 ГБ75 ГБ200 ГБ
HTTP/HTTPS-туннель, визитка, свой домен✅✅✅✅
Браузерный терминал (ttyd)✅✅✅✅
SSH-туннель—✅✅✅
Уведомления об атаках на туннель—✅✅✅
RDP и VNC——✅✅
Аналитика трафика——✅✅
Дополнительные адреса (слаги)——до 2без ограничений
PostgreSQL, MySQL, Redis, MongoDB———✅

Оплата — картой российского банка (Т-Банк) или зарубежной картой. Тарифы можно копить и переключать: дни списываются только у активного тарифа, а пока туннель заморожен, они не расходуются вовсе. Актуальные цены — на dix.su.


Быстрый старт за 5 минут

Шаг 1. Регистрация

Зайдите на dix.su и зарегистрируйтесь по email или через Google, GitHub, VK, Яндекс или Telegram. При регистрации вы выбираете слаг — имя поддомена. Если выбрать myhome, адрес будет https://myhome.dix.su.

В личном кабинете, в разделе «Аккаунт», лежит токен. Он нужен клиенту для подключения. Храните токен как пароль: кто его знает, тот может поднять туннель под вашим адресом.

Шаг 2. Запустите что-нибудь локально

Если своего сервиса пока нет, подойдёт простейший веб-сервер:

☯

Terminal:

⌕

≡

✕
mkdir ~/site && cd ~/site
echo '

Привет из dix.su!

' > index.html python3 -m http.server 8080

Теперь у вас есть сайт на http://localhost:8080.

Шаг 3. Установите и запустите device_client

Linux и macOS — одной командой:

☯

Terminal:

⌕

≡

✕
curl -fsSL https://dix.su/downloads/install.sh | SLUG=myhome TOKEN=ваш_токен PORT=8080 bash

Скрипт сам определит ОС и архитектуру (x86_64, ARM64, ARMv7, MIPS для роутеров на OpenWrt), скачает подходящий бинарник и запустит туннель.

Чтобы туннель поднимался сам после перезагрузки, установите его как системный сервис:

☯

Terminal:

⌕

≡

✕
curl -fsSL https://dix.su/downloads/install.sh | SLUG=myhome TOKEN=ваш_токен PORT=8080 INSTALL_SERVICE=yes bash

Ручной запуск. Скачайте бинарник для своей платформы на странице dix.su/downloads и выполните:

☯

Terminal:

⌕

≡

✕
chmod +x device_client_linux_x86_64
./device_client_linux_x86_64 myhome ваш_токен 8080

Формат команды: device_client <слаг> <токен> <локальный_порт>.

Windows. Скачайте device_client_windows_x86_64.exe и запустите в PowerShell:

☯

Terminal:

⌕

≡

✕
.\device_client_windows_x86_64.exe myhome ваш_токен 8080

Шаг 4. Проверьте

Откройте https://myhome.dix.su с телефона через мобильный интернет, чтобы проверка шла точно не из домашней сети. Должна открыться ваша страница.

Если закрыть клиент или выключить компьютер, на адресе появится страница «устройство офлайн». Когда клиент снова запустится, туннель восстановится автоматически.

Шаг 5 (по желанию). Docker вместо бинарника

Если у вас уже стоит Docker, можно взять готовый стек:

☯

Terminal:

⌕

≡

✕
git clone https://gitlab.com/dixsu/market/dixsu-test
cd dixsu-test
# в .env укажите DIXSU_SLUG и DIXSU_TOKEN
sh setup.sh

Через 10–15 секунд тестовый сервис будет доступен по вашему адресу. Так же устроены стеки с базами данных (dixsu-postgres, dixsu-mysql, dixsu-redis, dixsu-mongodb) и Git-сервером (dixsu-git).

Советы на старте

  • Заведите отдельный туннель для управления. Если обслуживать устройство через тот же туннель, на котором работает сервис, перезапуск клиента оборвёт и ваше соединение. Надёжнее держать два слага: основной (myhome) для сервиса и myhome-mgmt для доступа к терминалу.
  • Браузерный терминал работает на всех тарифах. Установите ttyd, запустите ttyd --port 7681 --writable login и поднимите на этот порт отдельный туннель. После этого терминал устройства открывается в личном кабинете по адресу https://dix.su/auth/terminal/myhome-mgmt, и только для вас.
  • Проверяйте историю подключений в разделе «Аккаунт». Если там появился незнакомый IP или запись «вытеснение», значит токен мог утечь. Перевыпустите его кнопкой «↺ Новый».
  • Свой домен подключается так: CNAME на slug.dix.su, затем добавить домен в личном кабинете. Сертификат выпустится сам.

Как это устроено

☯

Terminal:

⌕

≡

✕
Браузер ──HTTPS──► nginx:443 ──► dixu_proxy ──WSS──► device_client ──► localhost:PORT
                    (TLS)        (Elixir/Phoenix)    (на вашем устройстве)
  1. При старте device_client устанавливает исходящее WebSocket-соединение (WSS) с прокси и предъявляет пару «слаг + токен».
  2. Прокси регистрирует устройство: с этого момента слаг myhome привязан к этому соединению.
  3. Когда браузер обращается к myhome.dix.su, nginx терминирует TLS и передаёт запрос в dixu_proxy. Прокси находит канал устройства по поддомену.
  4. Запрос стримится чанками через WebSocket к клиенту. Клиент выполняет его к локальному серверу и тем же способом, чанками, отправляет ответ обратно.
  5. Тело запроса и ответа целиком в памяти не накапливается, поэтому большие файлы и медиапотоки проходят без проблем.

Клиент сам переподключается после обрыва связи и следит за каналом с помощью heartbeat: если ответ на ping не пришёл, соединение пересоздаётся, и туннель не «умирает тихо».

На одном слаге одновременно может быть только одно активное соединение. Если второй клиент подключится с тем же слагом и токеном, он вытеснит первый — это событие попадёт в историю подключений.

Серверный стек:

КомпонентТехнологияРоль
nginxnginxTLS-терминация, маршрутизация по поддоменам
dixu_proxyElixir / PhoenixWebSocket-туннели, HTTP- и TCP-проксирование, защита от злоупотреблений
modulauthJava / Spring Boot WebFluxАвторизация, личный кабинет, биллинг, каталог
PostgreSQLPostgreSQL 17Основная база данных
RedisRedis 7Сессии

Прокси написан на Elixir (BEAM). Каждое соединение живёт в собственном лёгком процессе, поэтому один сервер держит тысячи одновременных туннелей, а сбой одного соединения не затрагивает остальные.

TCP-туннели: SSH, RDP, VNC, базы данных

Помимо HTTP, через то же WebSocket-соединение можно пробросить TCP-трафик семи протоколов. Включаются они в личном кабинете: Туннель → Прямое TCP.

ПротоколВнешний порт dix.suПорт на устройствеТариф
SSH222222VIP+
RDP33893389PRO+
VNC49005900PRO+
PostgreSQL44325432PERS
MySQL43063306PERS
Redis43796379PERS
MongoDB401727017PERS

Один device_client обслуживает HTTP и TCP одновременно. HTTP-запросы уходят на порт, указанный при запуске, а TCP-соединения на нужный порт устройства открываются по отдельной команде прокси.

Почему TCP-клиенту нужен TLS

Все пользователи подключаются к одному публичному IP. Чтобы понять, к какому устройству направить соединение, прокси читает поле SNI (Server Name Indication) из TLS-рукопожатия: там передаётся slug.dix.su. Если клиент не использует TLS, поля SNI нет и маршрутизировать соединение невозможно. Поэтому в клиентах баз данных нужно включать SSL. На стороне устройства TLS настраивать не нужно — его терминирует прокси (кроме VNC).

SSH сам по себе в TLS не завёрнут, поэтому для него используется короткий служебный заголовок DIXSU:slug, который передаётся через ProxyCommand.

Команды подключения

☯

Terminal:

⌕

≡

✕
# SSH
ssh -o "ProxyCommand=bash -c '{ echo DIXSU:myhome; cat; } | nc myhome.dix.su 2222'" \
  user@myhome.dix.su

# SFTP (так же)
sftp -o "ProxyCommand=bash -c '{ echo DIXSU:myhome; cat; } | nc myhome.dix.su 2222'" \
  user@myhome.dix.su

# RDP
xfreerdp /v:myhome.dix.su:3389 /u:USER /cert:ignore

# PostgreSQL
psql "host=myhome.dix.su port=4432 dbname=mydb user=postgres sslmode=require"

# MySQL
mysql -h myhome.dix.su -P 4306 -u root -p --ssl-mode=REQUIRED

# Redis (флаг --sni обязателен: redis-cli не берёт SNI из -h)
redis-cli -h myhome.dix.su -p 4379 --tls --insecure --sni myhome.dix.su

# MongoDB
mongosh "mongodb://myhome.dix.su:4017/mydb?tls=true&tlsAllowInvalidCertificates=true"

Чтобы не набирать длинную команду каждый раз, добавьте блок в ~/.ssh/config:

☯

Terminal:

⌕

≡

✕
Host myhome
  HostName myhome.dix.su
  User root
  Port 2222
  IdentityFile ~/.ssh/dixsu_tunnel
  ProxyCommand bash -c '{ echo DIXSU:myhome; cat; } | nc myhome.dix.su 2222'

После этого достаточно набрать ssh myhome или sftp myhome. Этот же конфиг подхватят FileZilla, Dolphin, Krusader и DBeaver.

DBeaver. Для PostgreSQL и MySQL подключайтесь напрямую: хост myhome.dix.su, порт 4432 или 4306, SSL включён, проверка сертификата выключена. Вкладка SSH в DBeaver не нужна.

Безопасность

  • Канал клиент — прокси зашифрован (WSS/TLS). Соединение только исходящее, на устройстве не открывается ни один входящий порт.
  • Токен не даёт доступа к вашей машине. С ним можно занять ваш адрес, но не попасть на устройство. Токен в кабинете маскируется, перевыпускается одной кнопкой, а история подключений помогает заметить утечку.
  • Обычный режим. TLS терминируется на прокси: сервер технически видит расшифрованный HTTP-трафик, но не сохраняет его. В логи попадают только метаданные (время, IP, объём) — они нужны для биллинга и защиты от злоупотреблений.
  • Приватный режим. Туннель открывается только после входа в аккаунт dix.su. Можно пригласить других пользователей: до 10 на PRO и до 100 на PERS.
  • E2E-режим. Сертификат Let's Encrypt выпускается прямо на устройство, и TLS-сессия устанавливается между браузером и вашим устройством. Прокси передаёт зашифрованные байты, а приватный ключ никогда не покидает вашу машину.
  • Защита от злоупотреблений. Прокси ограничивает частоту запросов для HTTP и TCP, блокирует перебор паролей и сканеры. На тарифах VIP и выше в разделе «Безопасность» видны инциденты атак на ваш туннель, о них приходят уведомления на email.
  • Промежуточная страница. Перед первым переходом на чужой туннель посетитель видит предупреждение о том, что идёт на ресурс пользователя. Это защищает от фишинга под видом dix.su.

Ограничения

  • UDP не поддерживается. Туннель работает поверх WebSocket, то есть поверх TCP. Поэтому не заработают WireGuard, VoIP/SIP, QUIC, DNS и Minecraft Bedrock.
  • Произвольные TCP-порты не поддерживаются. Доступны только семь протоколов из таблицы выше. Протоколы без TLS (например, Minecraft Java на порту 25565) не передают SNI, и маршрутизировать их нельзя. Веб-панели игровых серверов (Pterodactyl, AMP) при этом работают через обычный HTTP-туннель.
  • Корпоративные сети. HTTP-туннель обычно работает, потому что WSS выглядит как обычный HTTPS. TCP-туннели требуют, чтобы нестандартные порты (2222, 4432 и т.д.) были открыты на стороне клиента.
  • Трафик. Когда месячный лимит исчерпан, бесплатный туннель замораживается до конца месяца. После перехода на платный тариф он размораживается сразу.
  • Запрещённый контент (мошенничество, фишинг, вредоносное ПО, C2-серверы, DDoS, сканирование чужих сетей и всё, что запрещено законом) удаляется без предупреждения. Жалобы — на abuse@dix.su.

Сравнение с аналогами

dix.sungrok (free)Cloudflare Tunnel
Постоянный адрес бесплатно✅ slug.dix.su❌ меняется при перезапуске✅ только со своим доменом
Свой домен✅платно✅
Оплата из России✅затрудненазатруднена
SSH / БД через туннель✅ (VIP / PERS)платночерез cloudflared на стороне клиента
Браузерный терминал✅❌❌
Готовые устройства «включил и работает»✅ shopdix.su❌❌
E2E (TLS до устройства)✅платно❌

Коротко о поддержке архитектур:

Устройство / SoCopkg print-architectureСборка
MediaTek MT7620/7621/7628 (Asus RT-AC51U, Xiaomi 4A, Archer C6)mipsel_24kcGOARCH=mipsle GOMIPS=softfloat
Atheros/QCA ath79 (Archer C7, GL.iNet AR150)mips_24kcGOARCH=mips GOMIPS=softfloat
Qualcomm IPQ40xx, Marvell mvebuarm_cortex-a7 / arm_cortex-a9GOARCH=arm GOARM=7
MediaTek Filogic, Raspberry Piaarch64_*GOARCH=arm64
x86 мини-ПК, виртуалкиx86_64GOARCH=amd64

> Не подходит: устройства с 4–8 МБ флеша без USB (бинарник не поместится) и устройства с 32 МБ RAM (запустится, но впритык).

Частые проблемы

СимптомПричинаРешение
SSL verify error, x509: certificate ... not yet validневерное время (у роутеров нет RTC)ntpd -q -n -p pool.ntp.org
scp: ... sftp-server: not foundновый OpenSSH копирует через SFTPscp -O
upgrade failed: HTTP 403неверный slug или токенпроверить в кабинете dix.su
malformed HTTP response "SSH-2.0-dropbear"HTTP-порт указан как 22HTTP-порт — 80, SSH идёт отдельным TCP-туннелем
«Слишком много перенаправлений»старая версия клиента + redirect_https в uhttpdклиент ≥ 1.0.2-go
top: 500+ МБ и >1000%это VSZ, а не реальная памятьсмотреть VmRSS в /proc//status
exec format error / Illegal instructionне та архитектураopkg print-architecture: mipsel ≠ mips

Полезные ссылки

Свежие статьи