diff --git a/README.md b/README.md
index 78144d7..be2e615 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-
+
@@ -78,36 +78,38 @@ vim pawdance-client.conf
Example **client** config:
```bash
-# pawdance client example config
-ROLE="client"
+# ---------------------------------------------------------------------------
+# pawdance
+# ---------------------------------------------------------------------------
+ROLE="client" # client or server
-# How to reach the server
-CONNECT_MODE="dns" # dns | ip | auto
-REMOTE_HOST="vps.your.domain"
-# REMOTE_CONNECT_IP4="203.0.113.42"
+CONNECT_MODE="auto" # dns|ip|auto
+REMOTE_HOST="vpn.example.com" # used when dns/auto
+# REMOTE_CONNECT_IP4="203.0.113.42" # used when ip/auto with no REMOTE_HOST.
# REMOTE_CONNECT_IP6="2001:db8::42"
-CONNECT_PREFER="ipv4" # auto | ipv4 | ipv6
+CONNECT_PREFER="auto" # auto|ipv4|ipv6
-REMOTE_USER="stinky"
+# --- SSH authentication -----------------------------------------------------
+REMOTE_USER="youruser"
+SSH_KEY_MODE="false" # true = pass explicit key; false = default chain
+SSH_KEY="/home/alice/.ssh/id_ed25519" # only if SSH_KEY_MODE=true
-# Tunnel interface
+# --- Tunnel parameters ------------------------------------------------------
TUN_INDEX="1"
TUN_DEV="tun${TUN_INDEX}"
-
LOCAL_IP4="10.0.1.2/24"
REMOTE_IP4="10.0.1.1"
-
LOCAL_IP6="2001:db8:1::2/64"
REMOTE_IP6="2001:db8:1::1"
-
MTU="1500"
-# Optional: post‑quantum crypto overrides
+# --- Crypto preferences -----------------------------------------
SSH_KEX="mlkem768x25519-sha256"
SSH_CIPHERS="chacha20-poly1305@openssh.com"
SSH_MACS="hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com"
-# Push whole‑internet routes through the tunnel?
+# use remote server as vpn for all traffic.
+# if set to false, vpn becomes transparent.
DEFAULT_ROUTE_IPV4="true"
DEFAULT_ROUTE_IPV6="true"
```
@@ -123,20 +125,24 @@ vim srv-config.conf
Example **server** config:
```bash
+# ---------------------------------------------------------------------------
+# pawdance
+# ---------------------------------------------------------------------------
ROLE="server"
+# --- Tunnel parameters ------------------------------------------------------
TUN_INDEX="1"
TUN_DEV="tun${TUN_INDEX}"
-
LOCAL_IP4="10.0.1.1/24"
LOCAL_IP6="2001:db8:1::1/64"
MTU="1500"
-# allow VPN clients to access other networks?
-VPN_FORWARD="true" # adds iptables/ip6tables FORWARD rules
+# allow clients to accsess networks on the server?
+VPN_FORWARD="true" # iptables/ip6tables FORWARD rules
-# keep this true (required for routing)
-IP_FORWARD="true" # sets net.ipv4.ip_forward + net.ipv6.conf.all.forwarding
+#keep this to true. It is required for the tunnel to work.
+# this enables net.ipv4.ip_forward + net.ipv6.conf.all.forwarding
+IP_FORWARD="true"
```
@@ -185,6 +191,7 @@ This removes:
* any iptables/ip6tables **FORWARD** rules added by Pawdance
(Kernel forwarding sysctls remain as you set them.)
+useful if script was terminated forcefully. Or you wanna remove tun from server.
---
diff --git a/pawdance b/pawdance
index f32e42b..f491a0a 100644
--- a/pawdance
+++ b/pawdance
@@ -1,28 +1,10 @@
#!/usr/bin/env bash
-# pawdance.sh – EXACT client *and* server logic driven by an easy‑to‑edit config file
-# -----------------------------------------------------------------------------
-# Modes (ROLE in config):
-# client – brings up a point‑to‑point tunnel by SSH‑w’ing into the server.
-# server – creates the matching tunnel locally and (optionally) enables routing.
-#
-# Connection source (CONNECT_MODE):
-# dns – resolve REMOTE_HOST on every run.
-# ip – use the hard‑coded REMOTE_CONNECT_IP4 and/or REMOTE_CONNECT_IP6.
-# auto – if REMOTE_HOST is set use dns, otherwise ip (default).
-#
-# Extra dial options:
-# CONNECT_PREFER – which address family to try first (auto|ipv4|ipv6).
-# SSH_KEY_MODE – set to "true" to pass an explicit private key via -i.
-# SSH_KEY – absolute path to that key (required if SSH_KEY_MODE=true).
-#
-# -----------------------------------------------------------------------------
-# v4.5.1 – better --help, commented example configs, SSH_KEY_MODE support.
-# -----------------------------------------------------------------------------
-
+# pawdance.sh - EXACT client *and* server logic driven by an easy‑to‑edit config file
+#
set -euo pipefail
SCRIPT_NAME="pawdance"
-VERSION="4.5.1"
+VERSION="4.5.2"
CONFIG_FILE=""
SUBCMD=""
@@ -249,7 +231,7 @@ client_up() {
[[ -n "$REMOTE_IP6_RESOLVED" && -n "$IPV6_GW" ]] && \
$SUDO ip -6 route add "$REMOTE_IP6_RESOLVED" via "$IPV6_GW" dev "$IFACE6"
- log "Setting default routes (metric 1)…"
+ log "Setting default routes (metric1)…"
[[ "$DEFAULT_ROUTE_IPV4" == "true" && -n "$REMOTE_IP4" ]] && \
$SUDO ip route add default via "$REMOTE_IP4" dev "$TUN_DEV" metric 1
[[ "$DEFAULT_ROUTE_IPV6" == "true" && -n "$REMOTE_IP6" ]] && \
@@ -308,7 +290,7 @@ server_up() {
# -------------- CLI --------------
usage() {
cat < Bring tunnel up (client or server, per ROLE).