Набор правил Little Snitch (.lsrules) и PAC-файла для Firefox, который разделяет сетевой трафик приложений macOS по географии назначения. Цель — не давать VPN-IP засветиться на российских ресурсах и одновременно не выпускать браузер с российским IP за пределы РФ.
Ключевые слова: VPN split-tunneling macOS · раздельное туннелирование по странам · Little Snitch правила Россия · Firefox только РФ · anti-detect для VPN · утечка VPN-IP · geoip RU для macOS · PAC-файл для Firefox ·
.lsrulesRussia bypass · блокировка российских IP в Safari · split по GeoIP · Firefox RU-only профиль · Xray/Happ/v2ray split-tunnel macOS.
Типовой сценарий — пользователь живёт в России и использует VPN (Xray, V2Ray, Hiddify, Happ Plus, WireGuard, OpenVPN) для доступа к заблокированным ресурсам. Возникает два противоположных риска:
- Утечка VPN-IP на российский сайт. Вы зашли в Госуслуги / банк / маркетплейс с иностранного IP → триггер «подозрительный вход», блокировка аккаунта, SMS-код, вопросы службе безопасности.
- Российский IP уходит на зарубежный ресурс. Когда сайт отдаёт рекламу, аналитику, шрифты, антифрод-скрипты через зарубежные CDN, эти хвосты идут с вашего российского IP, пока VPN неактивен или настроен на bypass.
Эти правила решают обе задачи на уровне приложений, параллельно с VPN-клиентом:
| Приложение | Разрешённые назначения |
|---|---|
| Firefox | Только российские IP + локалка + инфраструктура обновлений (Mozilla, uBlock-источники). |
| Диск-О (Mail.ru Cloud) | Только российские IP + локалка. |
| Safari | Всё, кроме российских IP (всегда через VPN). |
| Chrome | Всё, кроме российских IP (всегда через VPN). |
Защита — двухслойная. Little Snitch фильтрует на уровне IP-пакетов (использует базу российских CIDR-диапазонов). Firefox дополнительно имеет PAC-файл, который режет по TLD и домену ещё до резолвинга. Если какой-то слой пропустит — второй подстрахует.
Правила сами по себе VPN-туннель не обходят — они только говорят «можно/нельзя». Чтобы российский трафик Firefox реально шёл напрямую (а не через VPN-сервер, который обычно блокирует исходящие на РФ для анти-детекта), нужно одновременно настроить split-tunneling в самом VPN-клиенте:
- Happ Plus / Hiddify / V2Box / Streisand / FoXray — routing rules:
geoip:ru→ outbounddirect. - Xray/V2Ray (runtime-конфиг):
routing.rules = [{ "outboundTag":"direct", "ip":["geoip:ru"] }]+domainStrategy:"IPIfNonMatch". - WireGuard: исключить RU-CIDR из
AllowedIPs(либо использоватьPostUp-скрипты сroute/pf).
Иначе DIRECT в PAC означает «без HTTP-прокси», но пакет всё равно уйдёт в utun0 → к VPN-серверу → получит блок → в Firefox PR_END_OF_FILE_ERROR.
Подробная пошаговая инструкция (Firefox-профиль, about:config, установка PAC, установка .lsrules, проверка утечек): firefox-ru-only.md.
| Файл | Назначение |
|---|---|
| firefox-ru-only.md | Пошаговая инструкция: Firefox-профиль, about:config (13 параметров против утечек WebRTC/DoH/QUIC), PAC, Little Snitch, проверка. |
| generate-ls-ru-rules.sh | Bash-скрипт: из merged-ru-cidrs-*.txt генерирует ru-only.lsrules + no-ru.lsrules. |
| ru-only.lsrules | Little Snitch Rule Group: Firefox + Диск-О ⇒ только РФ + локалка + инфраструктура Firefox/uBlock. |
| no-ru.lsrules | Little Snitch Rule Group: Safari + Chrome ⇒ заблокированы российские IP. |
| ru-whitelist.pac.example | Шаблон PAC для Firefox. Российские TLD + явный список RU-доменов на нероссийских TLD (vk.com, timeweb.cloud, mozilla.org и т.п.) → DIRECT; всё остальное → блокировка через PROXY 127.0.0.1:1. |
Приватная копия ru-whitelist.pac (с персональными доменами) и промежуточные merged-ru-cidrs-*.txt не коммитятся — см. .gitignore.
Little Snitch → Rules → + → Subscribe to Rule Group… — вставить raw-URL:
https://raw.githubusercontent.com/Dabrogelatel/app-ru-split/main/ru-only.lsrules
https://raw.githubusercontent.com/Dabrogelatel/app-ru-split/main/no-ru.lsrules
Важно: снять галочку Disable new allow rules, иначе свежеприлетевшие allow-правила окажутся выключенными.
Little Snitch сам периодически подтягивает обновления — как только в репозиторий приедет новый коммит со свежим CIDR-списком, правила у подписчиков обновятся автоматически.
Файл ru-whitelist.pac (скопировать из .example и дополнить своими доменами):
Firefox → Settings → Network Settings → Settings… → Automatic proxy configuration URL → указать file:///полный/путь/к/ru-whitelist.pac.
Логика PAC:
- Локальные адреса (
127.0.0.0/8,10/8,172.16/12,192.168/16) →DIRECT. - Прямой IPv4 в URL (без домена) → блокировка (нельзя определить страну).
- Российские TLD (
.ru,.su,.рф,.москва,.moscow,.рус,.дети,.tatar) →DIRECT. - Список RU-сервисов на нероссийских TLD (
vk.com,timeweb.cloud,mozilla.orgи т.д.) →DIRECT. - Всё остальное →
PROXY 127.0.0.1:1(несуществующий порт = блокировка до установки соединения).
Свои домены добавляйте в локальный ru-whitelist.pac (не в .example) — локальная копия в .gitignore, ваши персональные домены не уйдут в публичный репозиторий.
В Firefox ошибка PR_END_OF_FILE_ERROR на российском сайте.
Скорее всего на клиенте VPN нет split-tunneling для geoip:ru. Весь трафик уходит в туннель, VPN-сервер блокирует исходящие на РФ (анти-детект) — Firefox видит обрыв TLS. Настройте в VPN-клиенте bypass для geoip:ru → direct. См. раздел «Как это работает в связке с VPN-клиентом».
Safari/Chrome не открывают российский сайт, хотя VPN работает.
Это нормально и запланировано: в no-ru.lsrules для них прописан deny на RU-CIDR. Российские сайты открывайте в Firefox (у которого правила наоборот: только РФ).
Мой домен на не-.ru TLD с российским IP заблокирован.
Если IP домена в RU-CIDR — Little Snitch его пропустит. Если нет (например, хостится на зарубежном VPS, но это российский сервис) — добавьте его в локальный ru-whitelist.pac (PAC проверяет по домену) и в локальную Rule Group Little Snitch (allow remote-domain).
Зачем блокировать прямые IP в URL?
Если кто-то обращается по http://1.2.3.4/, PAC не может определить страну — блокируем. Редкий кейс, обычно это трекеры/рекламные пиксели.
Правила и скрипт — MIT. Issues и PR приветствуются.