Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

fix_xray_connlimit

Bash-скрипт для VPN-серверов на Xray (панель x-ui / 3x-ui) под Debian/Ubuntu.

Ограничивает число одновременных TCP-соединений с одного IP-адреса на порт 443 и включает TCP BBR. Решает проблему перегрузки оперативной памяти, когда отдельные клиенты открывают тысячи коннектов и «съедают» RSS процесса xray.

Что делает скрипт

  1. Проверяет, что запущен от root, и печатает состояние ДО: память (free -h), число established-соединений и RSS процесса xray.
  2. Устанавливает iptables-persistent (если ещё не установлен) в неинтерактивном режиме.
  3. Применяет правило connlimit на указанный порт для IPv4 (маска /32) и IPv6 (маска /64): новые SYN-пакеты сверх лимита отбиваются через REJECT --reject-with tcp-reset. Предыдущее идентичное правило предварительно удаляется, чтобы не плодить дубликаты.
  4. Сохраняет правила через netfilter-persistent save — они переживут перезагрузку.
  5. Включает BBR, записывая /etc/sysctl.d/99-bbr.conf:
    net.core.default_qdisc = fq
    net.ipv4.tcp_congestion_control = bbr
    
  6. Перезапускает сервис (по умолчанию x-ui) и проверяет, что он активен.
  7. Печатает состояние ПОСЛЕ и итоговые правила iptables / ip6tables.

Требования

  • ОС: Debian / Ubuntu (используются apt-get, dpkg, debconf, netfilter-persistent).
  • Права root.
  • Ядро с поддержкой модуля BBR (Linux 4.9+).
  • Установленные Xray / x-ui на сервере.

Параметры

Переопределяются через переменные окружения:

Переменная По умолчанию Описание
CONNLIMIT 150 Макс. число одновременных соединений с одного IP
PORT 443 Порт, на который накладывается лимит
RESTART_SVC x-ui Имя systemd-сервиса для перезапуска

Запуск

Залейте и выполните на сервере:

scp fix_xray_connlimit.sh root@SERVER:/tmp/
ssh root@SERVER bash /tmp/fix_xray_connlimit.sh

Или одной командой, не сохраняя файл на сервере:

cat fix_xray_connlimit.sh | ssh root@SERVER bash -s

С нестандартными параметрами:

CONNLIMIT=200 PORT=8443 RESTART_SVC=x-ui bash fix_xray_connlimit.sh

Откат

Удалить правило connlimit (подставьте свои PORT/CONNLIMIT):

iptables  -D INPUT -p tcp --dport 443 --syn -m connlimit --connlimit-above 150 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
ip6tables -D INPUT -p tcp --dport 443 --syn -m connlimit --connlimit-above 150 --connlimit-mask 64 -j REJECT --reject-with tcp-reset
netfilter-persistent save

Отключить BBR:

rm /etc/sysctl.d/99-bbr.conf

⚠️ Предупреждения

  • Слишком низкий CONNLIMIT может рвать соединения у легитимных клиентов (мультиплексирование, несколько устройств за одним NAT). Начинайте со значения с запасом.
  • Скрипт вставляет правило в начало цепочки INPUT (-I). Убедитесь, что это не конфликтует с уже настроенным фаерволом.
  • Перед массовым применением протестируйте на одном сервере.

Лицензия

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages