使用 NetworkManager 配置 WireGuard VPN

[ad_1]

虚拟专用网络 (VPN) 被广泛使用。 现在有不同的解决方案可供用户访问任何类型的资源,同时保持他们的机密性和隐私。

最近,最常用的 VPN 协议之一是 WireGuard,因为它提供了简单、速度和安全性。 WireGuard 的实现始于 Linux 内核,但目前可用于其他平台,如 iOS 和 Android 等。

WireGuard 使用 UDP 作为其传输协议,并基于 Critokey Routing (CKR) 建立对等点之间的通信。 每个对等点,无论是服务器还是客户端,都有一对密钥(公钥和私钥),并且公钥和允许的 IP 之间存在链接以进行通信。 有关 WireGuard 的更多信息,请访问其 .

本文介绍如何在两个对等方之间设置 WireGuard:PeerA 和 PeerB。 两个节点都在运行 Fedora Linux 和两者都使用 NetworkManager 进行持久配置。

WireGuard 设置和网络配置

您距离在 PeerA 和 PeerB 之间建立持久的 VPN 连接只有三步之遥:

  1. 安装所需的软件包。
  2. 生成密钥对。
  3. 配置 WireGuard 接口。

安装

在两个对等点(PeerA 和 PeerB)上安装 wireguard-tools 包:

$ sudo -i
# dnf -y install wireguard-tools

该软件包可在 Fedora Linux 更新存储库。 它在 /etc/wireguard/ 创建一个配置目录。 您将在此处创建密钥和接口配置文件。

生成密钥对

接下来,使用 wg 实用程序在每个节点上生成公钥和私钥:

# cd /etc/wireguard
# wg genkey | tee privatekey | wg pubkey > publickey

在 PeerA 上配置 WireGuard 接口

WireGuard 接口使用名称:wg0、wg1 等。 为 WireGuard 接口创建配置。 为此,您需要以下物品:

  • 您要在 PeerA 节点中配置的 IP 地址和 MASK。
  • 此对等方侦听的 UDP 端口。
  • PeerA 的私钥。
# cat << EOF > /etc/wireguard/wg0.conf
[Interface]
Address = 172.16.1.254/24
SaveConfig = true
ListenPort = 60001
PrivateKey = mAoO2RxlqRvCZZoHhUDiW3+zAazcZoELrYbgl+TpPEc=

[Peer]
PublicKey = IOePXA9igeRqzCSzw4dhpl4+6l/NiQvkDSAnj5LtShw=
AllowedIPs = 172.16.1.2/32
EOF

允许 UDP 流量通过此对等方将侦听的端口:

# firewall-cmd --add-port=60001/udp --permanent --zone=public
# firewall-cmd --reload
success

最后,将接口配置文件导入 NetworkManager。 因此,重新启动后 WireGuard 界面将继续存在。

# nmcli con import type wireguard file /etc/wireguard/wg0.conf
Connection 'wg0' (21d939af-9e55-4df2-bacf-a13a4a488377) successfully added.

验证设备 wg0 的状态:

# wg
interface: wg0
  public key: FEPcisOjLaZsJbYSxb0CI5pvbXwIB3BCjMUPxuaLrH8=
  private key: (hidden)
  listening port: 60001

peer: IOePXA9igeRqzCSzw4dhpl4+6l/NiQvkDSAnj5LtShw=
  allowed ips: 172.16.1.2/32

# nmcli -p device show wg0

===============================================================================
                             Device details (wg0)
===============================================================================
GENERAL.DEVICE:                         wg0
-------------------------------------------------------------------------------
GENERAL.TYPE:                           wireguard
-------------------------------------------------------------------------------
GENERAL.HWADDR:                         (unknown)
-------------------------------------------------------------------------------
GENERAL.MTU:                            1420
-------------------------------------------------------------------------------
GENERAL.STATE:                          100 (connected)
-------------------------------------------------------------------------------
GENERAL.CONNECTION:                     wg0
-------------------------------------------------------------------------------
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveC>
-------------------------------------------------------------------------------
IP4.ADDRESS[1]:                         172.16.1.254/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 172.16.1.0/24, nh = 0.0.0.0, mt =>
-------------------------------------------------------------------------------
IP6.GATEWAY:                            --
-------------------------------------------------------------------------------

