kda-homenode

Домашний узел 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 Linux3.21базовая системаобраз alpine
python33.12агент узла (регистрация, настройки, страница управления)пакет Alpine; сторонних библиотек нет
amneziawg-go, awgv3.1туннель AmneziaWG в пользовательском пространстве — модуль ядра не нуженсобраны из исходников github.com/amnezia-vpn
sing-box1.14.4SOCKS5-сервер для хаба и фильтр «из туннеля нельзя в вашу сеть»собран из исходников github.com/SagerNet/sing-box
wstunnel11.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.ru443/udpосновной туннель AmneziaWG к хабу
hub-ws.kda7889.ru443/tcp (HTTPS/WebSocket)запасной туннель, если провайдер режет UDP
hub.kda7889.ru443/tcp (HTTPS)регистрация и первый конфиг; пока туннель не поднят — отчёты и настройки; скачивание образа Docker при установке и docker compose pull (/v2/)
хаб внутри туннеля 172.29.112.18470/tcpкогда туннель поднят: отчёт о состоянии раз в минуту, подписанный конфиг, пакет обновления агента
api.ipify.org443/tcp (HTTPS)раз в час и по кнопке «проверить» на странице управления — проверка собственного внешнего адреса
DNS вашей системы53как у любой программы на этой машине

Внутри контейнера (вашей машины и сети не касается):

  • интерфейс awg0 с адресом 172.29.112.x/32 и единственным маршрутом до хаба 172.29.112.1/32; весь остальной трафик контейнера идёт обычным путём через Docker;
  • локальный SOCKS5 1080 и служебный API 8470 — наружу не публикуются; доступны хабу через туннель (и больше никому): по паролю и ключу, которые знает только хаб;
  • правило в самом контейнере: из туннеля запрещены адреса 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 — в нём уже всё заполнено, его нужно вставить по инструкции. Файл одноразовый и действует сутки.

Удаление

Кнопка «Удалить узел» на странице управления, затем удалить контейнер. Если удалить контейнер вместе с томом без этой кнопки, узел пропадёт у владельца хаба из списка как «офлайн», и он удалит его сам.