Сегодня вышла версия sing-box 1.14.0-alpha.10. Автор принял мой PR по добавлению нового правила package_name_regex (работает только на Android). Это позволяет на Android искать пакеты регуляркой (раньше только перечислять отдельные имена), но что еще важнее - позволяет ловить правилами приложения, которые принудительно лезут в tun, хотя их туда никто лезть не просил.
Для чего это нужно? Мы включаем VPN для всех приложений (можно не включать полную блокировку прямых на уровне ОС). Уже в конфиге через route rules делаем, чтобы все российские приложения всегда шли в direct, чтобы они не могли использовать прокси. И вроде бы всё хорошо, но есть проблема. Если приложение принудительно выбирает интерфейс, то правила package_name (по имени пакета) не работают, потому что из-за бага или недоработки в Android VPN-приложение именно в этом случае (принудительный выбор интерфейса) не может определить UID владельца соединения. И вот это новое правило package_name_regex теперь может поймать такие случаи и, например, либо заблокировать доступ (block), либо пустить в direct.
Правило должно быть такое:
{"package_name_regex": [".+"], "invert": true, "outbound": "block"}
А просто новое правило можно использовать вот так (пускаем все российские приложения напрямую без прокси):
{"package_name_regex": ["^ru\\."], "outbound": "direct"}
Issue: Feature request: ability to match connections with unidentified package name in routing rules · Issue #4009 · SagerNet/sing-box · GitHub
PR: Add package_name_regex rule item by hdrover · Pull Request #4013 · SagerNet/sing-box · GitHub
