SSTEALTHNETSOFTWARE

Ноды

Нода — это сервер с движком Xray и нашим агентом. Агент забирает профиль из панели, вписывает в него клиентов и отчитывается трафиком и нагрузкой.

Подключение

На странице Ноды нажмите «Подключить ноду» — панель соберёт команду с адресом и ключом. Она ставит движок, агент и systemd-службу:

PANEL_URL=https://панель.ваш-домен NODE_SECRET=... bash install-node.sh

Секрет показывается один раз: в базе хранится только его хэш. Потеряли — перевыпустите в меню ноды.

Скрипт берёт агента из релиза на GitHub, а если тот недоступен — с самой панели. Свой адрес задаётся переменной AGENT_URL, конкретный выпуск — AGENT_RELEASE.

Сертификат

Установщик сертификаты не выпускает: установка одинаковая для всех нод, без ветвлений. Reality — вариант по умолчанию — сертификата не требует вовсе, он прикрывается чужим сайтом.

Сертификат нужен только тому, что работает поверх TLS: Trojan, Hysteria2 и подобному. Там он завязан на домен конкретной ноды, поэтому выпускается на месте.

Заведите домен с A-записью на эту ноду, освободите порт 80 и выпустите:

apt-get install -y certbot
certbot certonly --standalone -d de1.ваш-домен

mkdir -p /etc/sn-node/tls
cp /etc/letsencrypt/live/de1.ваш-домен/fullchain.pem /etc/sn-node/tls/de1.ваш-домен.crt
cp /etc/letsencrypt/live/de1.ваш-домен/privkey.pem   /etc/sn-node/tls/de1.ваш-домен.key

Дальше эти пути указываются в профиле, в streamSettings.tlsSettings.certificates.

Путь — до сертификата этой ноды, а не домена панели. Заготовка Hysteria2 идёт с плейсхолдером; если оставить в нём домен панели, движок на ноде ответит no such file or directory и не запустится — вместе с остальными инбаундами профиля.
Один профиль на разные ноды. Путь в конфиге один, поэтому TLS-инбаунд не получится держать в профиле, общем для нод с разными доменами. Таким нодам заведите отдельный профиль.
После продления движок нужно перезапустить: сертификат он читает только при старте и иначе будет отдавать просроченный. Кнопка «Перезапустить Xray» есть в меню ноды; в задании certbot это делается строкой --deploy-hook "systemctl restart sn-node".

Обновление

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

Сам агент обновляется кнопкой «Обновить агентов на всех нодах» в том же окне. Он подменяет себя и завершается — служба поднимает его заново.

Нода со старым агентом команд панели не понимает и остаётся на прежнем движке — в списке это видно как разные версии. Такую ноду нужно один раз обновить на самом сервере:
curl -fsSL https://панель.ваш-домен/update-node.sh | PANEL_URL=https://панель.ваш-домен bash

Секрет ноды не нужен: он уже прописан в её systemd-юните. Движок скрипт не трогает — его версию задаёт панель, и агент приведёт ноду к ней сам. Если версия нужна конкретная, её можно назвать явно: XRAY_VERSION=v26.7.11.

Гео-базы

Правила вида geoip:ru и geosite:category-ads-all опираются на файлы geoip.dat и geosite.dat. Из архива движка они ставятся один раз и дальше устаревают, поэтому установщик заводит еженедельное обновление.

Заодно ставится zapret.dat — список заблокированных в России ресурсов. Он нужен, только если в правилах есть zapret:*; без файла движок с таким правилом не запустится.

Обновление подменяет файл, лишь когда он действительно изменился: движок читает базы при старте, а лишний перезапуск — это лишний обрыв всех соединений.

Состояния ноды

ВидЧто означает
ЗелёнаяАгент на связи, движок работает, клиенты обслуживаются.
КраснаяЛибо агент не выходит на связь, либо движок не запустился — причина написана прямо в строке. Второе бывает при ошибке в конфиге или пропавшем сертификате.
СераяВыключена администратором. Это не авария: она намеренно не обслуживает клиентов.
Агент на связи ≠ движок работает. Это разные состояния, и панель их различает: нода, отвечающая на опрос при лежащем Xray, показывается аварийной, а не «в строю».

Защита от битого конфига

Перед подменой рабочего конфига агент спрашивает движок, примет ли он новый. Если нет — остаётся на прежнем и сообщает причину в панель. Одна опечатка в новом протоколе не выключает ноду целиком вместе с работавшими локациями.

Трафик и онлайн

Счётчики движок ведёт по клиентам и инбаундам, агент забирает их раз в 15 секунд и присылает дельту. «В сети» означает «передавал трафик за последнее окно опроса»: перечень активных соединений Xray наружу не отдаёт, и это честное приближение.