当IP地址变化自动重新连接wireguard解决办法
编辑
18
2025-05-02
遇到的问题
wg-easy部署在家庭服务器上,云服务器连接到了wg上然后做内网反向代理,但是当家庭局域网变化的时候,wg客户端无法重新连接,导致内网反向代理失败,此脚本是用来解决该问题的
原理
利用脚本定时检测域名解析的ip变化情况,当ip地址出现变化的时候,重新启动wg。
脚本
#!/bin/bash
WG_HOSTNAME="yourname.example.com" # 请替换为你自己的 DDNS 域名
WG_INTERFACE="wg0" # WireGuard 接口名称
IP_CACHE_FILE="/tmp/wg_last_ip.txt" # 上次 IP 缓存文件
# 获取当前解析的公网 IP
current_ip=$(dig +short "$WG_HOSTNAME" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)
# 判断解析是否成功
if [[ -z "$current_ip" ]]; then
echo "[$(date)] 域名解析失败:$WG_HOSTNAME"
exit 1
fi
# 读取上一次的 IP
last_ip=""
if [[ -f "$IP_CACHE_FILE" ]]; then
last_ip=$(cat "$IP_CACHE_FILE")
fi
# 如果 IP 变了,就重启 WireGuard
if [[ "$current_ip" != "$last_ip" ]]; then
echo "[$(date)] IP 变化:$last_ip → $current_ip"
echo "$current_ip" > "$IP_CACHE_FILE"
echo "[$(date)] 正在重启 WireGuard:$WG_INTERFACE"
wg-quick down "$WG_INTERFACE"
sleep 2
wg-quick up "$WG_INTERFACE"
else
echo "[$(date)] IP 未变,当前 IP:$current_ip"
fi
使用方法
1、打开云服务器终端,创建脚本文件。
sudo nano /usr/local/bin/wg-watchdog.sh
2、粘贴上面脚本文件,注意需要修改相对应的变量。
3、保存退出nano文件。
按下 Ctrl+O,回车,接着 Ctrl+X 退出。
4、赋予脚本执行权限。
sudo chmod +x /usr/local/bin/wg-watchdog.sh
设置定时任务(crontab)
通过以上方法可以实现判断解析域名变化然后实现重启wg,接下来增加该脚本的定时任务,设置每 3 分钟自动检测。
1、编辑当前用户定时任务。
crontab -e
2、添加以下内容。
*/3 * * * * /usr/local/bin/wg-watchdog.sh >> /var/log/wg-watchdog.log 2>&1
检查和调试
1、手动运行脚本查看结果。
/usr/local/bin/wg-watchdog.sh
2、查看wireguard的当前状态。
wg show
3、查看日志.
cat /var/log/wg-watchdog.log
4、通过日志可以看到脚本运行成功。
后续优化
后续配置smtp邮箱通知服务或者tg机器人提醒,当ip变化的时候会自动提示,方便监控服务器状态变化情况。
- 0
- 0
-
分享