122 lines
3.3 KiB
Markdown
122 lines
3.3 KiB
Markdown
# 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
|
||
|
|
```
|