Repository navigation
Releases: CraftStick/node-installer-cdn
Release list
v2.0 — Remnawave + Yandex Cloud
VPN за российским CDN: VLESS на Xray в режиме XHTTP packet-up, спрятанный за
Yandex Cloud. Снаружи — обычный HTTPS к адресу CDN.
Что нового по сравнению с v1.0
Три режима вместо пяти
- Панель + нода на этом сервере
- Нода + CDN к существующей панели
- Только CDN перед уже работающей нодой
Режимы «только панель», «только нода» и «панель здесь + нода по SSH» убраны:
они путали и почти не использовались. Старые номера принимаются и
переназначаются автоматически.
Только Remnawave. 3x-ui удалён целиком — вместе с его SQLite-правками,
паролями в argv и пином версии. Флаг --panel 1 принимается молча, чтобы не
ломать старые команды.
Один CDN-провайдер вместо четырёх. Остался Yandex Cloud — единственный, где
туннель проверен на живой установке от начала до конца.
VK Cloud и Beeline (CDNvideo) убраны раньше. Timeweb убран в этом релизе: его
CDN пропускает на источник только запросы, у которых последний сегмент пути
похож на файл — имеет расширение. XHTTP шлёт /<путь>/<сессия>/<номер>, и
каждый такой запрос возвращается с 403, не доходя до сервера. Замер с одного
адреса: /index.html → 200, /a/b/t.m3u8 → 404 от nginx, а
/a/b/t.m3u8/abc123/0 → 403 от CDN. Со стороны клиента это не обходится.
Один вход вместо двух. Запасной gRPC Reality убран: прямой вход в обход CDN
открывает наружу порт, по которому ноду видно как ноду, — ровно то, от чего
прячемся. Теперь Xray слушает только 127.0.0.1, а файрвол открывает наружу
SSH, 80 и 443, и больше ничего.
Пошаговая инструкция по Yandex Cloud — в README и прямо в консоли, с уже
подставленными вашими доменами и IP: сертификат, группа источников, ресурс,
DNS. Отдельно расписаны грабли: разрешённые методы только GET/HEAD/OPTIONS,
запись проверки сертификата нельзя удалять после выпуска, 15 минут раскатки с
миганием 502.
Понятные имена в панели. Профиль CDN-YANDEX, нода Server-CDN, страна
RU, хост подписан провайдером — Yandex bypass.
Исправлено
- Нода не создавалась на исправной панели: ключ берётся из
/api/keygen, а не
из ответа создания ноды. - Хост отвергался панелью — перешли на вложенный объект
inbound
(configProfileUuid+configProfileInboundUuid). - Туннель отвечал
400на каждый запрос: настройки XHTTP (xPadding*,
uplinkHTTPMethod: GET, лимиты постинга) должны совпадать у ноды и у хоста —
теперь берутся из одного места. vless://-ссылка не работала при рабочей подписке: в неё не попадал блок
extraс настройками XHTTP.- Установка выглядела готовой, но не работала несколько минут: юзер создаётся
после запуска ноды, а конфиг нода забирает только на старте. Теперь после
создания юзера нода перезапускается и подхватывает его сразу. - Снос прошлой установки чистит и веб-фронт: раньше Caddy с прошлого запуска
держал:443и новый nginx на порт не вставал. - Случайный поддомен для источника вместо предсказуемого
origin.<домен>. - Файрвол больше не может отрезать SSH: порты определяются по
sshd -T,
конфигу,ssh.socketи текущему подключению. daemon.jsonдописывается, а не затирается; прежний сохраняется в.bak.- Секреты генерируются из
SystemRandom, файлы создаются сразу с нужными
правами, пароли не передаются через argv (есть переменные окружения
CDN_PANEL_PASS,CDN_PANEL_SSH_PASS,CDN_PANEL_TOKEN). - Загрузки идут во временный каталог из
mktemp -d, а не в/tmpс
предсказуемым именем.
Проверка
177 юнит-тестов (python3 -m unittest discover -v), все генерируемые
shell-команды прогоняются через sh -n, в конце установки — шесть
самопроверок: слушает ли xray на 127.0.0.1:4443, отдаёт ли голый путь
туннеля 404, жив ли фронт, на месте ли сертификат.
Установка
curl -fsSL https://raw.githubusercontent.com/CraftStick/node-installer-cdn/main/node-installer-cdn.py -o node-installer-cdn.py && sudo python3 node-installer-cdn.pyv1.0_Release
Установщик: скрипт, справочник команд, gitignore
node-installer-cdn.py — установщик панели, ноды и CDN-origin (6 режимов,
Xray 26.3.27, XHTTP packet-up, транзит через РФ).
commands.sh — справочный список shell-команд.