tunnel: per-peer DNAT ports via kssh-tun add --dnat

Made-with: Cursor
This commit is contained in:
Андрей Бобырев
2026-04-26 16:19:59 +03:00
parent 90006b6149
commit c6db82bd2e
3 changed files with 31 additions and 3 deletions

View File

@@ -47,6 +47,12 @@ curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/
curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/setup-vps.sh | sudo bash -s -- add my-router
```
Если у конкретного роутера «прокси/админка» сидит на другом порту (например `777`), задайте порт при добавлении peerа:
```sh
sudo kssh-tun add my-router --dnat 777
```
Она выведет **готовый блок** (несколько строк `export ...` + `curl ... | sh`).
**Команда 2 — на роутере (Entware shell):** вставьте выданный блок **как есть**.

View File

@@ -4,6 +4,7 @@
# Запуск (любой из вариантов):
# curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/setup-vps.sh | sudo bash
# curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/setup-vps.sh | sudo bash -s -- add <peer-name>
# curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/setup-vps.sh | sudo bash -s -- add <peer-name> --dnat 777
#
# Что делает (одной командой):
# 1) сносит предыдущий kssh-tunnel сервер (если был)
@@ -33,7 +34,8 @@ curl -fsSL "$RAW/tunnel/server-install.sh" | bash
if [ "${1:-}" = "add" ] && [ -n "${2:-}" ]; then
echo
echo "==> [3/3] Добавление peer '$2'…"
/usr/local/bin/kssh-tun add "$2"
shift 2
/usr/local/bin/kssh-tun add "$@"
else
echo
echo "==> [3/3] Сервер готов. Добавьте роутер командой:"

View File

@@ -91,7 +91,7 @@ export VPS_ENDPOINT=$PUB_IP:$WG_PORT
export VPS_PUBKEY='$SERVER_PUB'
export CLIENT_IP=$CLIENT_IP
export CLIENT_PRIVKEY='$CLIENT_PRIV'
export DNAT_PORTS=81,79
export DNAT_PORTS='${DNAT_PORTS:-81,79}'
curl -fsSL https://raw.githubusercontent.com/${KSSH_REPO}/${KSSH_BRANCH}/tunnel/tunnel-install.sh | sh
EOF
echo "============================================================"
@@ -105,6 +105,25 @@ case "$cmd" in
require_root
NAME="${1:-}"
[ -z "$NAME" ] && { echo "usage: kssh-tun add <name>" >&2; exit 1; }
shift || true
DNAT_PORTS_ARG=""
while [ $# -gt 0 ]; do
case "$1" in
--dnat)
DNAT_PORTS_ARG="${2:-}"
shift 2 || true
;;
--dnat=*)
DNAT_PORTS_ARG="${1#--dnat=}"
shift || true
;;
*)
echo "Неизвестный аргумент: $1" >&2
echo "usage: kssh-tun add <name> [--dnat 81,79]" >&2
exit 1
;;
esac
done
case "$NAME" in *[!a-zA-Z0-9_-]*) echo "Имя: только [a-zA-Z0-9_-]" >&2; exit 1;; esac
mkdir -p "$PEERS_DIR"
PEER_FILE="$PEERS_DIR/$NAME.peer"
@@ -120,6 +139,7 @@ NAME="$NAME"
CLIENT_IP="$CLIENT_IP"
CLIENT_PRIV="$CLIENT_PRIV"
CLIENT_PUB="$CLIENT_PUB"
DNAT_PORTS="$DNAT_PORTS_ARG"
EOF
chmod 600 "$PEER_FILE"
regen_conf
@@ -165,7 +185,7 @@ EOF
cat <<EOF
kssh-tun — управление WireGuard-клиентами для keenetic_ssh-web tunnel.
kssh-tun add <name> добавить peer, вывести ENV-блок для роутера
kssh-tun add <name> [--dnat 81,79] добавить peer, вывести ENV-блок для роутера
kssh-tun show <name> повторно вывести ENV-блок
kssh-tun list список peer-ов
kssh-tun remove <name> удалить peer