mirror of
https://github.com/andrey271192/keenetic_ssh-web.git
synced 2026-09-20 14:42:01 +00:00
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:
88
tunnel/server-uninstall.sh
Executable file
88
tunnel/server-uninstall.sh
Executable 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 "============================================================"
|
||||
@@ -79,6 +79,15 @@ up() {
|
||||
ip addr add "\$ADDR" dev "\$WG_IF"
|
||||
ip link set "\$WG_IF" up
|
||||
ip route add "\$SUBNET" dev "\$WG_IF" 2>/dev/null || true
|
||||
# Keenetic: входящий трафик на сторонние интерфейсы режется stricht rp_filter +
|
||||
# нет ACCEPT для этих интерфейсов. Без этих двух строк handshake пройдёт, но
|
||||
# пинг и любые ответы VPS→роутер будут молча дропаться.
|
||||
sysctl -w net.ipv4.conf.all.rp_filter=2 >/dev/null 2>&1 || true
|
||||
sysctl -w "net.ipv4.conf.\$WG_IF.rp_filter=2" >/dev/null 2>&1 || true
|
||||
if command -v iptables >/dev/null 2>&1; then
|
||||
iptables -C INPUT -i "\$WG_IF" -j ACCEPT 2>/dev/null || iptables -I INPUT 1 -i "\$WG_IF" -j ACCEPT
|
||||
iptables -C OUTPUT -o "\$WG_IF" -j ACCEPT 2>/dev/null || iptables -I OUTPUT 1 -o "\$WG_IF" -j ACCEPT
|
||||
fi
|
||||
if ! wg show "\$WG_IF" | grep -q '^peer:'; then
|
||||
echo "ВНИМАНИЕ: peer не появился в \$WG_IF — handshake не состоится."
|
||||
echo "Проверьте \$CONF и перезапустите."
|
||||
@@ -87,6 +96,14 @@ up() {
|
||||
}
|
||||
down() {
|
||||
ip link del "\$WG_IF" 2>/dev/null || true
|
||||
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
|
||||
while iptables -C OUTPUT -o "\$WG_IF" -j ACCEPT 2>/dev/null; do
|
||||
iptables -D OUTPUT -o "\$WG_IF" -j ACCEPT 2>/dev/null || break
|
||||
done
|
||||
fi
|
||||
echo "stopped \$WG_IF"
|
||||
}
|
||||
|
||||
|
||||
57
tunnel/tunnel-uninstall.sh
Executable file
57
tunnel/tunnel-uninstall.sh
Executable file
@@ -0,0 +1,57 @@
|
||||
#!/bin/sh
|
||||
# tunnel/tunnel-uninstall.sh — удаление WireGuard-клиента kssh-tunnel с роутера (Entware).
|
||||
# Снимает ТОЛЬКО то, что поставил tunnel-install.sh:
|
||||
# - интерфейс wg0 (или WG_IF)
|
||||
# - /opt/etc/wireguard/<WG_IF>.conf
|
||||
# - init-скрипт /opt/etc/init.d/S50kssh-tunnel и rc.d-симлинк
|
||||
# - правила iptables/sysctl, добавленные туннелем (ACCEPT на wg0)
|
||||
#
|
||||
# Что НЕ трогает: пакет wireguard-tools, общие правила iptables, конфиги других
|
||||
# WireGuard-интерфейсов (Keenetic NDM, HydraRoute и пр.), keenetic_ssh-web.
|
||||
set -e
|
||||
|
||||
WG_IF="${WG_IF:-wg0}"
|
||||
WG_DIR="/opt/etc/wireguard"
|
||||
INIT="/opt/etc/init.d/S50kssh-tunnel"
|
||||
RCD="/opt/etc/rc.d/S50kssh-tunnel"
|
||||
|
||||
echo "==> kssh-tunnel: удаление клиента ($WG_IF)"
|
||||
|
||||
# 1. Остановить интерфейс
|
||||
if [ -x "$INIT" ]; then
|
||||
"$INIT" stop 2>/dev/null || true
|
||||
fi
|
||||
if ip link show "$WG_IF" >/dev/null 2>&1; then
|
||||
ip link del "$WG_IF" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 2. Снять правила, которые добавляли при старте туннеля
|
||||
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
|
||||
while iptables -C OUTPUT -o "$WG_IF" -j ACCEPT 2>/dev/null; do
|
||||
iptables -D OUTPUT -o "$WG_IF" -j ACCEPT 2>/dev/null || break
|
||||
done
|
||||
fi
|
||||
|
||||
# 3. Удалить файлы туннеля (НЕ трогаем чужие WG-конфиги в этой папке)
|
||||
rm -f "$WG_DIR/$WG_IF.conf"
|
||||
rm -f "$RCD" "$INIT"
|
||||
# Папку wireguard сносим только если она пуста (там могут лежать чужие конфиги)
|
||||
rmdir "$WG_DIR" 2>/dev/null || true
|
||||
|
||||
echo
|
||||
echo "============================================================"
|
||||
echo "Готово. Удалены:"
|
||||
echo " $WG_DIR/$WG_IF.conf"
|
||||
echo " $INIT"
|
||||
echo " $RCD (если был)"
|
||||
echo " iptables ACCEPT для $WG_IF"
|
||||
echo
|
||||
echo "НЕ удалены (используются другими, не наша зона ответственности):"
|
||||
echo " пакет wireguard-tools (opkg)"
|
||||
echo " общие правила iptables / sysctl"
|
||||
echo " /opt/etc/wireguard/* кроме $WG_IF.conf"
|
||||
echo " keenetic_ssh-web (см. uninstall.sh в основном репо)"
|
||||
echo "============================================================"
|
||||
Reference in New Issue
Block a user