From dfaf835cb6119431718a6ba8b958bc3c4ecf6aec Mon Sep 17 00:00:00 2001 From: vitaly Date: Sat, 6 Jun 2026 11:45:33 +0300 Subject: [PATCH] =?UTF-8?q?chore:=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BD=D0=B5=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF?= =?UTF-8?q?=D1=82=D1=8B=20ru-direct?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- home-configs/network/ru-direct-undo.sh | 65 ------------- home-configs/network/ru-direct.sh | 128 ------------------------- 2 files changed, 193 deletions(-) delete mode 100644 home-configs/network/ru-direct-undo.sh delete mode 100644 home-configs/network/ru-direct.sh diff --git a/home-configs/network/ru-direct-undo.sh b/home-configs/network/ru-direct-undo.sh deleted file mode 100644 index 66bade1..0000000 --- a/home-configs/network/ru-direct-undo.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -# ru-direct-undo.sh — Откат ru-direct.sh, возврат к состоянию "всё через Amnezia" -# Run as root: sudo bash ru-direct-undo.sh - -set -euo pipefail - -IFACE="wlp1s0" -GATEWAY="192.168.1.1" -NFT_TABLE="ru_direct" -CACHE_FILE="/var/cache/ru_ips.txt" - -if [ "$(id -u)" != "0" ]; then - echo "Запускай от root: sudo bash $0" - exit 1 -fi - -# ── 1. Удалить nftables таблицу ──────────────────────────────────────────── - -echo "==> Удаляем nftables таблицу $NFT_TABLE..." -if nft delete table inet "$NFT_TABLE" 2>/dev/null; then - echo " Удалено" -else - echo " Таблицы не было (или уже удалена)" -fi - -# ── 2. Удалить маршруты через wlp1s0 ────────────────────────────────────── - -echo "==> Удаляем маршруты через $IFACE..." -if [ -f "$CACHE_FILE" ]; then - REMOVED=0 - while IFS= read -r subnet; do - if ip route del "$subnet" via "$GATEWAY" dev "$IFACE" 2>/dev/null; then - (( REMOVED++ )) - fi - done < "$CACHE_FILE" - echo " Удалено маршрутов: $REMOVED" -else - echo " Кеш $CACHE_FILE не найден, маршруты удалим по-другому..." - # Удаляем все маршруты через wlp1s0, кроме локальной подсети - ip route show dev "$IFACE" | awk '$1 !~ /^192\.168\./ && $1 != "default" {print $1}' | \ - while read subnet; do - ip route del "$subnet" dev "$IFACE" 2>/dev/null && echo " del $subnet" || true - done -fi - -# ── 3. Остановить и удалить systemd-сервис ───────────────────────────────── - -echo "==> Отключаем systemd-сервис..." -systemctl stop ru-direct.service 2>/dev/null || true -systemctl disable ru-direct.service 2>/dev/null || true -rm -f /etc/systemd/system/ru-direct.service -systemctl daemon-reload -echo " Сервис удалён" - -# ── 4. Удалить файлы ─────────────────────────────────────────────────────── - -rm -f /usr/local/bin/ru-direct.sh -rm -f "$CACHE_FILE" -echo "==> Файлы удалены" - -echo "" -echo "==> Откат завершён. Всё как было — весь трафик через Amnezia." -echo "" -echo "Если что-то в браузере не переключилось — перезапусти его." -echo "Или перезагрузи систему для полной чистоты." diff --git a/home-configs/network/ru-direct.sh b/home-configs/network/ru-direct.sh deleted file mode 100644 index 48f14be..0000000 --- a/home-configs/network/ru-direct.sh +++ /dev/null @@ -1,128 +0,0 @@ -#!/bin/bash -# ru-direct.sh — Route all Russian IPs directly, bypassing Amnezia VPN -# Run as root: sudo bash ru-direct.sh -# -# What it does: -# 1. Downloads Russian IP ranges from RIPE -# 2. Adds routes via local gateway (bypasses amn0) -# 3. Adds nftables rule to allow those packets before UFW's deny -# -# Persistent via: /etc/systemd/system/ru-direct.service - -set -euo pipefail - -GATEWAY="192.168.1.1" -IFACE="wlp1s0" -NFT_TABLE="ru_direct" -CACHE_FILE="/var/cache/ru_ips.txt" -RIPE_URL="https://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-latest" - -if [ "$(id -u)" != "0" ]; then - echo "Запускай от root: sudo bash $0" - exit 1 -fi - -# ── 1. Загрузить/обновить список российских IP ───────────────────────────── - -echo "==> Загружаем российские IP с RIPE..." -FRESH=$(curl -s --max-time 120 "$RIPE_URL" | \ - awk -F'|' '$2=="RU" && $3=="ipv4" { - n=$5+0; bits=0; - while (n > 1) { n /= 2; bits++ } - print $4 "/" (32 - bits) - }') - -COUNT=$(echo "$FRESH" | wc -l) -if [ "$COUNT" -lt 100 ]; then - echo "ERROR: подозрительно мало диапазонов ($COUNT), прерываем" - exit 1 -fi -echo " Найдено $COUNT диапазонов" -echo "$FRESH" > "$CACHE_FILE" - -# ── 2. Настроить nftables (до UFW, priority -10) ─────────────────────────── - -echo "==> Настраиваем nftables..." - -# Удаляем старую таблицу если есть -nft delete table inet "$NFT_TABLE" 2>/dev/null || true - -# Создаём новую таблицу, set и правило -nft add table inet "$NFT_TABLE" -nft add set inet "$NFT_TABLE" ru_ips \ - '{ type ipv4_addr; flags interval; auto-merge; }' -nft add chain inet "$NFT_TABLE" output \ - '{ type filter hook output priority -10; policy accept; }' -nft add rule inet "$NFT_TABLE" output \ - ip daddr "@ru_ips" accept - -# Загружаем IP в set (порциями по 500, чтобы не упасть на ARG_MAX) -echo "==> Загружаем IP в nftables set..." -BATCH=() -BATCH_SIZE=0 -while IFS= read -r subnet; do - BATCH+=("$subnet") - BATCH_SIZE=$(( BATCH_SIZE + 1 )) - if [ "$BATCH_SIZE" -ge 500 ]; then - ELEMENTS=$(IFS=','; echo "${BATCH[*]}") - nft add element inet "$NFT_TABLE" ru_ips "{ $ELEMENTS }" - BATCH=() - BATCH_SIZE=0 - fi -done < "$CACHE_FILE" - -# Остаток -if [ "${#BATCH[@]}" -gt 0 ]; then - ELEMENTS=$(IFS=','; echo "${BATCH[*]}") - nft add element inet "$NFT_TABLE" ru_ips "{ $ELEMENTS }" -fi - -echo " nftables: $(nft list set inet $NFT_TABLE ru_ips | grep -c '/') подсетей загружено" - -# ── 3. Добавить маршруты через локальный провайдер ───────────────────────── - -echo "==> Добавляем маршруты через $GATEWAY ($IFACE)..." -ADDED=0 -SKIPPED=0 -while IFS= read -r subnet; do - if ip route add "$subnet" via "$GATEWAY" dev "$IFACE" 2>/dev/null; then - ADDED=$(( ADDED + 1 )) - else - SKIPPED=$(( SKIPPED + 1 )) - fi -done < "$CACHE_FILE" -echo " Добавлено: $ADDED, уже было: $SKIPPED" - -# ── 4. Установить systemd-сервис ─────────────────────────────────────────── - -SCRIPT_DEST="/usr/local/bin/ru-direct.sh" -cp "$0" "$SCRIPT_DEST" -chmod +x "$SCRIPT_DEST" - -cat > /etc/systemd/system/ru-direct.service << 'EOF' -[Unit] -Description=Route Russian IPs directly (bypass Amnezia VPN) -After=network-online.target amnezia-vpn.service -Wants=network-online.target - -[Service] -Type=oneshot -RemainAfterExit=yes -ExecStart=/usr/local/bin/ru-direct.sh -StandardOutput=journal -StandardError=journal - -[Install] -WantedBy=multi-user.target -EOF - -systemctl daemon-reload -systemctl enable ru-direct.service - -echo "" -echo "==> Готово!" -echo " Российский трафик теперь идёт напрямую через $IFACE" -echo " Сервис включён для автозапуска при загрузке" -echo "" -echo "Проверь:" -echo " curl -s -o /dev/null -w '%{http_code}' -L --max-time 10 https://ozon.ru"