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

Ant*_*319 9 linux configuration wireguard

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

A.B*_*A.B 13

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

其子命令wg syncconf与 一起使用,wg-quick strip旨在更新设置,而不会中断当前对等通信,并更改配置文件中的设置,如wg-quick和 的wg联机帮助页中所述:

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

strip命令对于在不中断活动会话的情况下重新加载配置文件很有用:

# wg syncconf wgnet0 <(wg-quick strip wgnet0)
Run Code Online (Sandbox Code Playgroud)

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

类似setconf,但首先读回现有的配置,并且只进行配置文件和接口之间明显不同的更改。这样做的效率要低得多setconf,但 好处是不会中断当前的对等会话。的内容必须采用下面配置文件格式描述的格式。

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

wg syncconf wg0 <(wg-quick strip wg0)
Run Code Online (Sandbox Code Playgroud)

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


小智 7

我正在开发一个类似的项目,我的结论是,您最好将所有配置保留在自己的数据库中,并完全跳过对等设置的wireguard 配置文件。您可能仍想使用该[Interface]部分的wireguard 配置文件,我在下面的示例中使用了该文件。但如果需要的话,您也可以通过编程来完成此操作。

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

[Interface]
ListenPort = 51820
Address = 10.100.1.1
PrivateKey = <your private key>
Run Code Online (Sandbox Code Playgroud)

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

添加一个新的对等点:

wg set wg0 peer "K30I8eIxuBL3OA43Xl34x0Tc60wqyDBx4msVm8VLkAE=" allowed-ips 10.101.1.2/32
ip -4 route add 10.101.1.2/32 dev wg0
Run Code Online (Sandbox Code Playgroud)

删除对等点:

wg set wg0 peer "K30I8eIxuBL3OA43Xl34x0Tc60wqyDBx4msVm8VLkAE=" remove
ip -4 route delete 10.101.1.2/32 dev wg0
Run Code Online (Sandbox Code Playgroud)

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

我用来确定ip -4 route ...要运行的命令的技术就是简单地使用wg-quick up wg0并记下它发出的命令。