diff --git a/README.md b/README.md index 6b8c670..9a3e324 100644 --- a/README.md +++ b/README.md @@ -36,12 +36,12 @@ git clone gitea@gitea.lan:pyrschtjag/xray-manager.git /opt/.xray-manager ```bash git clone https://gitea.oyacoi.ru/pyrschtjag/xray-manager.git /opt/.xray-manager ``` -### 3. Создание симлинков +### 3. Интеграция скрипта Для интеграции скрипта в систему выполните следующие команды: ```Bash # Конфигурационный файл -ln -s /opt/.xray-manager/config/xray-manager /etc/config/xray-manager +cp /opt/.xray-manager/config/xray-manager.example /etc/config/xray-manager # Инит-скрипт для управления сервисом ln -s /opt/.xray-manager/init.d/xray-manager /etc/init.d/xray-manager # Команда в PATH для быстрого доступа из любой папки @@ -54,7 +54,7 @@ ln -s /opt/.xray-manager/xray-manager.sh /usr/sbin/xray-manager * **/etc/init.d/xray-manager start** — **Холодный запуск**
Полная инициализация системы: создание таблиц nftables, цепочек и правил. При первом запуске скрипт автоматически скачает все списки из URL. Если списки уже есть в кэше — применит их. -* **/etc/init.d/xray-manager reload** — **Локальное обновление**
Применяет изменения, внесенные в конфигурационный файл /etc/config/xray-manager (например, изменение портов или добавление новых секций), но не обращается к сети. Если вы изменили URL в конфиге, скрипт выдаст предупреждение о необходимости запуска update. +* **/etc/init.dИ отредактируйте/xray-manager reload** — **Локальное обновление**
Применяет изменения, внесенные в конфигурационный файл /etc/config/xray-manager (например, изменение портов или добавление новых секций), но не обращается к сети. Если вы изменили URL в конфиге, скрипт выдаст предупреждение о необходимости запуска update. * **/etc/init.d/xray-manager update** — **Умная синхронизация**
Скрипт опрашивает все внешние URL. Благодаря системе хеширования (Hashing), загрузка и пересборка правил произойдет только для тех списков, которые реально изменились на удаленном сервере. Это экономит трафик и минимизирует нагрузку на процессор роутера. diff --git a/config/xray-manager b/config/xray-manager.example similarity index 91% rename from config/xray-manager rename to config/xray-manager.example index 2fcbf94..9a44d53 100644 --- a/config/xray-manager +++ b/config/xray-manager.example @@ -34,7 +34,7 @@ config xray-list option name 'proxyserver' option direction 'dst' option exclude '1' - list ip '178.173.249.148' + list ip '' config xray-list option name 'local' @@ -42,13 +42,6 @@ config xray-list option exclude '0' list ip '192.168.1.0/24' -config xray-list - option name 'cf-dns' - option direction 'dst' - option exclude '1' - list ip '1.1.1.1' - list ip '1.0.0.1' - config xray-list option name 'refilter' option direction 'dst' @@ -75,4 +68,4 @@ config xray-list option exclude '0' list url_domain 'https://raw.githubusercontent.com/v2ray/domain-list-community/refs/heads/master/data/spotify' list url_domain 'https://raw.githubusercontent.com/v2ray/domain-list-community/refs/heads/master/data/microsoft' - list url_domain 'https://raw.githubusercontent.com/v2ray/domain-list-community/refs/heads/master/data/openai' \ No newline at end of file + list url_domain 'https://raw.githubusercontent.com/v2ray/domain-list-community/refs/heads/master/data/openai' diff --git a/xray-manager.sh b/xray-manager.sh index 1f5d9b3..37b8e2b 100755 --- a/xray-manager.sh +++ b/xray-manager.sh @@ -18,13 +18,14 @@ _init_vars() { TPROXY_PORT=$(uci -q get xray-manager.$s.tproxy_port) TPROXY_MARK=$(uci -q get xray-manager.$s.tproxy_mark) CLIENT_MARK=$(uci -q get xray-manager.$s.client_mark) + TIMEOUT=$(uci -q get xray-manager.$s.timeout) IPNET_DIR=$(uci -q get xray-manager.$s.ipnet_dir) DNSMASQ_DIR=$(uci -q get xray-manager.$s.dnsmasq_dir) CACHE_DIR=$(uci -q get xray-manager.$s.cache_dir) ACTIVE_LIST=$(uci -q get xray-manager.$s.active_list) ROUTE_LOCAL=$(uci -q get xray-manager.$s.route_local) - local required_vars="TABLE TPROXY_PORT TPROXY_MARK CLIENT_MARK IPNET_DIR DNSMASQ_DIR CACHE_DIR ACTIVE_LIST ROUTE_LOCAL" + local required_vars="TABLE TPROXY_PORT TPROXY_MARK CLIENT_MARK TIMEOUT IPNET_DIR DNSMASQ_DIR CACHE_DIR ACTIVE_LIST ROUTE_LOCAL" for var in $required_vars; do eval val=\$$var @@ -112,9 +113,14 @@ _nft_apply_data() { local nft_sname="s_$sname" local flags="interval" - [ "$type" = "dom" ] || [ "$type" = "udom" ] && flags="interval,timeout" + local set_params="type ipv4_addr; flags $flags; auto-merge;" - nft add set ip "$TABLE" "$nft_sname" { type ipv4_addr \; flags $flags \; auto-merge \; } 2>/dev/null + if [ "$type" = "dom" ] || [ "$type" = "udom" ]; then + flags="interval,timeout" + set_params="type ipv4_addr; flags $flags; timeout $TIMEOUT; auto-merge;" + fi + + nft add set ip "$TABLE" "$nft_sname" { $set_params } 2>/dev/null if [ "$changed" = "1" ] && [ -s "$file" ] && [[ "$type" == *"ip"* ]]; then _log "Syncing '$nft_sname' to NFT..."