From cb8c3c954416400c7bb57e77777b052ed9ff42fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9=20=D0=9D=D0=B8?= =?UTF-8?q?=D0=BA=D0=B8=D1=82=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Mon, 8 Jun 2026 12:48:32 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20IPv6=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9?= =?UTF-8?q?=D0=BA=D0=B5=20kill=20switch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit IPv6-трафик обходит UFW (который работает только с IPv4) — kill switch не защищает от утечек по IPv6. Изменения: - ru-bypass.sh: молча отключает IPv6 (sysctl + /etc/sysctl.d) при каждом запуске, если есть глобальные IPv6-адреса - ks-on.sh: тоже отключает IPv6, но без интерактивного вопроса (раньше спрашивал «Отключить IPv6? [Y/n]») - ai-setup.sh (direct mode): не восстанавливает IPv6, если UFW kill switch активен (раньше безусловно включал обратно, из-за чего после каждого запуска setup.sh IPv6 снова утекал) Co-Authored-By: Claude Opus 4.8 --- scripts/ai-setup.sh | 16 ++++++++++------ scripts/ks-on.sh | 19 ++++++++++--------- scripts/ru-bypass.sh | 15 +++++++++++++++ 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/scripts/ai-setup.sh b/scripts/ai-setup.sh index c6be810..bbdde7a 100755 --- a/scripts/ai-setup.sh +++ b/scripts/ai-setup.sh @@ -250,12 +250,16 @@ FJSEOF success "Firefox переключён на прямой доступ" fi - # Включаем IPv6 обратно - sudo rm -f /etc/sysctl.d/99-disable-ipv6.conf - sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0 2>/dev/null || true - sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0 2>/dev/null || true - sudo systemctl restart systemd-resolved 2>/dev/null || true - success "IPv6 восстановлен" + # Включаем IPv6 обратно (только если kill switch не активен) + if ufw status | grep -qE "активен|active"; then + info "UFW kill switch активен — оставляю IPv6 отключённым" + else + sudo rm -f /etc/sysctl.d/99-disable-ipv6.conf + sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0 2>/dev/null || true + sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0 2>/dev/null || true + sudo systemctl restart systemd-resolved 2>/dev/null || true + success "IPv6 восстановлен" + fi fi # ── 1. npm prefix в домашнюю папку ────────────────────────── diff --git a/scripts/ks-on.sh b/scripts/ks-on.sh index fc32539..c6196a1 100644 --- a/scripts/ks-on.sh +++ b/scripts/ks-on.sh @@ -21,17 +21,18 @@ if ! ip link show amn0 &>/dev/null && ! ip link show amnezia0 &>/dev/null; then fi fi -# Проверяем IPv6 — глобальные адреса могут утекать мимо VPN +# Отключаем IPv6 (утечка мимо UFW kill switch, UFW работает только с IPv4) ipv6_cnt=$(ip -6 addr show scope global 2>/dev/null | grep -c 'inet6' || true) if [ "$ipv6_cnt" -gt 0 ]; then - echo "" - echo "Обнаружены глобальные IPv6 адреса ($ipv6_cnt шт.) — трафик может утекать мимо VPN." - read -p "Отключить IPv6? [Y/n] " ans - if [ "$ans" != "n" ] && [ "$ans" != "N" ]; then - sysctl -w net.ipv6.conf.all.disable_ipv6=1 >/dev/null - sysctl -w net.ipv6.conf.default.disable_ipv6=1 >/dev/null - echo "IPv6 отключён." - fi + sysctl -w net.ipv6.conf.all.disable_ipv6=1 >/dev/null + sysctl -w net.ipv6.conf.default.disable_ipv6=1 >/dev/null + cat > /etc/sysctl.d/99-disable-ipv6.conf << 'SYSCTEOF' +# Отключение IPv6 — требуется для защиты kill switch (UFW работает только с IPv4) +net.ipv6.conf.all.disable_ipv6=1 +net.ipv6.conf.default.disable_ipv6=1 +SYSCTEOF + systemctl restart systemd-resolved 2>/dev/null || true + echo "IPv6 отключён ($ipv6_cnt адресов)." fi echo "Включаем UFW kill switch..." diff --git a/scripts/ru-bypass.sh b/scripts/ru-bypass.sh index a0f1599..e30b9df 100644 --- a/scripts/ru-bypass.sh +++ b/scripts/ru-bypass.sh @@ -371,6 +371,21 @@ done echo "iptables: прямые правила добавлены." +# --- Отключаем IPv6 (утечка мимо UFW kill switch) --- +# UFW работает только с IPv4 — IPv6-трафик обходит kill switch полностью. +_ipv6_cnt=$(ip -6 addr show scope global 2>/dev/null | grep -c 'inet6' || true) +if [ "$_ipv6_cnt" -gt 0 ]; then + sysctl -w net.ipv6.conf.all.disable_ipv6=1 >/dev/null 2>&1 + sysctl -w net.ipv6.conf.default.disable_ipv6=1 >/dev/null 2>&1 + cat > /etc/sysctl.d/99-disable-ipv6.conf << 'SYSCTEOF' +# Отключение IPv6 — требуется для защиты kill switch (UFW работает только с IPv4) +net.ipv6.conf.all.disable_ipv6=1 +net.ipv6.conf.default.disable_ipv6=1 +SYSCTEOF + systemctl restart systemd-resolved 2>/dev/null || true + echo "IPv6: отключён ($_ipv6_cnt адресов) для защиты kill switch." +fi + echo "" echo "Готово." RU_EXAMPLE=$(dig +short ya.ru A 2>/dev/null | head -1)