2026-02-14 19:56:16 +04:00
2026-02-14 19:52:31 +04:00
2026-02-14 19:52:31 +04:00
2026-02-14 19:56:16 +04:00
2026-02-14 19:52:31 +04:00

xray-manager

<<<<<<< HEAD xray-manager — это легковесный Shell-скрипт (Ash) для OpenWrt, предназначенный для автоматического управления списками маршрутизации (IP-адреса и домены) через nftables и tproxy.

Скрипт позволяет гибко распределять трафик: направлять нужные ресурсы через Xray, создавать исключения и автоматически поддерживать списки в актуальном состоянии.

Основные функции

  • Мульти-ссылочные секции: Возможность указать несколько URL в одной категории — скрипт сам скачает их, объединит и удалит дубликаты.
  • Поддержка auto-merge: Автоматическое решение конфликтов пересекающихся подсетей на уровне ядра (nftables), что предотвращает ошибки при загрузке больших списков.
  • Умное обновление DNS: Сервис dnsmasq перезапускается только при реальном изменении списков доменов, минимизируя разрывы соединений.
  • Проверка изменений (Hashing): Скрипт отслеживает изменения в конфигурации URL и уведомляет о необходимости запуска обновления при использовании reload.
  • Гибкая маршрутизация: Поддержка фильтрации по источнику (src) и назначению (dst), а также корректная обработка локального трафика роутера (route_local).
  • Автоматическая очистка: Удаление устаревших кэш-файлов и правил при изменении структуры конфигурации.

Установка

1. Зависимости

Убедитесь, что установлены необходимые пакеты:

opkg update && opkg install kmod-nf-tproxy kmod-nft-tproxy git git-http curl

Для полноценной работы со списками доменов необходима полная версия dnsmasq:

opkg remove dnsmasq
echo "nameserver 1.1.1.1" > /etc/resolv.conf
opkg install dnsmasq-full

2. Клонирование репозитория

Рекомендуется устанавливать в папку /opt:

git clone gitea@gitea.lan:pyrschtjag/xray-manager.git /opt/.xray-manager

или

git clone https://gitea.oyacoi.ru/pyrschtjag/xray-manager.git /opt/.xray-manager

3. Создание симлинков

Для интеграции скрипта в систему выполните следующие команды:

# Конфигурационный файл
ln -s /opt/.xray-manager/config/xray-manager /etc/config/xray-manager
# Инит-скрипт для управления сервисом
ln -s /opt/.xray-manager/init.d/xray-manager /etc/init.d/xray-manager
# Команда в PATH для быстрого доступа из любой папки
ln -s /opt/.xray-manager/xray-manager.sh /usr/sbin/xray-manager

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

Скрипт поддерживает стандартные команды OpenWrt:

  • xray-manager start — Инициализация таблиц и применение текущих списков из кэша.
  • xray-manager reload — Применение изменений из конфига без скачивания URL. Если ссылки изменились, скрипт выведет предупреждение.
  • xray-manager update — Скачивание всех внешних списков, дедупликация и обновление правил.
  • xray-manager stop — Полная очистка таблиц nftables и удаление временных файлов.
  • xray-manager restart — Остановка и повторный запуск.

Конфигурация

Глобальные параметры

Секция config xray-manager 'main' (обязательна):

config xray-manager 'main'
    option table_name 'xray'       # Имя таблицы в nftables
    option tproxy_port '61219'    # Порт Xray (TProxy)
    option tproxy_mark '10'       # fwmark для трафика
    option timeout '1h'           # Время жизни (для nftables set)
    option ipnet_dir '/tmp/ipnet' # Путь к спискам IP
    option dnsmasq_dir '/tmp/dnsmasq.d' # Путь к конфигам dnsmasq
    option cache_dir '/tmp/.xray-manager/cache'
    option active_list '/tmp/.xray-manager/active_files'
    option route_local '1'        # Проксировать трафик самого роутера

Исключения (Whitelist)

Секция lnet для защиты локальных адресов. Требуется для подстраховки, так как некоторые ресурсы могут подменять реальный IP на localhost при резолвинге:

config xray-list 'lnet'
    option name 'whitelist'
    option direction 'dst'
    option exclude '1'
    list ip '127.0.0.0/8'
    list ip '10.0.0.0/8'
    list ip '172.16.0.0/12'
    list ip '192.168.0.0/16'
    list ip '169.254.0.0/16'
    list ip '100.64.0.0/10'
    list ip '224.0.0.0/4'
    list ip '255.255.255.255/32'
    list ip '0.0.0.0/8'

Списки маршрутов

Каждая секция config xray-list определяет, какой именно трафик будет перехвачен или пропущен.

Параметр Значение Описание
name string Уникальное имя. Используется для названия сета в nftables (например, @v2ray_udom) и имени файла в /tmp.
direction dst или src Направление фильтрации.
dst: проверка IP назначения (куда идем).
src: проверка IP отправителя (кто идет).
exclude 0 или 1 Тип правила.
0: Направлять трафик в прокси.
1: Пропускать трафик напрямую (исключение).

Типы списков (list)

Внутри каждой секции можно комбинировать разные типы данных:

  • list ip: Одиночный IP-адрес или подсеть в формате CIDR (например, 1.1.1.1 или 192.168.1.0/24). Заносится напрямую в nftables.
  • list domain: Одиночный домен. Скрипт создаст файл конфигурации для dnsmasq, который будет перехватывать IP-адреса этого домена при резолвинге и динамически добавлять их в соответствующий сет nftables.
  • list url_ip: Ссылка на внешний текстовый файл со списком IP/подсетей. Скрипт скачает, очистит от комментариев и объединит данные.
  • list url_domain: Ссылка на список доменов. Аналогично url_ip, но данные готовятся для обработки через dnsmasq.

Пример 1: Направление доменов в прокси (назначение):

config xray-list
    option name 'v2ray'
    option direction 'dst'
    option exclude '0'
    list url_domain '[https://raw.githubusercontent.com/.../spotify](https://raw.githubusercontent.com/.../spotify)'
    list url_domain '[https://raw.githubusercontent.com/.../openai](https://raw.githubusercontent.com/.../openai)'
    list domain 'private.example.com'

Пример 2: Направление целой подсети локальных клиентов в прокси (источник):

config xray-list
    option name 'local_network'
    option direction 'src'
    option exclude '0'
    list ip '10.1.0.0/24'

Пример 3: Исключение конкретного устройства из проксирования:

config xray-list
    option name 'my_pc_bypass'
    option direction 'src'
    option exclude '1'
    list ip '10.1.0.6'

Логика работы (Flow)

  1. Цепочка Prerouting: Весь входящий трафик от клиентов попадает в таблицу nftables.
  2. Исключения (Exclude 1): Сначала проверяются списки с exclude '1'. Если совпадение найдено, пакет помечается accept и уходит по обычному маршруту.
  3. Маркировка (Direction src): Если IP клиента найден в списке с direction 'src', пакет помечается меткой 0x66.
  4. Перехват (Direction dst): Для пакетов с меткой 0x66 проверяются списки назначений (dst). Если финальный IP найден в сете — пакет перенаправляется на локальный порт TProxy.
  5. DNS-фильтрация: При запросе домена из списка domain/url_domain, dnsmasq сохраняет полученный IP в сет nftables на время, указанное в option timeout.
S
Description
No description provided
Readme
198 KiB
Languages
Shell 100%