Files
ai-setup/home-configs/network/README.md
vitaly 38b5f2710c docs: sync README/QUICK_START/EFFORT_MAPPING with current code
- Update ai-openrouter models in ai-setup.sh output and header
- Fix effort persistence wording (statusbar -> launcher)
- Unify KS_EXCEPTIONS -> KILL_SWITCH_EXCEPTIONS in docs and setup.sh prompt
- Clarify menu item 7 only updates AI launchers
- Add IPv6 note after ks-off.sh
- Scope UFW before.rules insertion to *filter section

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 09:16:37 +03:00

189 lines
8.1 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. Обычно их дергает `setup.sh` через `sudo` и сохраняет
профиль в `~/.config/ai-setup/network_<profile>.conf`; сам `ru-bypass.sh` дополнительно
пишет root-конфиг `/etc/ru-bypass.conf` для systemd и NetworkManager dispatcher.
---
## Как работает 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 <GATEWAY> dev <DEV>`). Ядро Linux
выбирает самый специфичный маршрут - .ru уходит напрямую, всё остальное - в amn0.
### UFW kill switch
```
default deny outgoing — запрещено всё по умолчанию
allow out on amn0 — через Amnezia можно всё
before.rules: ipset ru-direct — для .ru IP разрешён прямой выход на DEV
before.rules: 10/8, 172.16/12,
192.168/16 — RFC1918 (*.loc) разрешён прямой выход на DEV
```
Если Amnezia падает: `amn0` исчезает, не-.ru трафик блокируется UFW. Маршруты .ru
через `DEV` и правило 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. Добавляет встроенные исключения kill switch (`mattermost.eltex-co.ru`, `elph.eltex-co.ru`, `10.80.0.15`)
7. Добавляет пользовательские исключения из `AMNEZIA_SERVER` и `KILL_SWITCH_EXCEPTIONS`
8. Обновляет блок локальных Eltex-хостов в `/etc/hosts`
9. Если задан `LOCAL_DNS`, настраивает `resolvectl` для `~loc` на интерфейсе `DEV`
10. Обновляет `/etc/ufw/before.rules`, прямые iptables-правила и отключает IPv6 при активном kill switch
11. При первом запуске: устанавливает systemd service/timer и NetworkManager dispatcher
### Сервисы (устанавливаются однократно)
- `ru-ipset-restore.service` - запускается **до UFW**, восстанавливает ipset из файла.
Нужен потому что UFW стартует рано и не знает об ipset `ru-direct`.
- `ru-bypass.service` - запускается после network-online, качает свежий RIPE-список и
добавляет маршруты.
- `ru-bypass.timer` - ежедневно запускает `ru-bypass.service` для обновления RIPE-списка.
- NM dispatcher `/etc/NetworkManager/dispatcher.d/99-ru-bypass` - автоматически перезапускает
скрипт когда amn0 поднимается (Amnezia переподключилась).
---
## Запуск
### Первый запуск / обновление через меню
```bash
bash setup.sh
# выбери пункт 2) Сеть: ru-bypass + kill switch
```
Меню предложит значения из `ip route show default`, даст выбрать профиль (`home`, `office`,
`$(hostname)` и т.д.) и сохранит:
```bash
GATEWAY=...
DEV=...
LOCAL_DNS=...
AMNEZIA_SERVER=...
KILL_SWITCH_EXCEPTIONS=...
```
### Прямой запуск скрипта
```bash
sudo bash scripts/ru-bypass.sh
```
Если env-переменные не переданы, скрипт сначала читает `/etc/ru-bypass.conf`, а потом
использует legacy-дефолты `GATEWAY=192.168.1.1`, `DEV=wlp1s0`.
### Параметры для другой сети
Для другой сети передай параметры через env:
```bash
sudo GATEWAY=10.0.0.1 DEV=enp3s0 LOCAL_DNS=10.0.0.53 bash scripts/ru-bypass.sh
```
Чтобы узнать нужные значения:
```bash
ip route show default
# Пример: default via 10.0.0.1 dev enp3s0 proto dhcp
# ^^^^^^^ ^^^^^^
# GATEWAY DEV
```
### Офисная машина
Если в офисе другой gateway и другой сетевой интерфейс - создай отдельный профиль через
пункт 2 в `setup.sh` или передай значения через env. Amnezia там тоже поднимает `amn0`,
так что остальное работает одинаково.
Пример (офис с проводным интерфейсом):
```bash
sudo GATEWAY=192.168.0.1 DEV=eth0 LOCAL_DNS=192.168.0.53 bash scripts/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).
**Примечание:** IPv6 остаётся отключённым после `ks-off.sh` (если он был выключен `ks-on.sh`
или `ru-bypass.sh`). Он восстановится автоматически при следующем `ks-on.sh` или перезагрузке.
**Важно:** выйди из 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 <DEV> (ozon.ru напрямую)
ip route get $(dig +short api.anthropic.com A | head -1) # -> dev amn0
# Полные тесты:
bash tests/test_network.sh
```