以上输出显示接口 wg0 已连接。 它现在能够与 VPN IP 地址为 172.16.1.2 的对等方通信。

在 PeerB 中配置 WireGuard 接口

是时候为第二个对等体上的 wg0 接口创建配置文件了。 确保您具备以下条件:

  • 在 PeerB 上设置的 IP 地址和 MASK。
  • PeerB 的私钥。
  • PeerA 的公钥。
  • PeerA 的 IP 地址或主机名以及它正在侦听 WireGuard 流量的 UDP 端口。
# cat << EOF > /etc/wireguard/wg0.conf
[Interface]
Address = 172.16.1.2
SaveConfig = true
PrivateKey = UBiF85o7937fBK84c2qLFQwEr6eDhLSJsb5SAq1lF3c=

[Peer]
PublicKey = FEPcisOjLaZsJbYSxb0CI5pvbXwIB3BCjMUPxuaLrH8=
AllowedIPs = 172.16.1.254/32
Endpoint = peera.example.com:60001
EOF

最后一步是将接口配置文件导入 NetworkManager。 正如我之前提到的,这允许 WireGuard 接口在重新启动后具有持久配置。

# nmcli con import type wireguard file /etc/wireguard/wg0.conf
Connection 'wg0' (39bdaba7-8d91-4334-bc8f-85fa978777d8) successfully added.

验证设备 wg0 的状态:

# wg
interface: wg0
  public key: IOePXA9igeRqzCSzw4dhpl4+6l/NiQvkDSAnj5LtShw=
  private key: (hidden)
  listening port: 47749

peer: FEPcisOjLaZsJbYSxb0CI5pvbXwIB3BCjMUPxuaLrH8=
  endpoint: 192.168.124.230:60001
  allowed ips: 172.16.1.254/32

# nmcli -p device show wg0

===============================================================================
                             Device details (wg0)
===============================================================================
GENERAL.DEVICE:                         wg0
-------------------------------------------------------------------------------
GENERAL.TYPE:                           wireguard
-------------------------------------------------------------------------------
GENERAL.HWADDR:                         (unknown)
-------------------------------------------------------------------------------
GENERAL.MTU:                            1420
-------------------------------------------------------------------------------
GENERAL.STATE:                          100 (connected)
-------------------------------------------------------------------------------
GENERAL.CONNECTION:                     wg0
-------------------------------------------------------------------------------
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveC>
-------------------------------------------------------------------------------
IP4.ADDRESS[1]:                         172.16.1.2/32
IP4.GATEWAY:                            --
-------------------------------------------------------------------------------
IP6.GATEWAY:                            --
-------------------------------------------------------------------------------

以上输出显示接口 wg0 已连接。 它现在能够与 VPN IP 地址为 172.16.1.254 的对等方通信。

验证对等点之间的连接

执行前面描述的过程后,两个对等方可以通过 VPN 连接相互通信,如以下 ICMP 测试所示:

[[email protected] ~]# ping 172.16.1.254 -c 4
PING 172.16.1.254 (172.16.1.254) 56(84) bytes of data.
64 bytes from 172.16.1.254: icmp_seq=1 ttl=64 time=0.566 ms
64 bytes from 172.16.1.254: icmp_seq=2 ttl=64 time=1.33 ms
64 bytes from 172.16.1.254: icmp_seq=3 ttl=64 time=1.67 ms
64 bytes from 172.16.1.254: icmp_seq=4 ttl=64 time=1.47 ms

在这种情况下,如果您在 PeerA 的端口 60001 上捕获 UDP 流量,您将看到依赖于 WireGuard 协议和加密数据的通信:

依靠 WireGuard 协议捕获对等点之间的 UDP 流量

结论

虚拟专用网络 (VPN) 非常普遍。 在用于部署 VPN 的各种协议和工具中,WireGuard 是一种简单、轻量且安全的选择。 它允许基于 CryptoKey 路由的对等点之间进行安全的点对点连接,并且该过程非常简单。 此外,NetworkManager 支持 WireGuard 接口,允许在重新启动后进行持久配置。

[ad_2]

Related Posts