tunnel: фикс файрвола Keenetic + раздельные uninstall + README под ключ

- tunnel/tunnel-install.sh: в init-скрипте добавлен `iptables -I INPUT -i wg0
  -j ACCEPT`, OUTPUT-аналог и `rp_filter=2`. Без этого Keenetic режет ответы
  VPS→роутер: handshake проходит, но ping/HTTP внутри туннеля молча дропаются.
  В down() — снимаем эти же правила.

- tunnel/tunnel-uninstall.sh (новый): сносит ТОЛЬКО клиентскую часть туннеля
  (wg0.conf, init, rc.d, наши iptables-правила). Не трогает wireguard-tools,
  чужие WG-конфиги, keenetic_ssh-web, HydraRoute Neo.

- tunnel/server-uninstall.sh (новый): сносит ТОЛЬКО серверную часть туннеля
  (wg-quick@wg0, /etc/wireguard/{wg0.conf,server_*.key,peers/}, kssh-tun,
  ufw-правила kssh-tunnel). Не делает apt remove для wireguard.

- README.md: переписан под ключ. Чётко разделены два пакета (A: панель,
  B: туннель), оба ставятся и удаляются отдельно. Явно перечислено, что
  скрипты НЕ трогают (HydraRoute Neo, кастомные репо, чужие правила).
This commit is contained in:
Андрей Бобырев
2026-04-26 14:22:33 +03:00
parent d90f7e9709
commit 3684c0dc0b
4 changed files with 426 additions and 166 deletions

88
tunnel/server-uninstall.sh Executable file
View File

@@ -0,0 +1,88 @@
#!/bin/bash
# tunnel/server-uninstall.sh — удаление WireGuard-сервера kssh-tunnel с VPS.
# Снимает ТОЛЬКО то, что поставил server-install.sh:
# - systemd-юнит wg-quick@wg0 (stop + disable)
# - /etc/wireguard/wg0.conf, серверные ключи, peer-файлы, .kssh-tun.env
# - /usr/local/bin/kssh-tun
# - правила ufw, добавленные нами (открытие WG-порта и весь трафик на wg0)
#
# Что НЕ трогает: пакет wireguard / wireguard-tools (apt), iptables-правила
# других сервисов, любые ваши приложения и Docker.
set -e
WG_IF="${WG_IF:-wg0}"
WG_DIR="/etc/wireguard"
ENV_FILE="$WG_DIR/.kssh-tun.env"
WG_PORT="${WG_PORT:-51820}"
# Подхватить сохранённые значения, если есть
if [ -f "$ENV_FILE" ]; then
# shellcheck disable=SC1090
. "$ENV_FILE"
fi
if [ "$(id -u)" -ne 0 ]; then
echo "Запустите через sudo." >&2
exit 1
fi
echo "==> kssh-tunnel server: удаление ($WG_IF, порт $WG_PORT)"
# 1. Остановить и выключить автозапуск
if command -v systemctl >/dev/null 2>&1; then
systemctl stop "wg-quick@${WG_IF}" 2>/dev/null || true
systemctl disable "wg-quick@${WG_IF}" 2>/dev/null || true
fi
# 2. Снять интерфейс, если ещё жив
if ip link show "$WG_IF" >/dev/null 2>&1; then
ip link del "$WG_IF" 2>/dev/null || true
fi
# 3. UFW: убрать только наши правила (если ufw активен)
if command -v ufw >/dev/null 2>&1 && ufw status 2>/dev/null | grep -q "Status: active"; then
ufw delete allow "${WG_PORT}/udp" >/dev/null 2>&1 || true
ufw delete allow in on "$WG_IF" >/dev/null 2>&1 || true
ufw delete allow out on "$WG_IF" >/dev/null 2>&1 || true
fi
# 4. iptables: снять правило ACCEPT для wg0, которое мы вставляли
if command -v iptables >/dev/null 2>&1; then
while iptables -C INPUT -i "$WG_IF" -j ACCEPT 2>/dev/null; do
iptables -D INPUT -i "$WG_IF" -j ACCEPT 2>/dev/null || break
done
if command -v netfilter-persistent >/dev/null 2>&1; then
netfilter-persistent save >/dev/null 2>&1 || true
elif [ -d /etc/iptables ]; then
iptables-save > /etc/iptables/rules.v4 2>/dev/null || true
fi
fi
# 5. Файлы. Бережно: трогаем только наши.
rm -f "$WG_DIR/$WG_IF.conf"
rm -f "$WG_DIR/server_private.key" "$WG_DIR/server_public.key"
rm -f "$ENV_FILE"
if [ -d "$WG_DIR/peers" ]; then
rm -f "$WG_DIR/peers/"*.peer 2>/dev/null || true
rmdir "$WG_DIR/peers" 2>/dev/null || true
fi
# /etc/wireguard сносим только если он опустел (могут быть чужие WG-конфиги)
rmdir "$WG_DIR" 2>/dev/null || true
# 6. Утилита kssh-tun
rm -f /usr/local/bin/kssh-tun
echo
echo "============================================================"
echo "Готово. Удалены:"
echo " $WG_DIR/$WG_IF.conf, server_private.key, server_public.key"
echo " $WG_DIR/peers/*.peer, $ENV_FILE"
echo " /usr/local/bin/kssh-tun"
echo " systemd: wg-quick@${WG_IF} остановлен и отключён"
echo " iptables / ufw: правила kssh-tunnel сняты"
echo
echo "НЕ удалены (общие, могут использоваться другим софтом):"
echo " пакеты wireguard / wireguard-tools (apt remove — вручную, если не нужны)"
echo " /etc/wireguard/* кроме файлов выше"
echo " все остальные правила iptables / ufw"
echo "============================================================"