Loading

自动监控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

posted @ 2025-03-20 11:41  azureology  阅读(140)  评论(0)    收藏  举报