feat: поддержка GATEWAY/DEV через env + README для network скриптов

- ru-bypass.sh: GATEWAY и DEV теперь переопределяются через env (${VAR:-default})
  Запуск на другой машине: sudo GATEWAY=10.0.0.1 DEV=eth0 bash ru-bypass.sh
- home-configs/network/README.md: объяснение как работает ru-bypass, kill switch,
  как запускать на разных машинах с разными сетевыми интерфейсами

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-07 08:56:58 +03:00
parent 5cb56124da
commit 9669f5ff15
2 changed files with 157 additions and 2 deletions

View File

@@ -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
```

View File

@@ -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"