Compare commits
14
Commits
9ea63e157f
...
0.2.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
64fe40fcd9 | ||
|
|
520eca9548 | ||
|
|
b0c53fb678 | ||
|
|
b78e53ee23 | ||
|
|
0553dc8d70 | ||
|
|
819111f953 | ||
|
|
b8ac297adb | ||
|
|
e0f3b4ab8b | ||
|
|
3462c3a9ad | ||
|
|
e80f3f0171 | ||
|
|
1a631140a7 | ||
|
|
eb9621cec6 | ||
|
|
f9c51d0199 | ||
|
|
430d1c8276 |
@@ -10,8 +10,11 @@
|
||||
* **Поддержка `auto-merge`**: Автоматическое решение конфликтов пересекающихся подсетей на уровне ядра (nftables), что предотвращает ошибки при загрузке больших списков.
|
||||
* **Умное обновление DNS**: Сервис `dnsmasq` перезапускается только при реальном изменении списков доменов, минимизируя разрывы соединений.
|
||||
* **Проверка изменений (Hashing)**: Скрипт отслеживает изменения в конфигурации URL и уведомляет о необходимости запуска обновления при использовании `reload`.
|
||||
* **Гибкая маршрутизация**: Поддержка фильтрации по источнику (`src`) и назначению (`dst`), а также корректная обработка локального трафика роутера (`route_local`).
|
||||
* **Гибкая маршрутизация**: Поддержка фильтрации по источнику (`src`) и назначению (`dst`).
|
||||
* **Автоматическая очистка**: Удаление устаревших кэш-файлов и правил при изменении структуры конфигурации.
|
||||
* **Персональные цепочки**: Возможность завернуть абсолютно весь трафик конкретного устройства в прокси с созданием изолированной цепочки правил.
|
||||
* **Изолированные исключения**: Поддержка параметра parent, который позволяет назначать списки исключений только для конкретных групп или устройств, не влияя на общую маршрутизацию.
|
||||
* **Защита от петель**: Автоматическое исключение IP-адресов самих прокси-серверов из обработки, что гарантирует стабильность соединения.
|
||||
|
||||
## Установка
|
||||
|
||||
@@ -44,8 +47,6 @@ git clone https://gitea.oyacoi.ru/pyrschtjag/xray-manager.git /opt/.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 для быстрого доступа из любой папки
|
||||
ln -s /opt/.xray-manager/xray-manager.sh /usr/sbin/xray-manager
|
||||
```
|
||||
|
||||
## Команды управления
|
||||
@@ -54,7 +55,7 @@ ln -s /opt/.xray-manager/xray-manager.sh /usr/sbin/xray-manager
|
||||
|
||||
* **/etc/init.d/xray-manager start** — **Холодный запуск** <br> Полная инициализация системы: создание таблиц nftables, цепочек и правил. При первом запуске скрипт автоматически скачает все списки из URL. Если списки уже есть в кэше — применит их.
|
||||
|
||||
* **/etc/init.dИ отредактируйте/xray-manager reload** — **Локальное обновление** <br> Применяет изменения, внесенные в конфигурационный файл /etc/config/xray-manager (например, изменение портов или добавление новых секций), но не обращается к сети. Если вы изменили URL в конфиге, скрипт выдаст предупреждение о необходимости запуска update.
|
||||
* **/etc/init.d/xray-manager reload** — **Локальное обновление** <br> Применяет изменения, внесенные в конфигурационный файл /etc/config/xray-manager (например, изменение портов или добавление новых секций), но не обращается к сети. Если вы изменили URL в конфиге, скрипт выдаст предупреждение о необходимости запуска update.
|
||||
|
||||
* **/etc/init.d/xray-manager update** — **Умная синхронизация** <br> Скрипт опрашивает все внешние URL. Благодаря системе хеширования (Hashing), загрузка и пересборка правил произойдет только для тех списков, которые реально изменились на удаленном сервере. Это экономит трафик и минимизирует нагрузку на процессор роутера.
|
||||
|
||||
@@ -77,7 +78,7 @@ ln -s /opt/.xray-manager/xray-manager.sh /usr/sbin/xray-manager
|
||||
| **dnsmasq_dir** | `string` | `/tmp/dnsmasq.d` | Директория для `.conf` файлов dnsmasq (автоматически добавляется в `confdir` по пути `/etc/config/dhcp`). |
|
||||
| **cache_dir** | `string` | `/tmp/.xray-manager/cache` | Место хранения хэш-файлов для отслеживания изменений в списках. |
|
||||
| **active_list** | `string` | `/tmp/.xray-manager/active_files` | Файл-индекс для автоматической очистки «осиротевших» (удаленных) списков. |
|
||||
| **route_local** | `bool` | `0` | `1` — перехватывать и проксировать трафик самого роутера; <br> `0` — только трафик клиентов. |
|
||||
| **proxy_ip** | `list` | | Список IP прокси-серверов. Они будут автоматически добавлены в исключения, чтобы роутер не пытался проксировать соединение к самому прокси. |
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -87,7 +88,6 @@ config xray-manager 'main'
|
||||
option tproxy_port '61219'
|
||||
option tproxy_mark '10'
|
||||
option timeout '1h'
|
||||
option route_local '1'
|
||||
option ipnet_dir '/tmp/ipnet'
|
||||
option dnsmasq_dir '/tmp/dnsmasq.d'
|
||||
option cache_dir '/tmp/.xray-manager/cache'
|
||||
@@ -121,8 +121,9 @@ config xray-list 'lnet'
|
||||
| Параметр | Значение | Описание |
|
||||
| :--- | :--- | :--- |
|
||||
| **name** | `string` | Уникальное имя. Используется для названия сета в `nftables` (например, `@v2ray_udom`) и имени файла в `/tmp`. |
|
||||
| **direction** | `dst` или `src` | **Направление фильтрации**: <br> `dst`: проверка IP назначения (куда идём). <br> `src`: проверка IP отправителя (кто идёт). |
|
||||
| **exclude** | `0` или `1` | **Тип правила**: <br> `0`: Направлять трафик в прокси. <br> `1`: Пропускать трафик напрямую (исключение). |
|
||||
| **direction** | `dst`, `src`, `out`, `force_src` | **Направление фильтрации**: <br> `dst`: проверка IP назначения. <br> `src`: проверка IP отправителя. <br> `out`: трафик самого роутера (Self-traffic). <br> `force_src`: принудительный прокси для устройства (весь трафик). |
|
||||
| **exclude** | `bool` | **Тип правила**: <br> `0`: Направлять трафик в прокси. <br> `1`: Пропускать трафик напрямую (исключение). |
|
||||
| **parent** | `string` | Имя родительской секции (`force_src`). Если указан, то данное исключение (`exclude 1`) будет работать только для этого родителя. |
|
||||
|
||||
Внутри каждой секции можно комбинировать разные типы данных:
|
||||
|
||||
@@ -133,6 +134,39 @@ config xray-list 'lnet'
|
||||
| **list url_ip** | `http(s)://...` | Ссылка на сырой текстовый файл с IP. Скрипт скачает и объединит данные. |
|
||||
| **list url_domain** | `http(s)://...` | Ссылка на сырой текстовый файл с доменами. Готовит данные для dnsmasq. |
|
||||
|
||||
### Прокси для самого роутера
|
||||
|
||||
В этом примере завернём запросы до DNS-серверов Cloudflare в прокси:
|
||||
|
||||
```bash
|
||||
config xray-list
|
||||
option name 'router_self'
|
||||
option direction 'out' # Трафик роутера
|
||||
option exclude '0'
|
||||
list ip '1.1.1.1'
|
||||
list ip '1.0.0.1'
|
||||
```
|
||||
|
||||
### Проксировать весь трафик от клиента с поддержкой исключений
|
||||
|
||||
Завернём в прокси весь трафик от клиента, исключив 2ip.ru:
|
||||
|
||||
```bash
|
||||
# Проксировать весь трафик от клиента 10.2.0.4
|
||||
config xray-list
|
||||
option name 'my_pc'
|
||||
option direction 'force_src'
|
||||
list ip '10.2.0.4'
|
||||
|
||||
# Исключение для my_pc
|
||||
config xray-list
|
||||
option name 'my_pc_exc'
|
||||
option direction 'dst'
|
||||
option exclude '1'
|
||||
option parent 'my_pc' # Привязка к родителю
|
||||
list domain '2ip.ru'
|
||||
```
|
||||
|
||||
### Практический пример по выборочной маршрутизации
|
||||
|
||||
**Задача**: Направить трафик конкретного устройства (10.1.0.2) через прокси только при обращении к ресурсам Spotify, не затрагивая остальных клиентов сети.
|
||||
|
||||
+16
-22
@@ -5,36 +5,30 @@ config xray-manager 'main'
|
||||
option tproxy_mark '10'
|
||||
option client_mark '103'
|
||||
option timeout '1h'
|
||||
option route_local '1'
|
||||
option ipnet_dir '/tmp/.xray-manager/ipnet'
|
||||
option dnsmasq_dir '/tmp/.xray-manager/dnsmasq.d'
|
||||
option cache_dir '/tmp/.xray-manager/cache'
|
||||
option active_list '/tmp/.xray-manager/active_files'
|
||||
|
||||
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'
|
||||
list ip '192.0.0.0/24'
|
||||
list ip '192.0.2.0/24'
|
||||
list ip '198.18.0.0/15'
|
||||
list ip '198.51.100.0/24'
|
||||
list ip '203.0.113.0/24'
|
||||
list proxy_ip 'x.x.x.x'
|
||||
|
||||
config xray-list
|
||||
option name 'proxyserver'
|
||||
option name 'router'
|
||||
option direction 'out'
|
||||
option exclude '0'
|
||||
list ip '1.1.1.1'
|
||||
list ip '1.0.0.1'
|
||||
|
||||
config xray-list
|
||||
option name 'pc'
|
||||
option direction 'force_src'
|
||||
list ip '192.168.2.10'
|
||||
|
||||
config xray-list
|
||||
option name 'pc_exclude'
|
||||
option direction 'dst'
|
||||
option exclude '1'
|
||||
list ip ''
|
||||
option parent 'pc'
|
||||
list domain 'ifconfig.io'
|
||||
|
||||
config xray-list
|
||||
option name 'local'
|
||||
|
||||
+17
-7
@@ -1,26 +1,36 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=95
|
||||
START=99
|
||||
USE_PROCD=1
|
||||
|
||||
XRAYMANAGER_BIN="/opt/.xray-manager/xray-manager.sh"
|
||||
|
||||
extra_command "update" "Download and refresh remote lists"
|
||||
|
||||
start_service() {
|
||||
xray-manager start
|
||||
procd_open_instance
|
||||
procd_set_param command tail -f /dev/null
|
||||
"$XRAYMANAGER_BIN" start
|
||||
procd_open_instance "main"
|
||||
procd_set_param command /bin/sh -c "while true; do sleep 3600; done"
|
||||
procd_set_param respawn
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
xray-manager stop
|
||||
"$XRAYMANAGER_BIN" stop
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
xray-manager reload
|
||||
if procd_running "xray-manager" "main"; then
|
||||
"$XRAYMANAGER_BIN" reload
|
||||
else
|
||||
echo "xray-manager is not running"
|
||||
fi
|
||||
}
|
||||
|
||||
update() {
|
||||
xray-manager update
|
||||
if procd_running "xray-manager" "main"; then
|
||||
"$XRAYMANAGER_BIN" update
|
||||
else
|
||||
echo "xray-manager is not running"
|
||||
fi
|
||||
}
|
||||
+712
-233
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user