Files
ai-setup/home-configs/network/README.md
vitaly 66a040cc03 feat: RFC1918 (*.loc) напрямую + динамический пример IP в выводе
- ru-bypass.sh: маршруты для 10/8, 172.16/12, 192.168/16 через локальный роутер
- ru-bypass.sh: UFW правила для тех же диапазонов (однократно, before.rules)
- ru-bypass.sh: пример IP в конце теперь резолвится из ya.ru динамически
- README.md: описание RFC1918 bypass в разделах про UFW и про шаги скрипта

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

159 lines
6.5 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 ~/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
```