Виталий Никитенко d2bbcc7e33 fix: kill switch — UFW before.rules с актуальным DEV, прямые iptables, /etc/hosts для *.eltex.loc и elph
Три корневые проблемы и их исправления:

1. MANAGE_BUILTINS=no в /etc/default/ufw — цепочка ufw-before-output
   не вызывалась из OUTPUT, правила before.rules не применялись.
   → автофикс no→yes + прямые правила iptables (не зависят от UFW).

2. UFW-правила создавались однократно по маркеру — при смене DEV
   (wlp1s0→enp4s0) продолжали ссылаться на старый интерфейс.
   → теперь при каждом запуске удаляются и пересоздаются с актуальным DEV.

3. DNS через VPN для локальных доменов возвращал внешние IP вместо
   внутренних (RFC1918) — трафик уходил в VPN и не достигал серверов.
   → /etc/hosts с фиксированными IP для *.eltex.loc, mattermost, elph.
   → замена dig +short на getent hosts (уважает /etc/hosts).

Добавлены built-in KILL_SWITCH_EXCEPTIONS:
  mattermost.eltex-co.ru elph.eltex-co.ru 10.80.0.15

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 12:44:20 +03:00

AI Setup

Набор shell-скриптов для установки AI coding CLI и настройки сети с Amnezia VPN.

Точка входа - setup.sh (мастер-скрипт с меню). Он вызывает нужный скрипт из scripts/.

Структура репозитория

setup.sh                         # мастер-скрипт с меню
scripts/
├── ai-setup.sh                  # устанавливает AI-инструменты в ~/.local/bin
├── ru-bypass.sh                 # .ru трафик напрямую, kill switch для остального
├── ks-off.sh                    # временно отключить kill switch
└── ks-on.sh                     # восстановить kill switch
home-configs/
├── GLOBAL_RULES.md              # глобальные правила для всех агентов
├── claude/
│   └── skills/                  # кастомные скиллы для Claude Code (и Gemini)
├── network/
│   └── README.md                # подробная документация по сетевой настройке
├── vless/
│   └── servers.conf             # список VLESS-серверов для прокси
└── proxychains/
    └── proxychains-xray.conf    # конфиг proxychains (SOCKS5 через xray)
tests/
├── test_fixes.sh                # юнит-тесты структуры ai-setup.sh
└── test_network.sh              # тесты маршрутизации
test_isolated.sh                 # проверка автоустановки ai-gpt и ai-kimi

Установка

Запускать от обычного пользователя, не через sudo:

bash setup.sh

Мастер-скрипт показывает меню:

Шаги для новой машины:
  1) AI-инструменты
  2) Сеть: ru-bypass + kill switch

Дополнительно (по необходимости):
  3) Отключить kill switch
  4) Включить kill switch
  5) Статус
  6) Проверить сеть

После установки, если shell ещё не видит новые команды:

exec bash

Сеть: ru-bypass + kill switch

Полная документация: home-configs/network/README.md

Что это

  • .ru сайты (ozon.ru, госуслуги и др.) - идут напрямую через провайдера с российским IP
  • *.loc офисные адреса - тоже напрямую через локальный роутер
  • Всё остальное - только через Amnezia VPN
  • Если Amnezia упала - не-.ru трафик блокируется UFW (kill switch), .ru и *.loc продолжают работать

Как работает

Amnezia захватывает весь трафик двумя широкими маршрутами (0.0.0.0/1 и 128.0.0.0/1 через amn0). ru-bypass.sh добавляет тысячи более специфичных маршрутов для .ru IP-блоков через локальный роутер. Ядро Linux выбирает самый специфичный маршрут - .ru идёт напрямую, остальное в amn0.

UFW настроен так:

default deny outgoing        — запрещено всё по умолчанию
allow out on amn0            — через Amnezia можно всё
before.rules: ipset ru-direct — для .ru IP разрешён прямой выход
before.rules: RFC1918         — 10/8, 172.16/12, 192.168/16 тоже напрямую (*.loc)

Первый запуск

Через меню (bash setup.sh → пункт 2) - он автоматически определит GATEWAY и DEV из ip route show default и сохранит их в ~/.config/ai-setup/network_$(hostname).conf.

Или напрямую:

sudo bash scripts/ru-bypass.sh
# для другой сети:
sudo GATEWAY=10.0.0.1 DEV=eth0 bash scripts/ru-bypass.sh

Что устанавливается при первом запуске

  • ipset (если не установлен)
  • Скрипт копируется в /usr/local/bin/ru-bypass.sh
  • ru-ipset-restore.service - восстанавливает ipset из файла до старта UFW при загрузке
  • ru-bypass.service - обновляет RIPE-список и маршруты после network-online
  • NM dispatcher /etc/NetworkManager/dispatcher.d/99-ru-bypass - перезапускает скрипт при поднятии amn0

