9

Гибкое проксирование определенных программ, доменов, адресов, пулов и до кучи (мой поиск закончен, привет Sing-Box)

В течение почти месяца искал простое легковесное решение, чтоб "отдал кому-нибудь, а тот просто запустил" наткнулся универсальную прокси-платформу Sing-Box (как раз NekoBox/Ray использует).

Мой путь

Все очень здорово и привлекательно, но использование CIDR для маршрутизации вылилось очень неприятными проблемами (пинг, что не надо туннелировалось и мало гибкости), правила маршрутизации же конкретных адресов являлись большой/длинной портянкой (в веб-морде роутера тяжело воспринимать, файлы конфигурации OVPN и WG раздувались)..

В погоне за гибкостью ушел искать десктопные решения (под Windows в моем случае).. ProxyCap — Заворачивание трафика определенных программ в прокси (на примере Guilded — аналог Discord) чрезвычайно не гибок, но с проксированием трафика определенного софта его хватает, хочешь чтобы только один из кучи, что установлены в системе, работал через внешний прокси сервер — пожалуйста, ограничивается все лишь использованием Shadowsocks, если нужна поддержка UDP конечно. Clash for Windows (CFW) (ядро Clash) заставлял себя настраивать, как и NekoBox (под Windows — NekoRay, ядро Sing-Box), но в первом случае идентичная настройка на разных машинах приводила к непредсказуемым результатам. NekoRay — круто, но так и не разобрался с автозапуском в режиме TUN, просто лень уже было.. и опять же.. давай настраивай его, но уже, спасибо, проще чем CFW..

Поиск большей информации по параметрам конфигов NekoBox, описание на Github — Qt based cross-platform GUI proxy configuration manager (backend: sing-box), привели сюда, и заставили думать зачем мне графический интерфейс, я хочу "мало весящий архив — распаковал — запустил — работает".

Так вот, мой конфиг Sing-Box (урезан в правилах конечно же 🫡)

Настроен под работу с VMess

{

"log": {

"level": "info",

"timestamp": true

},

"dns": {

"servers": [

{

"tag": "google",

"address": "tls://8.8.8.8"

},

{

"tag": "cloudflare",

"address": "https://1.1.1.1/dns-query"

},

{

"tag": "local",

"address": "223.5.5.5"

}

],

"rules": [

{

"outbound": "any",

"server": "local"

}

]

},

"inbounds": [

{

"type": "tun",

"inet4_address": "172.16.0.1/30",

"interface_name": "Sing-Box Kravenrus",

"auto_route": true,

"strict_route": true,

"sniff": true,

"domain_strategy": "prefer_ipv4"

}

],

"outbounds": [

{

"type": "direct",

"tag": "direct-out"

},

{

"type": "vmess",

"tag": "vmess-out",

"server": "109.120.129.231",

"server_port": 27589,

"uuid": "1f429211-0a5f-4e1c-a798-53aa709ac672",

"security": "auto",

"alter_id": 0,

"global_padding": false,

"authenticated_length": true,

"tls": {},

"packet_encoding": "",

"transport": {},

"multiplex": {}

},

{

"type": "dns",

"tag": "dns-out"

}

],

"route": {

"rules": [

{

"rule_set": "github-rule-set",

"outbound": "vmess-out"

},

{

"domain_suffix": [

"amd.com",

"apple.com"

],

"outbound": "vmess-out"

},

{

"protocol": "dns",

"outbound": "dns-out"

},

{

"domain_keyword": [

"whatismyip",

"openai",

"chatgpt"

],

"outbound": "vmess-out"

},

{

"process_name": [

"steam.exe",

"steamservice.exe",

"steamwebhelper.exe"

],

"outbound": "direct-out"

},

{

"process_name": [

"Guilded.exe",

"firefox.exe"

],

"outbound": "vmess-out"

},

{

"ip_cidr": [

"66.22.192.0/18"

],

"outbound": "vmess-out"

},

{

"port_range": [

"50000:65535"

],

"outbound": "vmess-out"

}

],

"rule_set": [

{

"type": "remote",

"tag": "github-rule-set",

"format": "binary",

"url": "https://github.com/.../rule-set.srs",

"download_detour": "vmess-out"

}

],

"auto_detect_interface": true

},

"experimental": {

"cache_file": {

"enabled": true

}

}

}

