Wireguard 解决 DDNS 环境下 Peer 域名动态变化问题

在使用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

Wireguard 解决 DDNS 环境下 Peer 域名动态变化问题

https://www.catop.top/2023/10/07/wireguard-handle-with-ddns-situation/

作者

Catop

发布于

2023-10-07

更新于

2024-11-10

许可协议

评论