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:
155
home-configs/network/README.md
Normal file
155
home-configs/network/README.md
Normal 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
|
||||
```
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user