Files
ai-setup/home-configs/network/README.md
vitaly 805951d920 feat: мастер-скрипт setup.sh + перенос скриптов в scripts/
- все скрипты перенесены в scripts/ (ai-setup.sh, ru-bypass.sh, ks-off.sh, ks-on.sh)
- setup.sh — новый мастер-скрипт с меню: шаги 1-2 отделены от опций 3-4
- пояснения к GATEWAY и DEV при выборе пункта 2
- ai-setup.sh: SCRIPT_DIR поднят на уровень выше (/../) чтобы находить home-configs/
- tests/test_fixes.sh, test_isolated.sh: пути обновлены на scripts/ai-setup.sh
- QUICK_START.md, README.md, home-configs/network/README.md: пути обновлены

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:47:26 +03:00

159 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Сетевые скрипты
Скрипты для окружения с **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
```