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)"