WireGuard是一種使用最新加密技術的簡單,快速且安全的VPN。它的源代碼占用空間較小,旨在比其他VPN協議(如OpenVPN和IPSec)更快,更精簡。WireGuard仍在開發中,但是即使處於未優化的狀態,它也比流行的OpenVPN協議要快。
WireGuard配置就像設置SSH一樣簡單。通過服務器和客戶端之間的公共密鑰交換來建立連接。僅允許在其相應的服務器配置文件中具有其公鑰的客戶端連接。WireGuard設置了標准的網絡接口(例如wg0和wg1),其行為與常見的eth0接口非常相似。這樣就可以使用ifconfig和等標准工具來配置和管理WireGuard接口ip。
本指南將在運行Ubuntu 18.04的Linode和客戶端之間配置簡單的對等連接。客戶端可以是您的本地計算機,也可以是其他Linode。
警告
不要將WireGuard用於關鍵應用。該項目仍在進行安全測試,將來可能會頻繁收到重要更新。
在你開始之前固定鏈接
您將需要對Linode或具有sudo特權的用戶帳戶具有root訪問權限。
設置系統的主機名。
注意
該GRUB 2內核需要本指南。現在GRUB 2,默認情況下,所有新Linode的所有發行版都使用內核啟動。但是,如果您正在運行較早的發行版,則需要檢查以查看正在運行哪個內核。您可以使用《更新內核指南》來檢查您的內核版本並使用Cloud Manager對其進行更改。選擇GRUB 2從引導設置:選擇一個內核中的第4步下拉菜單更新你的Linode內核具有的Linode的雲管理。
安裝WireGuard固定鏈接
將Wireguard存儲庫添加到您的源列表中。然后,Apt將自動更新程序包緩存。
sudo add-apt-repository ppa:wireguard/wireguard
安裝Wireguard。該wireguard軟件包將安裝所有必需的依賴項。
sudo apt install wireguard
然后,DKMS將構建Wireguard內核模塊。如果成功,您將看到以下輸出:
wireguard:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.15.0-43-generic/updates/dkms/
depmod...................
DKMS: install completed.
Setting up wireguard (0.0.20181218-wg1~bionic) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
注意
如果安裝完成但未出現輸出,則很可能是您的內核配置不正確。要仔細檢查,請發出lsmod | grep wireguard命令。其輸出不應為空。請參考上一節進行故障排除。
配置WireGuard服務器固定鏈接
為WireGuard服務器生成私鑰和公鑰對:
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
這會將私鑰和公鑰都保存到您的主目錄中。可以分別使用cat privatekey和查看它們cat publickey。
創建文件/etc/wireguard/wg0.conf並添加以下指示的內容。您需要在PrivateKey字段中輸入服務器的私鑰,並在字段中輸入其IP地址Address。
/etc/wireguard/wg0.conf
1
2
3
4
5
6
7
[Interface]
PrivateKey =
Address = 10.0.0.1/24, fd86:ea04:1115::1/64
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
SaveConfig = true
地址定義WireGuard服務器的專用IPv4和IPv6地址。VPN網絡中的每個對等方對於此字段均應具有唯一值。
ListenPort指定WireGuard將用於傳入連接的端口。
PostUp和PostDown分別定義了在打開或關閉接口之后要運行的步驟。在這種情況下,iptables用於設置Linux IP偽裝規則,以允許所有客戶端共享服務器的IPv4和IPv6地址。一旦隧道斷開,規則將被清除。
當服務運行時,只要添加新的對等方,SaveConfig就會告訴配置文件自動更新。
設置防火牆規則固定鏈接
允許SSH連接和WireGuard的VPN端口:
sudo ufw allow 22/tcp
sudo ufw allow 51820/udp
sudo ufw enable
驗證設置:
sudo ufw status verbose
啟動Wireguard服務固定鏈接
啟動Wireguard:
wg-quick up wg0
注意
wg-quick可以方便地包裝許多常用功能wg。您可以使用以下方式關閉wg0界面wg-quick down wg0
啟用Wireguard服務以在啟動時自動重新啟動:
sudo systemctl enable wg-quick@wg0
使用以下兩個命令檢查VPN隧道是否正在運行:
sudo wg show
您應該看到類似的輸出:
user@ubuntu:~$ sudo wg show
interface: wg0
public key: vD2blmqeKsV0OU0GCsGk7NmVth/+FLhLD1xdMX5Yu0I=
private key: (hidden)
listening port: 51820
ifconfig wg0
您的輸出應類似於以下內容:
user@ubuntu:~$ ifconfig wg0
wg0: flags=209 mtu 1420
inet 10.0.0.1 netmask 255.255.255.0 destination 10.0.0.1
inet6 fd86:ea04:1115::1 prefixlen 64 scopeid 0x0
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Wireguard客戶端固定鏈接
設置客戶端的過程類似於設置服務器。當使用Ubuntu作為客戶端的操作系統時,客戶端和服務器之間的唯一區別是配置文件的內容。如果您的客戶端使用Ubuntu,請按照以上各節和本節中提供的步驟進行操作。有關在其他操作系統上的安裝說明,請參閱WireGuard文檔。
如果尚未為客戶端生成密鑰對,請執行以下操作:
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
在客戶端和服務器的配置文件之間的主要區別,wg0.conf是它必須包含自己的 IP地址,並且不包含ListenPort,PostUP,PostDown,和SaveConfig值。
/etc/wireguard/wg0.conf
1
2
3
[Interface]
PrivateKey =
注意
停止sudo wg-quick down wg0客戶端和服務器上的接口。
方法1固定鏈接
第一種方法是wg0.conf使用服務器的公用密鑰,公用IP地址和端口直接編輯客戶端文件:
/etc/wireguard/wg0.conf
1
2
3
4
[Peer]
PublicKey =
Endpoint =
AllowedIPs = 10.0.0.2/24, fd86:ea04:1115::5/64
wg在客戶端和服務器上啟用服務:
wg-quick up wg0
systemctl enable wg-quick@wg0
方法2固定鏈接
添加對等信息的第二種方法是使用命令行。由於SaveConfigWireguard服務器的配置文件中指定了該選項,因此該信息將自動添加到配置文件中。
從服務器運行以下命令。將示例IP地址替換為客戶端的IP地址:
sudo wg set wg0 peer
驗證連接。可以從客戶端或服務器運行此命令:
sudo wg
無論選擇哪種方法將對等信息添加到WireGuard,如果安裝成功,命令的輸出中都應該有一個Peer部分sudo wg。
user@localhost:~$ sudo wg
interface: wg0
public key: vD2blmqeKsV0OU0GCsGk7NmVth/+FLhLD1xdMX5Yu0I=
private key: (hidden)
listening port: 51820
peer: iMT0RTu77sDVrX4RbXUgUBjaOqVeLYuQhwDSU+UI3G4=
endpoint: 10.0.0.2:51820
allowed ips: 10.0.0.2/24, fd86:ea04:1115::/64
wg0.conf重新啟動服務后,此對等部分將自動添加到。如果要立即將此信息添加到配置文件中,可以運行:
wg-quick save wg0
可以使用相同的過程添加其他客戶端。
測試連接固定鏈接
返回客戶端並ping服務器:
ping 10.0.0.1
sudo wg
運行wg命令的輸出的最后兩行應類似於:
latest handshake: 1 minute, 17 seconds ago
transfer: 98.86 KiB received, 43.08 KiB sent
這表明您現在在服務器和客戶端之間建立了專用連接。您也可以從服務器ping客戶端,以驗證連接是否可以同時進行。
下一步固定鏈接
可以擴展本指南中使用的過程以配置網絡拓撲。如前所述,Wireguard是一項不斷發展的技術。如果使用WireGuard,則應監視官方文檔和待辦事項列表以獲取重要更新和新功能/即將推出的功能。
加入我們的社區固定鏈接
查找答案,提出問題並幫助他人。
由Disqus提供動力的評論
本指南是根據CC BY-ND 4.0許可證發布的。