d23a1cb936329bc0b08f42420498ef47e4529a9d
xray-lists
Утилита для скачивания списков ip/cidr и доменов с последующей генерацией готовых файлов для nftables и dnsmasq
Установка
-
Склонируйте репозиторий в /opt/xray-lists-src
-
Подготовьте окружение:
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
- Создаём скрипт хелпер
/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
- Делаем скрипт исполняемым:
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.
- Создайте файл службы
/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'
- 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
- Включите и запустите таймер:
systemctl daemon-reload
systemctl enable --now xray-lists.timer
Проверить статус таймера и посмотреть, когда запланирован следующий запуск, можно командой:
systemctl list-timers --all
Посмотреть логи работы скрипта можно через journalctl:
journalctl -u xray-lists.service -b
Languages
Python
100%