使用 NetworkManager 配置 WireGuard VPN


虛擬專用網絡 (VPN) 被廣泛使用。現在有各種解決方案可供用戶訪問各種資源,同時保持機密性和隱私性。

如今,最常用的 VPN 協議之一是 WireGuard,它提供簡單、速度和安全性。 WireGuard 實施始於 Linux 內核,但現在可在其他平台上使用,例如 iOS 和 Android。

WireGuard 使用 UDP 作為其傳輸協議,並基於 Critokey Routing (CKR) 建立對等點之間的通信。所有對等點,無論是服務器還是客戶端,都有一個密鑰對(公共和私有),並且在公共密鑰和允許它們通信的 IP 之間存在鏈接。 有關 WireGuard 的更多信息,請訪問其網站。 .

本文介紹如何在兩個對等點(PeerA 和 PeerB)之間設置 WireGuard。兩個節點都運行 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 接口,允許在重新啟動後進行持久配置。