# Сетевые скрипты Скрипты для окружения с **Amnezia VPN** и **UFW kill switch**. Главная идея: весь не-.ru трафик идёт через Amnezia, .ru сайты (ozon.ru, госуслуги и т.д.) - напрямую через провайдера с российским IP. Если Amnezia падает - не-.ru трафик блокируется UFW, .ru продолжает работать. --- ## Скрипты | Файл | Назначение | |---|---| | `ru-bypass.sh` | Основной - настраивает .ru маршруты и ipset | | `ks-off.sh` | Временно отключить UFW kill switch (доступ без VPN) | | `ks-on.sh` | Восстановить UFW kill switch | Все скрипты запускаются явно от root. Никакой автоустановки нет. --- ## Как работает ru-bypass ### Принцип Amnezia поднимает интерфейс `amn0` и захватывает весь трафик двумя широкими маршрутами: - `0.0.0.0/1 dev amn0` - `128.0.0.0/1 dev amn0` `ru-bypass.sh` добавляет тысячи **более специфичных** маршрутов для .ru IP-блоков через локальный роутер (например `95.173.0.0/16 via 192.168.1.1 dev wlp1s0`). Ядро Linux выбирает самый специфичный маршрут - .ru уходит напрямую, всё остальное - в amn0. ### UFW kill switch ``` default deny outgoing — запрещено всё по умолчанию allow out on amn0 — через Amnezia можно всё before.rules: ipset ru-direct — для .ru IP разрешён прямой выход на wlp1s0 before.rules: 10/8, 172.16/12, 192.168/16 — RFC1918 (*.loc) разрешён прямой выход на wlp1s0 ``` Если Amnezia падает: `amn0` исчезает, не-.ru трафик блокируется UFW. Маршруты .ru через wlp1s0 и правило UFW для ipset остаются - .ru работает. ### Что делает скрипт при запуске 1. Скачивает список .ru IP-блоков из RIPE (кэш 24 часа в `/var/cache/ru-delegations.txt`) 2. Создаёт/обновляет ipset `ru-direct` (~11000 записей) 3. Сохраняет ipset в `/etc/ipset.conf` 4. Добавляет маршруты через локальный роутер для всех .ru блоков 5. Добавляет маршруты для RFC1918 диапазонов (`10/8`, `172.16/12`, `192.168/16`) - нужно для `*.loc` 6. При первом запуске: добавляет правила в `/etc/ufw/before.rules` и устанавливает systemd сервисы ### Сервисы (устанавливаются однократно) - `ru-ipset-restore.service` - запускается **до UFW**, восстанавливает ipset из файла. Нужен потому что UFW стартует рано и не знает об ipset `ru-direct`. - `ru-bypass.service` - запускается после network-online, качает свежий RIPE-список и добавляет маршруты. - NM dispatcher `/etc/NetworkManager/dispatcher.d/99-ru-bypass` - автоматически перезапускает скрипт когда amn0 поднимается (Amnezia переподключилась). --- ## Запуск ### Первый запуск / обновление ```bash sudo bash scripts/ru-bypass.sh ``` Скрипт сам установит сервисы, добавит правило UFW и настроит NM dispatcher. ### Параметры для другой сети По умолчанию используется домашняя сеть (`GATEWAY=192.168.1.1`, `DEV=wlp1s0`). Для другой машины передай параметры через env: ```bash sudo GATEWAY=10.0.0.1 DEV=enp3s0 bash ru-bypass.sh ``` Чтобы узнать нужные значения: ```bash ip route show default # Пример: default via 10.0.0.1 dev enp3s0 proto dhcp # ^^^^^^^ ^^^^^^ # GATEWAY DEV ``` ### Офисная машина Если в офисе другой gateway и другой сетевой интерфейс - просто передай их через env. Amnezia там тоже поднимает `amn0`, так что остальное работает одинаково. Пример (офис с проводным интерфейсом): ```bash sudo GATEWAY=192.168.0.1 DEV=eth0 bash ru-bypass.sh ``` --- ## ks-off.sh и ks-on.sh Для ситуаций когда нужен временный доступ без VPN (сайты, которые блокируют нероссийские IP, например для оплаты или личного кабинета). ### ks-off.sh - отключить kill switch ```bash sudo bash scripts/ks-off.sh ``` Отключает UFW. После этого - отключить Amnezia через GUI. Трафик пойдёт напрямую через провайдера (российский IP). **Важно:** выйди из Claude Code перед этим - сессия будет идти с другого IP. ### ks-on.sh - восстановить kill switch ```bash sudo bash scripts/ks-on.sh ``` Сначала подключи Amnezia через GUI (дождись появления amn0), потом запускай. Иначе скрипт предупредит - без amn0 UFW сразу заблокирует весь интернет. ### Типичный workflow ``` # Нужен ru-сайт без VPN: 1. Выйти из Claude Code 2. sudo bash ks-off.sh 3. Отключить Amnezia в GUI # Возврат к нормальному режиму: 4. Подключить Amnezia в GUI (подождать amn0) 5. sudo bash ks-on.sh 6. Войти в Claude Code ``` --- ## Проверка ```bash # Эти команды без sudo: ip route get 8.8.8.8 # -> dev amn0 (Google через VPN) ip route get 95.173.136.1 # -> dev wlp1s0 (ozon.ru напрямую) ip route get $(dig +short api.anthropic.com A | head -1) # -> dev amn0 # Полные тесты: bash tests/test_network.sh ```