Files
vitaly 805951d920 feat: мастер-скрипт setup.sh + перенос скриптов в scripts/
- все скрипты перенесены в 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>
2026-06-07 10:47:26 +03:00

6.4 KiB
Raw Permalink Blame History

Сетевые скрипты

Скрипты для окружения с 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 переподключилась).

Запуск

Первый запуск / обновление

sudo bash scripts/ru-bypass.sh

Скрипт сам установит сервисы, добавит правило UFW и настроит NM dispatcher.

Параметры для другой сети

По умолчанию используется домашняя сеть (GATEWAY=192.168.1.1, DEV=wlp1s0). Для другой машины передай параметры через env:

sudo GATEWAY=10.0.0.1 DEV=enp3s0 bash ru-bypass.sh

Чтобы узнать нужные значения:

ip route show default
# Пример: default via 10.0.0.1 dev enp3s0 proto dhcp
#                      ^^^^^^^      ^^^^^^
#                      GATEWAY      DEV

Офисная машина

Если в офисе другой gateway и другой сетевой интерфейс - просто передай их через env. Amnezia там тоже поднимает amn0, так что остальное работает одинаково.

Пример (офис с проводным интерфейсом):

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

sudo bash scripts/ks-off.sh

Отключает UFW. После этого - отключить Amnezia через GUI. Трафик пойдёт напрямую через провайдера (российский IP).

Важно: выйди из Claude Code перед этим - сессия будет идти с другого IP.

ks-on.sh - восстановить kill switch

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

Проверка

# Эти команды без 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