diff --git a/home-configs/network/README.md b/home-configs/network/README.md new file mode 100644 index 0000000..126c944 --- /dev/null +++ b/home-configs/network/README.md @@ -0,0 +1,155 @@ +# Сетевые скрипты + +Скрипты для окружения с **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 +``` + +Если 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. При первом запуске: добавляет правило в `/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 ~/AI/study/ai-setup/home-configs/network/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 ~/AI/study/ai-setup/home-configs/network/ks-off.sh +``` + +Отключает UFW. После этого - отключить Amnezia через GUI. Трафик пойдёт напрямую через +провайдера (российский IP). + +**Важно:** выйди из Claude Code перед этим - сессия будет идти с другого IP. + +### ks-on.sh - восстановить kill switch + +```bash +sudo bash ~/AI/study/ai-setup/home-configs/network/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 ~/AI/study/ai-setup/tests/test_network.sh +``` diff --git a/home-configs/network/ru-bypass.sh b/home-configs/network/ru-bypass.sh index a65f7c5..ffe89b3 100644 --- a/home-configs/network/ru-bypass.sh +++ b/home-configs/network/ru-bypass.sh @@ -11,8 +11,8 @@ # # Использование: sudo bash ru-bypass.sh -GATEWAY="192.168.1.1" -DEV="wlp1s0" +GATEWAY="${GATEWAY:-192.168.1.1}" +DEV="${DEV:-wlp1s0}" SETNAME="ru-direct" CACHE="/var/cache/ru-delegations.txt" IPSET_SAVE="/etc/ipset.conf"