Files
ai-setup/home-configs/network
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
..

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

Скрипты для окружения с 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 setup.sh
# выбери пункт 2) Сеть: ru-bypass + kill switch

Меню предложит значения из ip route show default, даст выбрать профиль (home, office, $(hostname) и т.д.) и сохранит:

GATEWAY=...
DEV=...
LOCAL_DNS=...
AMNEZIA_SERVER=...
KILL_SWITCH_EXCEPTIONS=...

Прямой запуск скрипта

sudo bash scripts/ru-bypass.sh

Если env-переменные не переданы, скрипт сначала читает /etc/ru-bypass.conf, а потом использует legacy-дефолты GATEWAY=192.168.1.1, DEV=wlp1s0.

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

Для другой сети передай параметры через env:

sudo GATEWAY=10.0.0.1 DEV=enp3s0 LOCAL_DNS=10.0.0.53 bash scripts/ru-bypass.sh

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

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

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

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

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

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

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

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 <DEV> (ozon.ru напрямую)
ip route get $(dig +short api.anthropic.com A | head -1)  # -> dev amn0

# Полные тесты:
bash tests/test_network.sh