监控DNS记录并自动更新Headscale DERP配置的守护程序
- 实时监控指定域名的DNS解析记录
- 自动检测IPv4/IPv6地址变更
- 支持正则表达式匹配更新YAML配置文件
- 自动重启Headscale服务生效变更
- 本地缓存最后IP记录避免重复更新
- Rust 1.65+ 开发环境
- systemd服务管理(Linux系统)
- Headscale 0.22+ 版本
# 克隆项目
git clone https://github.com/your-repo/headscale-derp-ipset.git
cd headscale-derp-ipset
# 编译发布版本
cargo build --release
# 安装到系统路径
sudo cp target/release/headscale-derp-ipset /usr/local/bin/
# 基本运行(需sudo权限修改配置)
sudo headscale-derp-ipset -d your-domain.com -c /etc/headscale/config.yaml
# 参数说明:
# -d/--domain 要监控的域名(必须)
# -c/--config Headscale配置文件路径(默认/etc/headscale/config.yaml)
在Headscale配置文件中需要包含以下模板字段:
derp:
servers:
your-region:
ipv4: TEMPLATE_IPV4 # 程序会自动替换这个值
ipv6: TEMPLATE_IPV6 # 程序会自动替换这个值
创建systemd服务文件 /etc/systemd/system/headscale-derp-ipset.service
:
[Unit]
Description=Headscale DERP IP Monitor
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/headscale-derp-ipset -d your-domain.com
Restart=always
RestartSec=120
[Install]
WantedBy=multi-user.target
启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable --now headscale-derp-ipset
- clap v4:命令行参数解析
- hickory-resolver v0.25:DNS解析
- tokio v1.0:异步运行时
- notify v6.0:文件监控
- serde v1.0:配置序列化
- 每120秒通过阿里云DNS解析指定域名
- 对比当前IP与本地缓存记录(存储在
/tmp/headscale-derp-last-ips.json
) - 当检测到IP变更时:
- 使用正则表达式更新配置文件
- 调用
systemctl restart headscale
重启服务 - 更新本地缓存记录
journalctl -u headscale-derp-ipset -f