WireGuard Troubleshooting Notes

WireGuard Troubleshooting Notes

💡 原文英文,约300词,阅读约需1分钟。
📝

内容提要

该文章记录了WireGuard的配置过程,重点解决动态公网IP变化导致连接中断的问题。作者通过两台服务器互联,指出WireGuard不会自动解析域名变化,需定期运行reresolve-dns.sh脚本或设置systemd定时器(每30秒)来更新端点地址,确保连接稳定。

🔎

延伸解读

WireGuard 的 DNS 解析机制

WireGuard 在启动时解析端点域名后,不会再次检查 DNS 变化。即使配置中填写的是域名,如果服务器 IP 动态变化,客户端仍会失去连接。因此,仅依赖 DDNS 更新域名解析是不够的,必须定期更新端点地址。

reresolve-dns 脚本的作用

wireguard-tools 提供了 reresolve-dns.sh 脚本,可解析配置文件并自动重置端点地址。用户需定期运行该脚本,例如通过 systemd 定时器每 30 秒执行一次,以应对动态 IP 变化。这比手动更新配置更可靠。

systemd 定时器配置要点

文章给出了具体的 systemd 定时器和服务配置示例,定时器每 30 秒触发一次,服务执行脚本遍历所有 .conf 文件。启用后需确保网络在线,并设置 Wants 和 After 依赖,以保证脚本在正确时机运行。

❓

Q&A

WireGuard 为什么在动态公网 IP 变化后无法连接?

因为 WireGuard 在解析服务器域名后不会再次检查 DNS 变化,如果服务器的 IP 地址因 DHCP、DDNS 等原因改变,客户端不会自动更新端点地址,导致连接中断。

如何解决 WireGuard 动态公网 IP 变化导致的连接问题?

需要定期运行 reresolve-dns.sh 脚本,或者设置 systemd 定时器每 30 秒执行一次该脚本,以自动更新 WireGuard 的端点地址。

reresolve-dns.sh 脚本的作用是什么?

该脚本解析 WireGuard 配置文件,并自动重置端点地址,从而在服务器 IP 变化后恢复连接。

如何设置 systemd 定时器每 30 秒更新 WireGuard 端点?

创建 wireguard_reresolve-dns.timer 和 wireguard_reresolve-dns.service 文件,配置 OnCalendar=*:*:0/30 和 ExecStart 命令,然后启用并启动定时器。

WireGuard 官方对动态 DNS 有何建议?

官方指出 WireGuard 不会自动解析域名变化,建议定期运行 reresolve-dns 脚本,并提供了示例脚本和 systemd 定时器配置。

WireGuard 配置文件中 Endpoint 填域名是否有效?

无效,因为 WireGuard 在解析域名后不会再次检查 DNS 变化,所以即使 Endpoint 填域名,IP 变化后也不会自动更新。

🏷️

标签

➡️

继续阅读