Files

122 lines
3.3 KiB
Markdown
Raw Permalink Normal View History

2026-08-16 23:21:59 +00:00
# xray-lists
Утилита для скачивания списков ip/cidr и доменов с последующей генерацией готовых файлов для nftables и dnsmasq
## Установка
1. Склонируйте репозиторий в /opt/xray-lists-src
2. Подготовьте окружение:
```bash
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
```
3. Создаём скрипт хелпер `/var/lib/xray-lists/update.sh`:
```bash
#!/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
```
4. Делаем скрипт исполняемым:
```bash
chmod +x /var/lib/xray-lists/update.sh
```
## Использование
### Запуск программы:
```bash
/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`:
```ini
[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'
```
2. Cоздайте файл таймера `/etc/systemd/system/xray-lists.timer`:
```ini
[Unit]
Description=Run xray-lists update daily and on boot
[Timer]
OnBootSec=5min
OnUnitActiveSec=12h
Persistent=true
[Install]
WantedBy=timers.target
```
3. Включите и запустите таймер:
```bash
systemctl daemon-reload
systemctl enable --now xray-lists.timer
```
#### Проверить статус таймера и посмотреть, когда запланирован следующий запуск, можно командой:
```bash
systemctl list-timers --all
```
#### Посмотреть логи работы скрипта можно через journalctl:
```bash
journalctl -u xray-lists.service -b
```