Linux中國

用 NetworkManager 配置 WireGuard 虛擬私有網路

虛擬私有網路 Virtual Private Networks 應用廣泛。如今有各種方案可供使用,用戶可通過這些方案訪問任意類型的資源,同時保持其機密性與隱私性。

最近,WireGuard 因為其簡單性、速度與安全性成為最廣泛使用的虛擬私有網路協議之一。WireGuard 最早應用於 Linux 內核,但目前可以用在其他平台,例如 iOS、Android 等。

WireGuard 使用 UDP 作為其傳輸協議,並在 Critokey Routing(CKR)的基礎上建立對等節點之間的通信。每個對等節點(無論是伺服器或客戶端)都有一對 密鑰 key (公鑰與私鑰),公鑰與許可 IP 間建立通信連接。有關 WireGuard 更多信息請訪問其 主頁

本文描述了如何在兩個對等節點(PeerA 與 PeerB)間設置 WireGuard。兩個節點均運行 Fedora Linux 系統,使用 NetworkManager 進行持久性配置。

WireGuard 設置與網路配置

在 PeerA 與 PeerB 之間建立持久性虛擬私有網路連接只需三步:

  1. 安裝所需軟體包。
  2. 生成 密鑰對 key pair
  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 介面命名規則為 wg0wg1 等等。完成下述步驟為 WireGuard 介面創建配置:

  • PeerA 節點上配置想要的 IP 地址與掩碼。
  • 該節點監聽的 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 &apos;wg0&apos; (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 已連接。現在,它可以和虛擬私有網路 IP 地址為 172.16.1.2 的對等節點通信。

在 PeerB 上配置 WireGuard 介面

現在可以在第二個對等節點上創建 wg0 介面的配置文件了。確保你已經完成以下步驟:

  • PeerB 節點上設置 IP 地址與掩碼。
  • 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 &apos;wg0&apos; (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 已連接。現在,它可以和虛擬私有網路 IP 地址為 172.16.1.254 的對等節點通信。

驗證節點間通信

完成上述步驟後,兩個對等節點可以通過虛擬私有網路連接相互通信,以下是 ICMP 測試結果:

[root@peerb ~]# 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 流量

總結

虛擬私有網路很常見。在用於部署虛擬私有網路的各種協議和工具中,WireGuard 是一種簡單、輕巧和安全的選擇。它可以在對等節點之間基於 CryptoKey 路由建立安全的點對點連接,過程非常簡單。此外,NetworkManager 支持 WireGuard 介面,允許重啟後進行持久配置。

via: https://fedoramagazine.org/configure-wireguard-vpns-with-networkmanager/

作者:Maurizio Garcia 選題:lujun9972 譯者:DCOLIVERSUN 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國