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: мини-ПК или смартфон с уже настроенным туннелем — достаточно включить в розетку.
Тарифы
| Возможность | SIMPLE | VIP | PRO | PERS |
| Цена за 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) (на вашем устройстве)- При старте
device_clientустанавливает исходящее WebSocket-соединение (WSS) с прокси и предъявляет пару «слаг + токен». - Прокси регистрирует устройство: с этого момента слаг
myhomeпривязан к этому соединению. - Когда браузер обращается к
myhome.dix.su, nginx терминирует TLS и передаёт запрос вdixu_proxy. Прокси находит канал устройства по поддомену. - Запрос стримится чанками через WebSocket к клиенту. Клиент выполняет его к локальному серверу и тем же способом, чанками, отправляет ответ обратно.
- Тело запроса и ответа целиком в памяти не накапливается, поэтому большие файлы и медиапотоки проходят без проблем.
Клиент сам переподключается после обрыва связи и следит за каналом с помощью heartbeat: если ответ на ping не пришёл, соединение пересоздаётся, и туннель не «умирает тихо».
На одном слаге одновременно может быть только одно активное соединение. Если второй клиент подключится с тем же слагом и токеном, он вытеснит первый — это событие попадёт в историю подключений.
Серверный стек:
| Компонент | Технология | Роль |
| nginx | nginx | TLS-терминация, маршрутизация по поддоменам |
| dixu_proxy | Elixir / Phoenix | WebSocket-туннели, HTTP- и TCP-проксирование, защита от злоупотреблений |
| modulauth | Java / Spring Boot WebFlux | Авторизация, личный кабинет, биллинг, каталог |
| PostgreSQL | PostgreSQL 17 | Основная база данных |
| Redis | Redis 7 | Сессии |
Прокси написан на Elixir (BEAM). Каждое соединение живёт в собственном лёгком процессе, поэтому один сервер держит тысячи одновременных туннелей, а сбой одного соединения не затрагивает остальные.
TCP-туннели: SSH, RDP, VNC, базы данных
Помимо HTTP, через то же WebSocket-соединение можно пробросить TCP-трафик семи протоколов. Включаются они в личном кабинете: Туннель → Прямое TCP.
| Протокол | Внешний порт dix.su | Порт на устройстве | Тариф |
| SSH | 2222 | 22 | VIP+ |
| RDP | 3389 | 3389 | PRO+ |
| VNC | 4900 | 5900 | PRO+ |
| PostgreSQL | 4432 | 5432 | PERS |
| MySQL | 4306 | 3306 | PERS |
| Redis | 4379 | 6379 | PERS |
| MongoDB | 4017 | 27017 | PERS |
Один 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.su | ngrok (free) | Cloudflare Tunnel | |
| Постоянный адрес бесплатно | ✅ slug.dix.su | ❌ меняется при перезапуске | ✅ только со своим доменом |
| Свой домен | ✅ | платно | ✅ |
| Оплата из России | ✅ | затруднена | затруднена |
| SSH / БД через туннель | ✅ (VIP / PERS) | платно | через cloudflared на стороне клиента |
| Браузерный терминал | ✅ | ❌ | ❌ |
| Готовые устройства «включил и работает» | ✅ shopdix.su | ❌ | ❌ |
| E2E (TLS до устройства) | ✅ | платно | ❌ |
Коротко о поддержке архитектур:
| Устройство / SoC | opkg print-architecture | Сборка |
| MediaTek MT7620/7621/7628 (Asus RT-AC51U, Xiaomi 4A, Archer C6) | mipsel_24kc | GOARCH=mipsle GOMIPS=softfloat |
| Atheros/QCA ath79 (Archer C7, GL.iNet AR150) | mips_24kc | GOARCH=mips GOMIPS=softfloat |
| Qualcomm IPQ40xx, Marvell mvebu | arm_cortex-a7 / arm_cortex-a9 | GOARCH=arm GOARM=7 |
| MediaTek Filogic, Raspberry Pi | aarch64_* | GOARCH=arm64 |
| x86 мини-ПК, виртуалки | x86_64 | GOARCH=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 копирует через SFTP | scp -O |
upgrade failed: HTTP 403 | неверный slug или токен | проверить в кабинете dix.su |
malformed HTTP response "SSH-2.0-dropbear" | HTTP-порт указан как 22 | HTTP-порт — 80, SSH идёт отдельным TCP-туннелем |
| «Слишком много перенаправлений» | старая версия клиента + redirect_https в uhttpd | клиент ≥ 1.0.2-go |
top: 500+ МБ и >1000% | это VSZ, а не реальная память | смотреть VmRSS в /proc/ |
exec format error / Illegal instruction | не та архитектура | opkg print-architecture: mipsel ≠ mips |
Полезные ссылки
- Сервис: dix.su
- Документация: dix.su/docs
- FAQ: dix.su/faq
- Загрузки клиента: dix.su/downloads
- Готовые стеки: gitlab.com/dixsu/market
- Готовые устройства: shopdix.su
- Поддержка: support@dix.su