#!/bin/sh # /etc/hotplug.d/iface/40-wg-track # 触发: 小路由 WAN iface 起来时 (boot / DHCP renew / link bounce) # 目的: 跟踪 WG 隧道自动恢复状态,验证坑 #15 是否真根除 # 安装: scp 到 /etc/hotplug.d/iface/40-wg-track + chmod +x [ "$ACTION" = "ifup" ] || exit 0 case "$INTERFACE" in wan) ;; *) exit 0 ;; esac WAN_IP=$(ip -4 addr show eth0 2>/dev/null | awk '/inet / {print $2; exit}' | cut -d/ -f1) [ -z "$WAN_IP" ] && exit 0 LOGFILE=/tmp/wg-tunnel-track.log # 等 30s 让 tunnel 稳定 (handshake init + keepalive 至少跑两轮) sleep 30 TS=$(date '+%Y-%m-%d %H:%M:%S') ENDPOINT=$(wg show wg0 2>/dev/null | awk '/endpoint:/ {print $2; exit}') HANDSHAKE=$(wg show wg0 2>/dev/null | awk -F': ' '/latest handshake/ {print $2}') TRANSFER=$(wg show wg0 2>/dev/null | awk '/transfer:/ {print $2, $3, $4, $5}') PING_LOSS=$(ping -c 3 -W 2 10.99.0.1 2>&1 | awk '/packets transmitted/ {print $6}') STATUS="OK" [ "$PING_LOSS" != "0%" ] && STATUS="FAIL" echo "$TS | status=$STATUS | WAN=$WAN_IP | endpoint=$ENDPOINT | handshake=$HANDSHAKE | loss=$PING_LOSS | xfer=$TRANSFER" >> "$LOGFILE" # Rotate: 只保留最后 200 行 tail -200 "$LOGFILE" > "$LOGFILE.tmp" 2>/dev/null && mv "$LOGFILE.tmp" "$LOGFILE"