From 66a040cc036fb8e1f1ba0d65e0fa156c07112e5a Mon Sep 17 00:00:00 2001 From: vitaly Date: Sun, 7 Jun 2026 09:03:59 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20RFC1918=20(*.loc)=20=D0=BD=D0=B0=D0=BF?= =?UTF-8?q?=D1=80=D1=8F=D0=BC=D1=83=D1=8E=20+=20=D0=B4=D0=B8=D0=BD=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B9=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D1=80=20IP=20=D0=B2=20=D0=B2=D1=8B=D0=B2?= =?UTF-8?q?=D0=BE=D0=B4=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ru-bypass.sh: маршруты для 10/8, 172.16/12, 192.168/16 через локальный роутер - ru-bypass.sh: UFW правила для тех же диапазонов (однократно, before.rules) - ru-bypass.sh: пример IP в конце теперь резолвится из ya.ru динамически - README.md: описание RFC1918 bypass в разделах про UFW и про шаги скрипта Co-Authored-By: Claude Sonnet 4.6 --- home-configs/network/README.md | 11 +++++++---- home-configs/network/ru-bypass.sh | 26 +++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/home-configs/network/README.md b/home-configs/network/README.md index 126c944..ff5d670 100644 --- a/home-configs/network/README.md +++ b/home-configs/network/README.md @@ -35,9 +35,11 @@ Amnezia поднимает интерфейс `amn0` и захватывает ### UFW kill switch ``` -default deny outgoing — запрещено всё по умолчанию -allow out on amn0 — через Amnezia можно всё -before.rules: ipset ru-direct — для .ru IP разрешён прямой выход на wlp1s0 +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 @@ -49,7 +51,8 @@ before.rules: ipset ru-direct — для .ru IP разрешён прямой 2. Создаёт/обновляет ipset `ru-direct` (~11000 записей) 3. Сохраняет ipset в `/etc/ipset.conf` 4. Добавляет маршруты через локальный роутер для всех .ru блоков -5. При первом запуске: добавляет правило в `/etc/ufw/before.rules` и устанавливает systemd сервисы +5. Добавляет маршруты для RFC1918 диапазонов (`10/8`, `172.16/12`, `192.168/16`) - нужно для `*.loc` +6. При первом запуске: добавляет правила в `/etc/ufw/before.rules` и устанавливает systemd сервисы ### Сервисы (устанавливаются однократно) diff --git a/home-configs/network/ru-bypass.sh b/home-configs/network/ru-bypass.sh index ffe89b3..104222b 100644 --- a/home-configs/network/ru-bypass.sh +++ b/home-configs/network/ru-bypass.sh @@ -165,19 +165,39 @@ with open('$CACHE') as f, open('/tmp/ru-routes.batch', 'w') as out: " ip -force -batch /tmp/ru-routes.batch 2>/dev/null +# --- Маршруты для локальных сетей (*.loc, RFC1918) --- + +LOCAL_NETS="10.0.0.0/8 172.16.0.0/12 192.168.0.0/16" +echo "Добавляем маршруты для локальных сетей (*.loc / RFC1918)..." +for net in $LOCAL_NETS; do + ip route replace "$net" via "$GATEWAY" dev "$DEV" 2>/dev/null +done + # --- Правило в UFW before.rules (однократно, после создания ipset) --- UFW_MARKER="match-set $SETNAME" if ! grep -q "$UFW_MARKER" "$UFW_BEFORE" 2>/dev/null; then echo "Добавляем правило в UFW before.rules..." sed -i "0,/^COMMIT/{s/^COMMIT/# .ru bypass (ipset $SETNAME)\n-A ufw-before-output -m set --match-set $SETNAME dst -o $DEV -j ACCEPT\nCOMMIT/}" "$UFW_BEFORE" + echo "UFW обновлён (.ru ipset)." +fi + +UFW_LOCAL_MARKER="local-nets-bypass" +if ! grep -q "$UFW_LOCAL_MARKER" "$UFW_BEFORE" 2>/dev/null; then + echo "Добавляем правила UFW для локальных сетей..." + sed -i "0,/^COMMIT/{s/^COMMIT/# local nets bypass ($UFW_LOCAL_MARKER)\n-A ufw-before-output -d 10.0.0.0\/8 -o $DEV -j ACCEPT\n-A ufw-before-output -d 172.16.0.0\/12 -o $DEV -j ACCEPT\n-A ufw-before-output -d 192.168.0.0\/16 -o $DEV -j ACCEPT\nCOMMIT/}" "$UFW_BEFORE" + echo "UFW обновлён (локальные сети)." +fi + +if grep -qE "$UFW_MARKER|$UFW_LOCAL_MARKER" "$UFW_BEFORE" 2>/dev/null; then if ufw status | grep -qE "активен|active"; then ufw reload fi - echo "UFW обновлён." fi echo "" echo "Готово." -echo " ip route get 8.8.8.8 -> dev amn0 (через VPN)" -echo " ip route get 95.173.136.1 -> dev $DEV (напрямую)" +RU_EXAMPLE=$(dig +short ya.ru A 2>/dev/null | head -1) +echo " ip route get 8.8.8.8 -> dev amn0 (через VPN)" +echo " ip route get ${RU_EXAMPLE:-} -> dev $DEV (напрямую .ru)" +echo " ip route get 10.10.0.1 -> dev $DEV (напрямую *.loc / RFC1918)"