При каждом запуске:

  • Скачивает список .ru IP-блоков из RIPE (кэш 24ч, /var/cache/ru-delegations.txt)
  • Обновляет ipset ru-direct (~11000 записей)
  • Сохраняет ipset в /etc/ipset.conf для восстановления после ребута
  • Добавляет маршруты через GATEWAY для всех .ru блоков и RFC1918

ks-off / ks-on

Для ситуаций когда нужен временный доступ без VPN (сайты, блокирующие нероссийский IP):

# 1. Выйти из Claude Code
# 2. Отключить kill switch
sudo bash scripts/ks-off.sh
# 3. Отключить Amnezia в GUI

# Возврат:
# 4. Подключить Amnezia в GUI (дождаться amn0)
sudo bash scripts/ks-on.sh
# 5. Войти в Claude Code

Проверка

ip route get 8.8.8.8        # -> dev amn0  (Google через VPN)
ip route get 77.88.8.8      # -> dev wlp1s0 (ya.ru напрямую)
ip route get 10.10.0.1      # -> dev wlp1s0 (*.loc напрямую)
bash tests/test_network.sh  # полные тесты

AI инструменты

scripts/ai-setup.sh устанавливает и настраивает все AI CLI.

После запуска генерируются или обновляются в ~/.local/bin:

  • ai-claude - Claude Code (Anthropic API)
  • ai-gpt - нативный OpenAI Codex CLI
  • ai-deepseek - Claude Code через DeepSeek API
  • ai-kimi - Claude Code через официальный Kimi Code API (api.kimi.com/coding)
  • ai-openrouter - Claude Code через OpenRouter (GPT-5.5, Claude и др.)
  • ai-gemini - нативный Antigravity CLI agy
  • ai-api-helpers.sh - вспомогательные функции для лаунчеров
  • claude-gpt-effort-proxy.py - прокси для маппинга effort-уровней (GPT backend)

Все генерируемые скрипты полностью перезаписываются при каждом запуске scripts/ai-setup.sh.

Также устанавливается:

  • ~/.config/ai-setup/global_rules.md и native rule-файлы (~/.claude/CLAUDE.md, ~/.codex/AGENTS.md, ~/.kimi-code/AGENTS.md, ~/.gemini/GEMINI.md)
  • Скиллы из home-configs/claude/skills/ в ~/.claude/skills/ и ~/.gemini/config/plugins/local-setup/skills/

VLESS / Xray (опционально)

При запуске scripts/ai-setup.sh спрашивает, нужен ли VLESS-прокси для AI API запросов.

Если выбрать Y:

  • Читает список серверов из home-configs/vless/servers.conf
  • Проверяет каждый сервер реальным curl'ом через SOCKS5
  • Устанавливает Xray, генерирует конфиг, создаёт systemd сервис
  • Все лаунчеры оборачиваются в proxychains4

Если выбрать n - VLESS отключается, прокси и IPv6 сбрасываются в дефолт.

Ключи и конфиги

  • ~/.config/ai-setup/deepseek_key - DeepSeek API key (права 600)
  • ~/.config/ai-setup/kimi_key - Kimi API key (права 600)
  • ~/.config/ai-setup/openrouter_key - OpenRouter API key (права 600)
  • ~/.config/ai-setup/global_rules.md - глобальные правила агентов
  • ~/.config/ai-setup/network_$(hostname).conf - сохранённые GATEWAY/DEV для текущей машины

Права запуска агентов

  • ai-gpt использует --dangerously-bypass-approvals-and-sandbox
  • ai-claude, ai-deepseek, ai-kimi, ai-openrouter, ai-gemini используют --dangerously-skip-permissions

Удобно для локального coding workflow, но это не sandbox для недоверенного кода.

Правила агентов

В home-configs/GLOBAL_RULES.md - правила Карпати (Think Before Coding, Simplicity First, Surgical Changes, Goal-Driven Execution) плюс пользовательские правила (отвечать по-русски, не коммитить без команды, не делать git add без команды и др.).

scripts/ai-setup.sh копирует их в native rule-файлы всех CLI. Лаунчеры обновляют их при каждом запуске.

Effort Mapping

EFFORT_MAPPING.md - таблица маппинга effort-уровней (low/medium/high/xhigh/max) между провайдерами (Anthropic, GPT-5.5, DeepSeek V4, Kimi K2.6, Gemini 3.x).

claude-gpt-effort-proxy.py маппит xhighhigh для GPT-бэкенда (нет нативного xhigh у GPT).

Требования

  • bash, curl, python3
  • Node.js/npm (для ai-gpt через Codex CLI и ai-gemini через agy)
  • ipset (устанавливается автоматически при запуске ru-bypass.sh)
  • (опционально) proxychains-ng - для VLESS-режима
  • (опционально) gsettings - для автонастройки системного прокси GNOME

Тесты

bash tests/test_fixes.sh   # структура ai-setup.sh и синтаксис bash
bash test_isolated.sh      # автоустановка ai-gpt и ai-kimi через mock curl
bash tests/test_network.sh # маршрутизация (нужен активный ru-bypass)
Description
Установка различных AI CLI
Readme 1.2 MiB
Languages
Shell 100%