# Сетевые скрипты Скрипты для окружения с **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. Обычно их дергает `setup.sh` через `sudo` и сохраняет профиль в `~/.config/ai-setup/network_.conf`; сам `ru-bypass.sh` дополнительно пишет root-конфиг `/etc/ru-bypass.conf` для systemd и NetworkManager dispatcher. --- ## Как работает 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 dev `). Ядро Linux выбирает самый специфичный маршрут - .ru уходит напрямую, всё остальное - в amn0. ### UFW kill switch ``` default deny outgoing — запрещено всё по умолчанию allow out on amn0 — через Amnezia можно всё before.rules: ipset ru-direct — для .ru IP разрешён прямой выход на DEV before.rules: 10/8, 172.16/12, 192.168/16 — RFC1918 (*.loc) разрешён прямой выход на DEV ``` Если Amnezia падает: `amn0` исчезает, не-.ru трафик блокируется UFW. Маршруты .ru через `DEV` и правило 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. Добавляет встроенные исключения kill switch (`mattermost.eltex-co.ru`, `elph.eltex-co.ru`, `10.80.0.15`) 7. Добавляет пользовательские исключения из `AMNEZIA_SERVER` и `KILL_SWITCH_EXCEPTIONS` 8. Обновляет блок локальных Eltex-хостов в `/etc/hosts` 9. Если задан `LOCAL_DNS`, настраивает `resolvectl` для `~loc` на интерфейсе `DEV` 10. Обновляет `/etc/ufw/before.rules`, прямые iptables-правила и отключает IPv6 при активном kill switch 11. При первом запуске: устанавливает systemd service/timer и NetworkManager dispatcher ### Сервисы (устанавливаются однократно) - `ru-ipset-restore.service` - запускается **до UFW**, восстанавливает ipset из файла. Нужен потому что UFW стартует рано и не знает об ipset `ru-direct`. - `ru-bypass.service` - запускается после network-online, качает свежий RIPE-список и добавляет маршруты. - `ru-bypass.timer` - ежедневно запускает `ru-bypass.service` для обновления RIPE-списка. - NM dispatcher `/etc/NetworkManager/dispatcher.d/99-ru-bypass` - автоматически перезапускает скрипт когда amn0 поднимается (Amnezia переподключилась). --- ## Запуск ### Первый запуск / обновление через меню ```bash bash setup.sh # выбери пункт 2) Сеть: ru-bypass + kill switch ``` Меню предложит значения из `ip route show default`, даст выбрать профиль (`home`, `office`, `$(hostname)` и т.д.) и сохранит: ```bash GATEWAY=... DEV=... LOCAL_DNS=... AMNEZIA_SERVER=... KILL_SWITCH_EXCEPTIONS=... ``` ### Прямой запуск скрипта ```bash sudo bash scripts/ru-bypass.sh ``` Если env-переменные не переданы, скрипт сначала читает `/etc/ru-bypass.conf`, а потом использует legacy-дефолты `GATEWAY=192.168.1.1`, `DEV=wlp1s0`. ### Параметры для другой сети Для другой сети передай параметры через env: ```bash sudo GATEWAY=10.0.0.1 DEV=enp3s0 LOCAL_DNS=10.0.0.53 bash scripts/ru-bypass.sh ``` Чтобы узнать нужные значения: ```bash ip route show default # Пример: default via 10.0.0.1 dev enp3s0 proto dhcp # ^^^^^^^ ^^^^^^ # GATEWAY DEV ``` ### Офисная машина Если в офисе другой gateway и другой сетевой интерфейс - создай отдельный профиль через пункт 2 в `setup.sh` или передай значения через env. Amnezia там тоже поднимает `amn0`, так что остальное работает одинаково. Пример (офис с проводным интерфейсом): ```bash sudo GATEWAY=192.168.0.1 DEV=eth0 LOCAL_DNS=192.168.0.53 bash scripts/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). **Примечание:** IPv6 остаётся отключённым после `ks-off.sh` (если он был выключен `ks-on.sh` или `ru-bypass.sh`). Он восстановится автоматически при следующем `ks-on.sh` или перезагрузке. **Важно:** выйди из 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 (ozon.ru напрямую) ip route get $(dig +short api.anthropic.com A | head -1) # -> dev amn0 # Полные тесты: bash tests/test_network.sh ```