在使用Wireguard组网时,如果Peer填写的是域名,并且使用了动态域名解析(DDNS),那么我们的Wireguard并不会主动连接到新的IP,除非我们重启隧道。
针对这个问题,可以有以下方案:
- 定时检测域名解析是否有变化,有则重启隧道。
- 探测各个Peer联通性,若有连接不上的Peer则重建连接,类似负载均衡。
这里我使用第一种方法,写了一个土制脚本来实现。
已在Openwrt系统上测试OK,其他发行版类似。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #! /bin/ash
echo "Checking WireGuard home server endpoint...";
origin=$(cat current_wg_home_ip.txt); echo "Original IP: $origin";
nslookup [你的Peer域名] 223.5.5.5 | tail -n 6 | grep -m 1 Address > current_wg_home_ip.txt; new=$(nslookup [你的Peer域名] 223.5.5.5 | tail -n 6 | grep -m 1 Address);
valid=$(echo $new | grep "\..*\..*\..*"); if [[ "$result" != "" ]];then echo "New IP Invalid!"; return -1; fi
echo "New IP: $new";
if [ "$origin" = "$new" ];then echo "Not changed."; else echo "IP changed!"; echo "Restarting the interface..."; ifdown wg; sleep 600s; ifup wg;
echo "Reconnect successfully!"; fi
|
使用时只需在相同路径建立一个current_wg_home_ip.txt的空白文件,将脚本命名为check_wg.sh,并添加一条cron任务即可。
例如我每30分钟检查一次:*/30 * * * * sh check_wg.sh