用 NetworkManager 配置 WireGuard 虛擬私有網路
虛擬私有網路 應用廣泛。如今有各種方案可供使用,用戶可通過這些方案訪問任意類型的資源,同時保持其機密性與隱私性。
最近,WireGuard 因為其簡單性、速度與安全性成為最廣泛使用的虛擬私有網路協議之一。WireGuard 最早應用於 Linux 內核,但目前可以用在其他平台,例如 iOS、Android 等。
WireGuard 使用 UDP 作為其傳輸協議,並在 Critokey Routing(CKR)的基礎上建立對等節點之間的通信。每個對等節點(無論是伺服器或客戶端)都有一對 密鑰 (公鑰與私鑰),公鑰與許可 IP 間建立通信連接。有關 WireGuard 更多信息請訪問其 主頁。
本文描述了如何在兩個對等節點(PeerA 與 PeerB)間設置 WireGuard。兩個節點均運行 Fedora Linux 系統,使用 NetworkManager 進行持久性配置。
WireGuard 設置與網路配置
在 PeerA 與 PeerB 之間建立持久性虛擬私有網路連接只需三步:
- 安裝所需軟體包。
- 生成 密鑰對 。
- 配置 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 地址與掩碼。
- 該節點監聽的 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
已連接。現在,它可以和虛擬私有網路 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 '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
已連接。現在,它可以和虛擬私有網路 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 是一種簡單、輕巧和安全的選擇。它可以在對等節點之間基於 CryptoKey 路由建立安全的點對點連接,過程非常簡單。此外,NetworkManager 支持 WireGuard 介面,允許重啟後進行持久配置。
via: https://fedoramagazine.org/configure-wireguard-vpns-with-networkmanager/
作者:Maurizio Garcia 選題:lujun9972 譯者:DCOLIVERSUN 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive