自动监控wireguard目标地址变化
需求
书接上回wireguard异地组网已经运行一段时间
苦于中转服务器无法提供固定的公网ip因此绑定了ddns进行解析,官方配置文件endpoints
支持域名但隧道运行后不会自动刷新
因此需要设计一个deamon脚本在域名解析ip与当前节点ip不符时重启wg隧道刷新节点ip地址
实现
脚本依赖dig命令需要提前安装
sudo apt-get install dnsutils
检测脚本如下
#!/bin/bash
WG_INTERFACE=${1:-'wg0'}
CONF_FILE="/etc/wireguard/${WG_INTERFACE}.conf"
if [ ! -f ${CONF_FILE} ]; then
echo ${CONF_FILE} not exist!
exit -1
fi
get_domain_name() {
awk -F'= ' '/^Endpoint = / {print $2}' ${CONF_FILE} | cut -d':' -f1
}
get_domain_ip() {
dig +short ${DOMAIN_NAME} | grep '^[.0-9]*$'
}
get_current_ip() {
wg show ${WG_INTERFACE} endpoints | awk '{print $2}'|cut -d':' -f1
}
DOMAIN_NAME=$(get_domain_name)
DOMAIN_IP=$(get_domain_ip)
CURRENT_IP=$(get_current_ip)
if [[ ${DOMAIN_IP} != ${CURRENT_IP} ]]; then
wg-quick down ${WG_INTERFACE} && wg-quick up ${WG_INTERFACE}
fi
支持传参制定wg网卡,缺省wg0
配合crontab进行定期巡检,频率为每小时一次
# m h dom mon dow command
0 * * * * /root/wg_checker.sh &>/dev/null
参考
dig(1) — dnsutils — Debian testing — Debian Manpages
awk(1): pattern scanning/processing - Linux man page