虛擬專用網絡 (VPN) 被廣泛使用。現在有各種解決方案可供用戶訪問各種資源,同時保持機密性和隱私性。
如今,最常用的 VPN 協議之一是 WireGuard,它提供簡單、速度和安全性。 WireGuard 實施始於 Linux 內核,但現在可在其他平台上使用,例如 iOS 和 Android。
WireGuard 使用 UDP 作為其傳輸協議,並基於 Critokey Routing (CKR) 建立對等點之間的通信。所有對等點,無論是服務器還是客戶端,都有一個密鑰對(公共和私有),並且在公共密鑰和允許它們通信的 IP 之間存在鏈接。 有關 WireGuard 的更多信息,請訪問其網站。 頁.
本文介紹如何在兩個對等點(PeerA 和 PeerB)之間設置 WireGuard。兩個節點都運行 Fedora Linux,並且都使用 NetworkManager 進行持久配置。
WireGuard 設置和網絡配置
在 PeerA 和 PeerB 之間建立持久的 VPN 連接還剩下三個步驟。
- 安裝所需的軟件包。
- 生成密鑰對。
- 配置 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 協議和加密數據的通信。
結論是
虛擬專用網絡 (VPN) 非常常見。 在用於部署 VPN 的各種協議和工具中,WireGuard 是一種簡單、輕量且安全的選項。這允許基於 CryptoKey 路由的對等點之間的安全點對點連接,使該過程非常容易。此外,NetworkManager 支持 WireGuard 接口,允許在重新啟動後進行持久配置。