无需重启即可添加 Wireguard 客户端

无需重启即可添加 Wireguard 客户端

我正在构建一个 Wireguard VPN 网络,我想在其中添加和删除服务器上的对等点,而无需重新启动服务或丢失与现有对等点的连接。尝试搜索结果,但没有找到可以满足我需求的解决方案(所有解决方案都会导致几秒钟的冻结或需要客户端重新与服务器握手)。是否可以使用 Wireguard 实现这一点?如果可以,如何实现?

答案1

我正在做一个类似的项目,我的结论是,你最好将所有配置都保留在自己的数据库中,并完全跳过用于对等设置的 wireguard 配置文件。你可能仍想使用该部分的 wireguard 配置文件[Interface],下面我的示例就是使用这个配置文件。但如果你需要,你也可以通过编程来实现这一点。

假设我们有一个名为 wg0 的接口,定义在 /etc/wireguard/wg0.conf

[Interface]
ListenPort = 51820
Address = 10.100.1.1
PrivateKey = <your private key>

在上面的配置中,有零个对等体。

添加新的对等点:

wg set wg0 peer "K30I8eIxuBL3OA43Xl34x0Tc60wqyDBx4msVm8VLkAE=" allowed-ips 10.101.1.2/32
ip -4 route add 10.101.1.2/32 dev wg0

删除对等体:

wg set wg0 peer "K30I8eIxuBL3OA43Xl34x0Tc60wqyDBx4msVm8VLkAE=" remove
ip -4 route delete 10.101.1.2/32 dev wg0

据我所知,这不会导致其他同行停机。

我用来找出ip -4 route ...要运行的命令的技术是简单地使用wg-quick up wg0并记录它吐出的命令。

答案2

您可以wg与一起使用wg-quickwg是一个低级命令,实际上是用于wg-quick在接口上执行 WireGuard 特定配置的命令(以及ip xxx用于基本网络部分的各种命令)。

其子命令wg syncconf与 结合使用,wg-quick strip旨在更新设置而不中断当前对等通信,配置文件中的设置已更改,如wg-quickwg的手册页:

使用输出一个删除了所有 wg-quick(8) 特定选项的配置文件,适合与 wg(8) 一起使用。

命令对于重新加载配置文件很有用无需中断活动会话

# wg syncconf wgnet0 <(wg-quick strip wgnet0)

syncconf <接口> <配置文件名>

类似setconf,但首先读回现有配置,然后只对配置文件和界面之间明显不同的内容进行更改.这比效率低得多setconf,但是 其好处是不会干扰当前的同伴会话。的内容必须符合下面配置文件格式描述的格式。

wg0因此重复该示例,如果通常使用的接口配置wg-quick/etc/wireguard/wg0.conf(或任何其他特定于分发的位置)中,并且[Peer]刚刚将一个部分添加(或删除)到此文件,以使此对等体可用(不再可用)而不中断与已配置对等体的通信,则在 bash shell 中以 root 身份运行:

wg syncconf wg0 <(wg-quick strip wg0)

有些部分必须手动完成,因为它们不由 处理wg,如 中wg-quick所述配置部分:附加路线,iptables 规则......

答案3

如果 wireguard 由 systemd 启动,则有一个命令可以要求 wireguard 重新加载配置:

systemctl 重新加载 wg-quick@wg0

应该重新加载 wg0 适配器的配置,而无需重新启动服务,也不会中断当前连接。

相关内容