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
|
# Использование: sudo bash ru-bypass.sh
|
||||||
|
|
||||||
GATEWAY="192.168.1.1"
|
GATEWAY="${GATEWAY:-192.168.1.1}"
|
||||||
DEV="wlp1s0"
|
DEV="${DEV:-wlp1s0}"
|
||||||
SETNAME="ru-direct"
|
SETNAME="ru-direct"
|
||||||
CACHE="/var/cache/ru-delegations.txt"
|
CACHE="/var/cache/ru-delegations.txt"
|
||||||
IPSET_SAVE="/etc/ipset.conf"
|
IPSET_SAVE="/etc/ipset.conf"
|
||||||
|
|||||||
Reference in New Issue
Block a user