- все скрипты перенесены в 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>
159 lines
6.4 KiB
Markdown
159 lines
6.4 KiB
Markdown
# Сетевые скрипты
|
||
|
||
Скрипты для окружения с **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
|
||
```
|