WireGuard是一種現代、安全、跨平台和通用的VPN實現,採用了先進的加密技術。與IPsec相比,它旨在更快、更簡單、更精簡和更實用,並且希望在效能上超越OpenVPN。 WireGuard可在多種環境中使用,並可部署在嵌入式介面、完全負載的骨幹路由器和超級電腦上,支援Linux、Windows、macOS、BSD、iOS和Android等作業系統。
WireGuard的特點
WireGuard提供了一個極其簡單但功能強大的介面,旨在像SSH一樣易於配置和部署。其主要特點包括:
- 簡單的網路介面
- 加密金鑰路由
- 內建漫遊和容器支持
需要注意的是,在撰寫本文時,WireGuard仍在積極開發中:其某些部分正朝著穩定的1.0版本努力,而其他部分已經穩定運作。
測試環境
在本指南中,我們的設定(主機名稱和公用IP)如下:
- 節點1 :tecmint-appserver1: 10.20.20.4
- 節點2 :tecmint-dbserver1: 10.20.20.3
如何在Linux發行版中安裝WireGuard
登入兩個節點並使用適當的命令安裝WireGuard,具體如下:
在RHEL 8中安裝WireGuard
bash
$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
$ sudo subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch)-rpms
$ sudo yum copr enable jdoss/wireguard
$ sudo yum install wireguard-dkms wireguard-tools
在CentOS 8中安裝WireGuard
bash
$ sudo yum install epel-release
$ sudo yum config-manager --set-enabled PowerTools
$ sudo yum copr enable jdoss/wireguard
$ sudo yum install wireguard-dkms wireguard-tools
在RHEL/CentOS 7中安裝WireGuard
bash
$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo curl -o /etc/yum.repos.d/jdoss-wireguard-epel-7.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repo
$ sudo yum install wireguard-dkms wireguard-tools
在Fedora中安裝WireGuard
bash
$ sudo dnf install wireguard-tools
在Debian中安裝WireGuard
『`bash
```
在Ubuntu中安裝WireGuard
bash
$ sudo add-apt-repository ppa:wireguard/wireguard
$ sudo apt-get update
$ sudo apt-get install wireguard
在OpenSUSE中安裝WireGuard
bash
$ sudo zypper addrepo -f obs://network:vpn:wireguard wireguard
$ sudo zypper install wireguard-kmp-default wireguard-tools
設定WireGuard VPN隧道
在兩個節點上完成WireGuard的安裝後,您可以重新啟動節點或使用以下命令從Linux核心中新增WireGuard模組:
bash
$ sudo modprobe wireguard
接下來,使用wg
工具在兩個節點上產生base64編碼的公鑰和私鑰,如下所示。
在節點1上
bash
$ umask 077
$ wg genkey > private_appserver1
在節點2上
bash
$ umask 077
$ wg genkey > private_dbserver1
$ wg pubkey < private_dbserver1
接下來,需要為WireGuard建立一個網路介面(例如wg0),並為新建立的網路介面指派IP位址(在本指南中,我們將使用網路192.168.10.0/24)。
在節點1上
bash
$ sudo ip link add dev wg0 type wireguard
$ sudo ip addr add 192.168.10.1/24 dev wg0
在節點2上
bash
$ sudo ip link add dev wg0 type wireguard
$ sudo ip addr add 192.168.10.2/24 dev wg0
若要查看附加的網路介面及其IP位址,請使用下列IP指令:
bash
$ ip ad
接下來,將每個對等體的私鑰分配給wg0網路接口,並啟用該接口,如下所示。
在節點1上
bash
$ sudo wg set wg0 private-key ./private_appserver1
$ sudo ip link set wg0 up
在節點2上
bash
$ sudo wg set wg0 private-key ./private_dbserver1
$ sudo ip link set wg0 up
現在,兩個連結都已啟用,各自與其私鑰相關聯,運行wg
實用程式以檢索對等體上的WireGuard介面配置。然後按照以下步驟建立WireGuard VPN隧道。
對等體(公鑰)、允許的IP(網路/子網路遮罩)和端點(公共IP:連接埠)來自對方對等體。
在節點1上(使用節點2的IP和公鑰)
bash
$ sudo wg
$ sudo wg set wg0 peer MDaeWgZVULXP4gvOj4UmN7bW/uniQeBionqJyzEzSC0= allowed-ips 192.168.10.0/24 endpoint 10.20.20.3:54371
在節點2上(使用節點1的IP和公鑰)
bash
$ sudo wg
$ sudo wg set wg0 peer 6yNLmpkbfsL2ijx7z996ZHl2bNFz9Psp9V6BhoHjvmk= allowed-ips 192.168.10.0/24 endpoint 10.20.20.4:42930
測試WireGuard VPN隧道
一旦創建了WireGuard VPN隧道,使用WireGuard網路介面的位址ping對方對等體。然後再次運行wg
工具以確認對等體之間的握手,如下所示。
在節點1上
bash
$ ping 192.168.10.2
$ sudo wg
在節點2上
bash
$ ping 192.168.10.1
$ sudo wg
總結
到此為止! WireGuard是一個現代、安全、簡單但功能強大且易於設定的VPN解決方案,展望未來。它仍在積極開發中,因此仍在進行中。您可以從WireGuard主頁獲取更多信息,特別是關於其內部工作原理和其他配置選項的信息。