Files
2026-08-16 23:21:59 +00:00

3.3 KiB

xray-lists

Утилита для скачивания списков ip/cidr и доменов с последующей генерацией готовых файлов для nftables и dnsmasq

Установка

  1. Склонируйте репозиторий в /opt/xray-lists-src

  2. Подготовьте окружение:

apt install python3-venv
python3 -m venv /opt/xray-lists/venv

/opt/xray-lists/venv/bin/pip install /opt/xray-lists-src
/opt/xray-lists/venv/bin/pip install '/opt/xray-lists-src[socks]'  # опционально, для socks прокси

mkdir -p /var/lib/xray-lists/
cp /opt/xray-lists-src/config.example.yaml /var/lib/xray-lists/config.yaml
  1. Создаём скрипт хелпер /var/lib/xray-lists/update.sh:
#!/bin/sh

set -e

out=$(/opt/xray-lists/venv/bin/xray-lists)
echo "$out"

dns_changed=0
elements_changed=0

if echo "$out" | grep -A 10 "changed:" | grep -q "nftsets.conf"; then dns_changed=1; fi
if echo "$out" | grep -A 10 "changed:" | grep -q "\.elements\.nft"; then elements_changed=1; fi

if [ "$dns_changed" -eq 1 ] && [ "$elements_changed" -eq 1 ]; then exit 12;
elif [ "$dns_changed" -eq 1 ]; then exit 10;
elif [ "$elements_changed" -eq 1 ]; then exit 11;
fi

exit 0
  1. Делаем скрипт исполняемым:
chmod +x /var/lib/xray-lists/update.sh

Использование

Запуск программы:

/opt/xray-lists/venv/bin/xray-lists

Флаги

  • -h, --help - список и опиание флаговё
  • --config <path> - кастомный путь к конфигу
  • --only <id> - обновление только конкретного списка по его ID (можно через запятую)
  • --dry-run - проверка загрузки и обработки без записи файлов на диск
  • -v, --verbose - подробные лог

Автоматизация через systemd

Чтобы утилита запускалась автоматически по расписанию (например, раз в сутки или при старте системы), настроим пару юнитов systemd.

  1. Создайте файл службы /etc/systemd/system/xray-lists.service:
[Unit]
Description=Update Xray lists

[Service]
Type=oneshot
ExecStart=/bin/sh -c '\
/var/lib/xray-lists/update.sh; \
rc=$$?; \
case "$$rc" in \
    10) systemctl restart dnsmasq ;; \
    11) nft -f /etc/nftables.conf ;; \
    12) nft -f /etc/nftables.conf && systemctl restart dnsmasq ;; \
esac'
  1. Cоздайте файл таймера /etc/systemd/system/xray-lists.timer:
[Unit]
Description=Run xray-lists update daily and on boot

[Timer]
OnBootSec=5min
OnUnitActiveSec=12h
Persistent=true

[Install]
WantedBy=timers.target
  1. Включите и запустите таймер:
systemctl daemon-reload
systemctl enable --now xray-lists.timer

Проверить статус таймера и посмотреть, когда запланирован следующий запуск, можно командой:

systemctl list-timers --all

Посмотреть логи работы скрипта можно через journalctl:

journalctl -u xray-lists.service -b