- Update ai-openrouter models in ai-setup.sh output and header - Fix effort persistence wording (statusbar -> launcher) - Unify KS_EXCEPTIONS -> KILL_SWITCH_EXCEPTIONS in docs and setup.sh prompt - Clarify menu item 7 only updates AI launchers - Add IPv6 note after ks-off.sh - Scope UFW before.rules insertion to *filter section Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
8.1 KiB
Сетевые скрипты
Скрипты для окружения с 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_<profile>.conf; сам ru-bypass.sh дополнительно
пишет root-конфиг /etc/ru-bypass.conf для systemd и NetworkManager dispatcher.
Как работает ru-bypass
Принцип
Amnezia поднимает интерфейс amn0 и захватывает весь трафик двумя широкими маршрутами:
0.0.0.0/1 dev amn0128.0.0.0/1 dev amn0
ru-bypass.sh добавляет тысячи более специфичных маршрутов для .ru IP-блоков через
локальный роутер (например 95.173.0.0/16 via <GATEWAY> dev <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 работает.
Что делает скрипт при запуске
- Скачивает список .ru IP-блоков из RIPE (кэш 24 часа в
/var/cache/ru-delegations.txt) - Создаёт/обновляет ipset
ru-direct(~11000 записей) - Сохраняет ipset в
/etc/ipset.conf - Добавляет маршруты через локальный роутер для всех .ru блоков
- Добавляет маршруты для RFC1918 диапазонов (
10/8,172.16/12,192.168/16) - нужно для*.loc - Добавляет встроенные исключения kill switch (
mattermost.eltex-co.ru,elph.eltex-co.ru,10.80.0.15) - Добавляет пользовательские исключения из
AMNEZIA_SERVERиKILL_SWITCH_EXCEPTIONS - Обновляет блок локальных Eltex-хостов в
/etc/hosts - Если задан
LOCAL_DNS, настраиваетresolvectlдля~locна интерфейсеDEV - Обновляет
/etc/ufw/before.rules, прямые iptables-правила и отключает IPv6 при активном kill switch - При первом запуске: устанавливает systemd service/timer и NetworkManager dispatcher
Сервисы (устанавливаются однократно)
ru-ipset-restore.service- запускается до UFW, восстанавливает ipset из файла. Нужен потому что UFW стартует рано и не знает об ipsetru-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 setup.sh
# выбери пункт 2) Сеть: ru-bypass + kill switch
Меню предложит значения из ip route show default, даст выбрать профиль (home, office,
$(hostname) и т.д.) и сохранит:
GATEWAY=...
DEV=...
LOCAL_DNS=...
AMNEZIA_SERVER=...
KILL_SWITCH_EXCEPTIONS=...
Прямой запуск скрипта
sudo bash scripts/ru-bypass.sh
Если env-переменные не переданы, скрипт сначала читает /etc/ru-bypass.conf, а потом
использует legacy-дефолты GATEWAY=192.168.1.1, DEV=wlp1s0.
Параметры для другой сети
Для другой сети передай параметры через env:
sudo GATEWAY=10.0.0.1 DEV=enp3s0 LOCAL_DNS=10.0.0.53 bash scripts/ru-bypass.sh
Чтобы узнать нужные значения:
ip route show default
# Пример: default via 10.0.0.1 dev enp3s0 proto dhcp
# ^^^^^^^ ^^^^^^
# GATEWAY DEV
Офисная машина
Если в офисе другой gateway и другой сетевой интерфейс - создай отдельный профиль через
пункт 2 в setup.sh или передай значения через env. Amnezia там тоже поднимает amn0,
так что остальное работает одинаково.
Пример (офис с проводным интерфейсом):
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
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
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
Проверка
# Эти команды без sudo:
ip route get 8.8.8.8 # -> dev amn0 (Google через VPN)
ip route get 95.173.136.1 # -> dev <DEV> (ozon.ru напрямую)
ip route get $(dig +short api.anthropic.com A | head -1) # -> dev amn0
# Полные тесты:
bash tests/test_network.sh