docker part 1
This commit is contained in:
91
Docker/dispatcher.d-99-wg-routes.sh
Normal file
91
Docker/dispatcher.d-99-wg-routes.sh
Normal file
@@ -0,0 +1,91 @@
|
||||
#!/bin/bash
|
||||
|
||||
# === Configuration ===
|
||||
LOGFILE="/tmp/dispatcher.log"
|
||||
BACKUP="/tmp/dispatcher.log.1"
|
||||
MAXSIZE=$((1024 * 1024)) # 1 MB
|
||||
VPN_IFACE="nl"
|
||||
GATEWAY="192.168.178.1"
|
||||
LOCAL_IFACE="wlp4s0f0"
|
||||
ROUTE1="185.183.34.149"
|
||||
ROUTE2="192.168.178.0/24"
|
||||
|
||||
# === Log Rotation ===
|
||||
if [ -f "$LOGFILE" ] && [ "$(stat -c%s "$LOGFILE")" -ge "$MAXSIZE" ]; then
|
||||
echo "[$(date)] Log file exceeded 1MB, rotating..." >> "$LOGFILE"
|
||||
mv "$LOGFILE" "$BACKUP"
|
||||
touch "$LOGFILE"
|
||||
fi
|
||||
|
||||
# === Logging Setup ===
|
||||
exec >> "$LOGFILE" 2>&1
|
||||
echo "[$(date)] Running dispatcher for $1 with status $2"
|
||||
|
||||
IFACE="$1"
|
||||
STATUS="$2"
|
||||
|
||||
log_and_run() {
|
||||
echo "[$(date)] Executing: $*"
|
||||
if ! output=$("$@" 2>&1); then
|
||||
echo "[$(date)] ERROR: Command failed: $*"
|
||||
echo "[$(date)] Output: $output"
|
||||
else
|
||||
echo "[$(date)] Success: $*"
|
||||
fi
|
||||
}
|
||||
|
||||
# === VPN Routing Logic ===
|
||||
if [ "$IFACE" = "$VPN_IFACE" ]; then
|
||||
case "$STATUS" in
|
||||
up)
|
||||
echo "[$(date)] VPN interface is up. Preparing routes..."
|
||||
|
||||
# === Wait for local interface and gateway ===
|
||||
echo "[$(date)] Waiting for $LOCAL_IFACE (state UP) and gateway $GATEWAY (reachable)..."
|
||||
until ip link show "$LOCAL_IFACE" | grep -q "state UP" && ip route get "$GATEWAY" &>/dev/null; do
|
||||
echo "[$(date)] Waiting for $LOCAL_IFACE and $GATEWAY..."
|
||||
sleep 1
|
||||
done
|
||||
echo "[$(date)] Local interface and gateway are ready."
|
||||
# === End Wait ===
|
||||
|
||||
# === APPLY ROUTES (Corrected Order) ===
|
||||
|
||||
# 1. Add the route for the local network FIRST
|
||||
log_and_run /sbin/ip route replace "$ROUTE2" dev "$LOCAL_IFACE"
|
||||
|
||||
# 2. Add the route to the VPN endpoint via the gateway SECOND
|
||||
log_and_run /sbin/ip route replace "$ROUTE1" via "$GATEWAY" dev "$LOCAL_IFACE"
|
||||
|
||||
# === END APPLY ROUTES ===
|
||||
|
||||
# Log interface and WireGuard status
|
||||
echo "[$(date)] --- ip addr show $VPN_IFACE ---"
|
||||
ip addr show "$VPN_IFACE"
|
||||
echo "[$(date)] --- wg show $VPN_IFACE ---"
|
||||
wg show "$VPN_IFACE"
|
||||
|
||||
;;
|
||||
|
||||
down)
|
||||
echo "[$(date)] VPN interface is down. Verifying before removing routes..."
|
||||
|
||||
# Log interface and WireGuard status
|
||||
echo "[$(date)] --- ip addr show $VPN_IFACE ---"
|
||||
ip addr show "$VPN_IFACE"
|
||||
echo "[$(date)] --- wg show $VPN_IFACE ---"
|
||||
wg show "$VPN_IFACE"
|
||||
|
||||
# Delay and confirm interface is still down
|
||||
sleep 5
|
||||
if ip link show "$VPN_IFACE" | grep -q "state UP"; then
|
||||
echo "[$(date)] VPN interface is still up. Skipping route removal."
|
||||
else
|
||||
echo "[$(date)] Confirmed VPN is down. Removing routes..."
|
||||
# It's good practice to remove them in reverse order, too.
|
||||
log_and_run /sbin/ip route del "$ROUTE1" via "$GATEWAY" dev "$LOCAL_IFACE"
|
||||
log_and_run /sbin/ip route del "$ROUTE2" dev "$LOCAL_IFACE"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
Reference in New Issue
Block a user