Описание параметров конфигурации

Конфигурационный файл Sing-Box представляет собой JSON-документ, в котором указаны параметры настройки логирования, DNS-серверов, входящих и исходящих соединений, правил маршрутизации и экспериментальных функций. Более подробно про конфигурацию описано здесь. Вот что значат мои параметры:

Логирование (log)

  • level: Уровень логирования. В данном случае "info" — для записи информационных сообщений. Возможны значения: debug, info, warn, error, fatal.

  • timestamp: Если true, то в логе будет включено время записи каждого сообщения.

DNS (dns)

  • servers: Список DNS-серверов, которые будут использоваться.

    • tag: Метка для сервера, чтобы его можно было идентифицировать.

    • address: Адрес DNS-сервера, может использовать различные протоколы (например, tls://8.8.8.8 или https://1.1.1.1/dns-query).

  • rules: Определяет правила выбора сервера DNS для различных типов трафика.

    • outbound: Задает тип исходящего соединения, для которого будет использован сервер DNS.

    • server: Выбранный сервер DNS, указанный по tag в списке серверов.

Входящие подключения (inbounds)

  • type: Тип входящего подключения. В данном случае это tun (виртуальный туннельный интерфейс).

  • inet4_address: IPv4-адрес, который будет использоваться для туннеля.

  • interface_name: Имя интерфейса, под которым будет создан туннель.

  • auto_route: Автоматически добавляет маршруты для трафика.

  • strict_route: Определяет, нужно ли строго следовать заданным маршрутам.

  • sniff: Если включено, Sing-Box будет пытаться анализировать (сниффить) трафик, чтобы определить его тип.

  • domain_strategy: Стратегия выбора IP-адреса. "prefer_ipv4" означает, что будет предпочтение отдаваться IPv4-адресам.

Исходящие подключения (outbounds)

  • type: Тип исходящего подключения. Возможные значения включают:

    • direct: Для прямого подключения.

    • vmess: Протокол VMess, используемый для соединений через серверы.

    • dns: Используется для выхода на DNS-сервисы.

  • tag: Метка для идентификации исходящего подключения.

  • server и server_port: IP-адрес и порт сервера, к которому будет подключаться клиент (для vmess).

  • uuid: Уникальный идентификатор пользователя, необходимый для VMess.

  • security: Уровень шифрования (например, "auto").

  • alter_id: Настройка дополнительного шифрования в VMess (0 означает отсутствие дополнительных идентификаторов).

  • global_padding и authenticated_length: Опции шифрования и целостности пакетов.

  • tls и packet_encoding: Параметры для использования TLS и кодирования пакетов.

  • transport и multiplex: Опции транспорта и мультиплексирования.

Маршрутизация (route)

  • rules: Список правил маршрутизации:

    • rule_set: Название набора правил, который будет использован.

    • outbound: Исходящее подключение для трафика, соответствующего данному правилу.

    • domain_suffix: Трафик к доменам с определенными суффиксами будет направлен через указанный outbound.

    • protocol: Протокол, для которого применяется правило.

    • domain_keyword и process_name: Позволяет указать ключевые слова или названия процессов для фильтрации.

    • ip_cidr и port_range: Указывает диапазоны IP-адресов и портов, на которые применяется правило.

  • rule_set: Задает дополнительные настройки для набора правил, например, возможность скачивания с удаленного ресурса (url) и использование определенного исходящего канала для загрузки (download_detour).

  • auto_detect_interface: Опция автоматического обнаружения сетевого интерфейса.

Экспериментальные функции (experimental)

  • cache_file: Настройки кэширования.

    • enabled: Если true, кэширование включено для улучшения производительности, исключает скачивание набора правил, если удаленный набор не был изменен.

Эти настройки позволяют гибко настраивать поведение Sing-Box в соответствии с потребностями сети и требованиями безопасности.

Подробное описание моих правил (для общего понимания)

Правила в разделе rules определяют, каким образом будет маршрутизироваться трафик в зависимости от условий и характеристик соединений. Вот к какому поведению приведут указанные мною правила:

Использование удаленного набора правил (rule_set)

Трафик, соответствующий набору правил из файла по URL, будет перенаправляться через выход vmess-out. Этот файл может содержать динамически обновляемые правила для более гибкого и актуального управления трафиком.

Маршрутизация по доменным суффиксам

Все запросы к доменам с суффиксами amd.com и apple.com будут отправляться через vmess-out. Это может быть полезно для безопасного или анонимного доступа к этим ресурсам.

DNS-запросы

Весь трафик, использующий протокол dns, будет направляться через исходящее соединение dns-out, что обеспечивает отдельный канал для запросов к DNS-серверам.

Маршрутизация по ключевым словам доменов

Любые запросы к доменам, содержащим ключевые слова whatismyip, openai, и chatgpt, будут отправляться через vmess-out. Это позволит обеспечить дополнительную защиту или конфиденциальность для доступа к этим сервисам.

Маршрутизация по названию процессов:

Запросы от процессов steam.exe, steamservice.exe, и steamwebhelper.exe будут отправлены напрямую (direct-out), что может сократить задержки при использовании Steam.

Запросы от процессов Guilded.exe и firefox.exe будут направляться через vmess-out, обеспечивая безопасность или проксирование для этих приложений.

Маршрутизация по диапазону IP-адресов (ip_cidr)

Трафик, направленный к IP-адресам в диапазоне 66.22.192.0/18, будет отправляться через vmess-out. Это может использоваться для маршрутизации специфического трафика, связанного с этим диапазоном.

Маршрутизация по диапазону портов (port_range)

Трафик на порты в диапазоне 50000:65535 будет направляться через vmess-out, что может быть полезно для приложений, использующих высокие порты (например, игровые или P2P-сервисы, голосовые каналы).

В целом, данные правила создают избирательную маршрутизацию для обеспечения безопасности, проксирования доступа к определенным сервисам и выполнения DNS-запросов через специальное соединение.

Про распространение знакомым

Для начала задумался над простотой старта, создал .bat для запуска от имени Администратора

@Echo off

reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1 /f

cd /d "%~dp0"

set "config_file="

for %%F in (config-vmess-*.json) do (

set "config_file=%%F"

goto :found

)

:found

if defined config_file (

start "Sing-Box" sing-box.exe run -c "%config_file%"

) else (

echo Файл не найден!

)

Для корректного отображения цвета, скрипт изменяет ключ VirtualTerminalLevel на единицу. Далее ищет конфиг по шаблону (поскольку я передаю пользователям его в виде config-vmess-uuid.json) и запускает Sing-Box с первым найденным конфигом в новом окне.

Дабы не объяснять что откуда скачать, что куда скопировать было решено отправлять знакомым только их UUID для дальнейшей генерации архива с исполняемым файлом Sing-Box и их файлом конфигурации (с внесенным изменением соответствующего поля UUID на цифры пользователя), создал страницу с формой.

Далее от пользователя требуется как раз таки только скачать и распаковать архив, и запустить run.cmd от имени Администратора.

Итог

Ну а итоги те же, что и были ожидаемы исходя из правил :)

Жаль, что есть и проблемы, на двух-трех машинах из 15-ти либо не поднимается TUN, либо трафик не проксируется должным образом, либо не работает доступ напрямую, и все это из-за настройки пользователем своей операционной системы, а именно сетевых настроек, если человек туда не лез, то и проблем не возникало..

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества