7.10. 使用 nmcli 配置 WireGuard 客户端
您可以通过在 NetworkManager 中创建连接配置集来配置 WireGuard 客户端。使用此方法让 NetworkManager 管理 WireGuard 连接。
此流程假设以下设置:
Client:
-
Private key:
aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A=
-
隧道 IPv4 地址:
192.0.2.2/24
-
频道 IPv6 地址:
2001:db8:1::2/32
-
Private key:
server:
-
公钥:
UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
-
隧道 IPv4 地址:
192.0.2.1/24
-
频道 IPv6 地址:
2001:db8:1::1/32
-
公钥:
先决条件
- 您已为服务器和客户端生成了公钥和私钥。
您知道以下信息:
- 客户端的私钥
- 客户端的静态隧道 IP 地址和子网掩码
- 服务器的公钥
- 服务器的静态隧道 IP 地址和子网掩码
流程
添加 NetworkManager WireGuard 连接配置集:
nmcli connection add type wireguard con-name client-wg0 ifname wg0
# nmcli connection add type wireguard con-name client-wg0 ifname wg0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令创建一个名为
client-wg0
的配置文件,并将虚拟接口wg0
分配给它。可选:配置 NetworkManager,使其不会自动启动
client-wg
连接:nmcli connection modify client-wg0 autoconnect no
# nmcli connection modify client-wg0 autoconnect no
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置客户端的隧道 IPv4 地址和子网掩码:
nmcli connection modify client-wg0 ipv4.method manual ipv4.addresses 192.0.2.2/24
# nmcli connection modify client-wg0 ipv4.method manual ipv4.addresses 192.0.2.2/24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置客户端的隧道 IPv6 地址和子网掩码:
nmcli connection modify client-wg0 ipv6.method manual ipv6.addresses 2001:db8:1::2/32
# nmcli connection modify client-wg0 ipv6.method manual ipv6.addresses 2001:db8:1::2/32
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要通过隧道路由所有流量,请将服务器的隧道 IP 地址设置为默认网关:
nmcli connection modify client-wg0 ipv4.gateway 192.0.2.1 ipv6.gateway 2001:db8:1::1
# nmcli connection modify client-wg0 ipv4.gateway 192.0.2.1 ipv6.gateway 2001:db8:1::1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过隧道路由所有流量需要在后续步骤中将此客户端上的
allowed-ips
设置为0.0.0.0/0;::/0
。请注意,通过隧道路由所有流量可能会影响到其他主机的连接,具体取决于服务器路由和防火墙配置。
将客户端的私钥添加到连接配置文件中:
nmcli connection modify client-wg0 wireguard.private-key "aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A="
# nmcli connection modify client-wg0 wireguard.private-key "aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A="
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您要允许与此客户端通信的每台服务器添加对等配置。您必须手动添加这些设置,因为
nmcli
工具不支持设置相应的连接属性。编辑
/etc/NetworkManager/system-connections/client-wg0.nmconnection
文件,并附加:[wireguard-peer.UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=] endpoint=server.example.com:51820 allowed-ips=192.0.2.1;2001:db8:1::1; persistent-keepalive=20
[wireguard-peer.UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=] endpoint=server.example.com:51820 allowed-ips=192.0.2.1;2001:db8:1::1; persistent-keepalive=20
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
[wireguard-peer.<public_key_of_the_server>]
条目定义了服务器的对等部分,部分名称有服务器的公钥。 -
endpoint
参数设置服务器的主机名或 IP 地址以及端口。客户端使用此信息来建立连接。 allowed-ips
参数设置可向这个客户端发送数据的 IP 地址列表。例如,将参数设置为:- 服务器隧道 IP 地址,以仅允许服务器与此客户端通信。上例中的值可配置这种情况。
-
0.0.0.0/0;::/0;
允许任何远程 IPv4 和 IPv6 地址与此客户端进行通信。使用此设置通过隧道路由所有流量,并使用 WireGuard 服务器作为默认网关。
-
可选的
persistent-keepalive
参数定义 WireGuard 将 keepalive 数据包发送给服务器的间隔(以秒为单位)。如果您在网络中使用具有网络地址转换(NAT)的客户端,或者防火墙在一段时间不活跃后关闭 UDP 连接,则设置此参数。
-
重新载入
client-wg0
连接配置文件:nmcli connection load /etc/NetworkManager/system-connections/client-wg0.nmconnection
# nmcli connection load /etc/NetworkManager/system-connections/client-wg0.nmconnection
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
重新激活
client-wg0
连接:nmcli connection up client-wg0
# nmcli connection up client-wg0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您在具有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能容易被重定向。有关详情和缓解步骤,请参阅 将 VPN 连接分配给专用的路由表,以防止连接绕过隧道。
验证
Ping 服务器的 IP 地址:
ping 192.0.2.1 ping6 2001:db8:1::1
# ping 192.0.2.1 # ping6 2001:db8:1::1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示
wg0
设备的接口配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在输出中显示私钥,请使用
WG_HIDE_KEYS=never wg show wg0
命令。请注意,如果您已经通过 VPN 隧道发送流量,则输出只有
latest handshake
和transfer
条目。显示
wg0
设备的 IP 配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow