Домашний узел kda-homenode
Домашний узел — это один контейнер на вашем NAS или компьютере. Он подключается к хабу владельца сети и позволяет ему выходить в интернет через ваш домашний канал. Ниже — что именно устанавливается, что при этом происходит с вашей сетью и чем вы управляете.
Что устанавливается
Один Docker-контейнер homenode. Он сам устанавливает шифрованное соединение с хабом и поддерживает его. Из интернета к нему ничего не подключается: соединение всегда исходящее, от вас к хабу. На роутере ничего настраивать не нужно. Полный перечень того, что создаёт Docker и куда ходит узел, — в разделе «Сетевые настройки» ниже.
Чей трафик проходит через ваш канал
Только трафик владельца хаба: его телефон и ноутбук, когда он выбирает ваш узел как выход в интернет. Для сайтов это выглядит так, будто он находится у вас дома. Другие люди подключиться не могут: узел принимает соединения только от хаба, по ключу и паролю, которые созданы на вашем узле при установке.
Чего узел не делает:
- не даёт доступа к вашей домашней сети: роутер, NAS, компьютеры и любые адреса вида 192.168.x.x или 10.x.x.x из туннеля недоступны. Этот запрет встроен в сам контейнер, а не настраивается на хабе;
- не ведёт журналов посещённых сайтов (в файл пишутся только ошибки самого процесса
sing-box, без адресов назначения); - не требует режима «высокие привилегии» и доступа к Docker вашей системы — только право поднять собственный сетевой интерфейс.
Контейнер обновляет свою программу самостоятельно, получая её с хаба с проверкой цифровой подписи. Как и любое установленное по чьей-либо просьбе программное обеспечение, он выполняет то, что в него заложил владелец хаба; за пределы контейнера он не выходит, наружу — только соединение с хабом.
Что внутри контейнера
На самой машине ничего не устанавливается: всё живёт внутри образа hub.kda7889.ru/kda-homenode (около 115 МБ). Состав образа:
| Что | Версия | Зачем | Откуда |
|---|---|---|---|
| Alpine Linux | 3.21 | базовая система | образ alpine |
| python3 | 3.12 | агент узла (регистрация, настройки, страница управления) | пакет Alpine; сторонних библиотек нет |
| amneziawg-go, awg | v3.1 | туннель AmneziaWG в пользовательском пространстве — модуль ядра не нужен | собраны из исходников github.com/amnezia-vpn |
| sing-box | 1.14.4 | SOCKS5-сервер для хаба и фильтр «из туннеля нельзя в вашу сеть» | собран из исходников github.com/SagerNet/sing-box |
| wstunnel | 11.1.0 | запасной транспорт через HTTPS/WebSocket | релиз github.com/erebe/wstunnel |
| iproute2 | — | команды ip (адрес интерфейса awg0) и tc (лимит скорости) | пакет Alpine |
| openssl, ca-certificates | — | проверка цифровой подписи настроек и обновлений, TLS | пакеты Alpine |
| curl | — | проверка внешнего адреса | пакет Alpine |
| iptables | — | у узла: запрет пересылки пакетов (FORWARD DROP) и запрет доступа к странице управления из туннеля; остальное — для хаба | пакет Alpine |
| ipset, qrencode, tzdata | — | нужны хабу (образ общий для хаба и узла); узел их не использует | пакеты Alpine |
Сборка образа описана в image/Dockerfile репозитория: все компоненты берутся из публичных источников, пакетов из pip нет. Обновления агента приходят с хаба в виде пакета Python-кода с цифровой подписью; бинарные программы меняются только с новым образом (команда docker compose pull или кнопка «Собрать» в Container Manager).
Данные узла — один том Docker homenode-data: ключи, настройки, счётчики трафика. Удаление тома = удаление ключей.
Сетевые настройки: что именно создаёт Docker
Снаружи контейнера, на вашей машине:
- Сеть Docker
<имя проекта>_default— обычная внутренняя сеть-мост Docker (адреса вида172.x.0.0/16, выбирает сам Docker). Контейнер получает в ней один частный адрес. В вашей домашней сети новых адресов, интерфейсов, маршрутов и DNS-настроек не появляется. - Один опубликованный порт
8472/tcp— страница управления (http://<адрес машины>:8472). Это единственный порт, который слушает ваша машина от имени узла. Пробрасывать его на роутере не нужно и не стоит. - Входящих соединений из интернета нет. Узел ничего не принимает извне: все соединения он открывает сам, изнутри вашей сети наружу.
Исходящие соединения узла (то, что увидит ваш роутер):
| Куда | Порт | Зачем |
|---|---|---|
gw.kda7889.ru | 443/udp | основной туннель AmneziaWG к хабу |
hub-ws.kda7889.ru | 443/tcp (HTTPS/WebSocket) | запасной туннель, если провайдер режет UDP |
hub.kda7889.ru | 443/tcp (HTTPS) | регистрация и первый конфиг; пока туннель не поднят — отчёты и настройки; скачивание образа Docker при установке и docker compose pull (/v2/) |
хаб внутри туннеля 172.29.112.1 | 8470/tcp | когда туннель поднят: отчёт о состоянии раз в минуту, подписанный конфиг, пакет обновления агента |
api.ipify.org | 443/tcp (HTTPS) | раз в час и по кнопке «проверить» на странице управления — проверка собственного внешнего адреса |
| DNS вашей системы | 53 | как у любой программы на этой машине |
Внутри контейнера (вашей машины и сети не касается):
- интерфейс
awg0с адресом172.29.112.x/32и единственным маршрутом до хаба172.29.112.1/32; весь остальной трафик контейнера идёт обычным путём через Docker; - локальный SOCKS5
1080и служебный API8470— наружу не публикуются; доступны хабу через туннель (и больше никому): по паролю и ключу, которые знает только хаб; - правило в самом контейнере: из туннеля запрещены адреса
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,100.64.0.0/10(туда попадает и ваш роутер, и NAS) и шлюз контейнера — ваша сеть из туннеля недостижима.
Права контейнера: NET_ADMIN (создать awg0 и ограничить скорость) и доступ к устройству /dev/net/tun. Без режима «высокие привилегии», без сети хоста, без доступа к Docker вашей машины. Запускается с no-new-privileges, init: true (корректное завершение процессов) и sysctl net.ipv4.ping_group_range (разрешает ping внутри контейнера).
Чем вы управляете
Страница управления http://<адрес вашей машины>:8472 открывается только из вашей домашней сети и не требует пароля:
- состояние связи с хабом и объём трафика за месяц;
- пауза — трафик через ваш канал не идёт, пока вы её не снимете;
- лимит скорости, чтобы узел не мешал вашим устройствам;
- доступ к вашей сети — выключен; включить его можете только вы и только по предварительной договорённости, например чтобы вам помогли с настройкой NAS;
- удалить узел — стирает ключи и отзывает регистрацию на хабе; после этого контейнер можно удалить.
Установка
Инструкция под вашу систему:
- Synology —
install-synology.md; - Linux с Docker —
install-linux.md; - Windows или macOS с Docker Desktop —
install-docker-desktop.md.
Вы получите готовый файл homenode-….yaml — в нём уже всё заполнено, его нужно вставить по инструкции. Файл одноразовый и действует сутки.
Удаление
Кнопка «Удалить узел» на странице управления, затем удалить контейнер. Если удалить контейнер вместе с томом без этой кнопки, узел пропадёт у владельца хаба из списка как «офлайн», и он удалит его сам.