VPN·HUB·CRACK
Оптимизация ноды: отмечаете нужное, получаете готовый скрипт · VPN HUB CRACK
Оптимизация ноды: отмечаете нужное, получаете готовый скрипт
Оптимизация ноды: отмечаете нужное, получаете готовый скрипт
Свежая нода едет на умолчаниях. Докер не ограничивает ей память, логи Xray пишутся без ротации, политики перезапуска нет. У 3x-ui и нативных установок к этому добавляется лимит открытых файлов в 1024.
Первый месяц вы этого не замечаете. Потом клиентов становится триста, и нода начинает отваливаться по ночам.
Почему она отваливается и как отличить одну причину от другой, разобрано в статье «Почему ноды перестают работать». Здесь только починка.
Всё, что ниже, делает HUBTune — наш скрипт под MIT. Он не правит чужие файлы: настройки уходят в отдельный *.override.yml рядом с вашим compose, в systemd drop-in или в свою таблицу nftables. Откат удаляет один файл.
curl -fsSL https://raw.githubusercontent.com/qwe8nxtroud/HUBTune/main/hubtune.sh -o hubtune.sh
less hubtune.sh # прочитайте, прежде чем запускать от root
chmod +x hubtune.sh
sudo ./hubtune.sh status
Скрипт запускается от root и трогает фаервол. Читать чужой код перед таким запуском — не паранойя, а норма; это же правило действует для любого скрипта из интернета, включая наш.
status ничего не меняет. Он показывает текущий лимит памяти, счётчик OOM, пик потребления с момента запуска контейнера, размер логов и nofile. С него стоит начать: половина пунктов ниже у вас может быть уже закрыта.
⚠️ На ноде Remnawave пункт про дескрипторы, скорее всего, окажется пустым: официальный compose уже ставит
nofileв 1048576, и скрипт этот шаг пропустит. Пункт нужен 3x-ui и нативным установкам, где лимит остаётся заводским.
Что можно включить
| Настройка | Что чинит | Куда пишется |
|---|---|---|
| Лимит памяти | OOM-killer выбирает жертву сам и часто убивает не Xray, а панель или sshd | mem_limit в override либо MemoryMax в drop-in |
| Ротация логов | Логи Xray занимают весь диск, нода встаёт с «no space left» | драйвер json-file, max-size × max-file |
| Дескрипторы | На тысяче соединений Xray отдаёт «too many open files». У Remnawave уже настроено, шаг нужен 3x-ui и нативным установкам | ulimits в compose либо LimitNOFILE |
| Автоперезапуск | После падения или ребута нода не поднялась | restart: always |
| Swap-файл | Пик памяти убивает контейнер там, где хватило бы полсекунды подкачки | /swapfile-hubtune плюс строка в fstab |
| Сетевые sysctl | Очереди и буферы рассчитаны на десктоп, а не на тысячи соединений | /etc/sysctl.d/99-hubtune.conf |
| BBR | Контроль перегрузки. Заметен на длинном плече до Европы | тот же файл sysctl |
| Файрвол | Открыты порты, о которых вы забыли | своя таблица nftables |
| SSH по ключу | Пароль перебирают круглосуточно | drop-in для sshd |
| Ядро XanMod | Свежий сетевой стек и BBRv3 | пакет ядра, с проверкой загрузки |
Первые четыре пункта скрипт называет безопасным режимом: они трогают только сам сервис. Swap, sysctl и BBR меняют настройки хоста, поэтому живут в полном режиме.
Конфигуратор
Отметьте, что нужно, и заберите команду.
Сам сервис
Настройки хоста
Отдельные шаги
Параметры
Сколько памяти отдать ноде
Лимит считается по одной формуле: системе оставляем 20% оперативки, но не меньше 192 МБ и не больше 1 ГБ. Остальное забирает сервис.
| RAM хоста | Лимит сервиса | Остаётся системе |
|---|---|---|
| 512 МБ | 320 МБ | 192 МБ |
| 1 ГБ | 820 МБ | 204 МБ |
| 2 ГБ | 1.6 ГБ | 409 МБ |
| 4 ГБ | 3.2 ГБ | 819 МБ |
Ниже 256 МБ скрипт лимит не поставит: на таком потолке Xray перезапускается по кругу и клиенты видят вечный разрыв вместо честной ошибки.
Своё значение задавайте, когда знаете пик потребления. status читает его из cgroup, то есть считает с момента запуска контейнера: после перезапуска отсчёт начинается заново, и на свежеподнятой ноде цифра ничего не значит.
⚠️ Лимит памяти не лечит утечку, он её локализует. Если Xray на вашей ноде растёт пилой до потолка и перезапускается каждые несколько часов, ищите причину: чаще всего это старая версия ядра Xray или включённый
statsс накоплением. Лимит только гарантирует, что вместе с Xray не умрёт панель.
Файрвол, который откатится сам
Отдельная команда, потому что это единственный шаг, которым реально теряют сервер.
sudo ./hubtune.sh firewall
Скрипт собирает свою таблицу nftables, применяет её и запускает таймер на пять минут. Если за это время вы не подтвердите правила из нового подключения, всё откатится.
sudo ./hubtune.sh firewall confirm
Порядок именно такой: применили, открыли второй SSH-сеанс, вошли, подтвердили. Проверять правила в той сессии, где вы их применили, бессмысленно: она уже установлена и живёт по conntrack, даже когда новые подключения запрещены. На этом теряют доступ чаще, чем на любой другой ошибке в правилах.
⛔ Порты инбаундов надо перечислить руками. Политика цепочки — запрет всего, чего нет в правилах. Порты ваших инбаундов Xray заданы в панели, и скрипт про них не знает: он видит только SSH и порт связи с панелью. Сам он об этом предупреждает на этапе
plan, но предупреждение легко проскочить.Ловушка в том, что автооткат вас не спасёт. Вы применяете правила, заходите вторым SSH-сеансом (SSH разрешён), подтверждаете — и в этот момент 443 закрыт, а весь парк клиентов уже отвалился. Таймер израсходован, откатывать нечего.
bash sudo ./hubtune.sh firewall --allow-tcp 443,8443Выпишите порты из панели до запуска и передайте их флагом. UDP-инбаунды (Hysteria2) добавляются через
--allow-udp.
Порт связи ноды с панелью скрипт читает из .env ноды. По умолчанию он открывается со всех адресов: чтобы ограничить его адресом вашей панели, передайте --panel-ip.
sudo ./hubtune.sh firewall --allow-tcp 443 --panel-ip 203.0.113.10
При активном ufw или firewalld скрипт отказывается работать. Два фаервола на одной машине пишут в разные места и переопределяют друг друга в непредсказуемом порядке.
Что останется на диске
Скрипт держит всё своё отдельно и помечает маркером managed-by: hubtune:
| Что | Где |
|---|---|
| Настройки докера | docker-compose.override.yml рядом с вашим compose |
| Настройки systemd | drop-in 10-hubtune.conf |
| sysctl | /etc/sysctl.d/99-hubtune.conf |
| Файрвол | /etc/hubtune/firewall.nft плюс юнит |
| Swap | /swapfile-hubtune и строка в fstab |
| Бэкапы и манифест | /var/backups/hubtune, /var/lib/hubtune |
Ваш docker-compose.yml остаётся нетронутым. Это важно, когда ноду переустанавливают штатным скриптом панели: он перезапишет свои файлы и не заметит соседние.
Откат
sudo ./hubtune.sh rollback
Откат читает манифест последнего запуска и снимает ровно то, что этот запуск поставил. Чужие настройки, которые лежали на сервере до вас, он не трогает.
Проверить, что помогло
Через сутки после применения:
sudo ./hubtune.sh status
Смотрите три цифры. Счётчик OOM должен перестать расти. Пик памяти должен остаться под лимитом: применение лимита пересоздаёт контейнер, поэтому отсчёт пика начинается с этого момента и сутки набора статистики как раз дают показательную цифру. Размер логов должен встать на потолке max-size × max-file вместо бесконечного роста.
Если OOM продолжается при живом лимите, проблема не в настройках хоста: нода умирает по другой причине, и лимит только не даёт ей утащить за собой панель.
Мониторинг, который покажет это без ручных заходов на сервер, разобран в статье «Мониторинг ресурсов». Защита от сканеров и переборов вынесена в HUBGuard.