wireguard


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 =
Address = 10.0.0.2/24, fd86:ea04:1115::5/64
連接客戶端和服務器固定鏈接
有兩種方法可以將對等信息添加到WireGuard。本指南將演示這兩種方法。

注意
停止sudo wg-quick down wg0客戶端和服務器上的接口。
方法1固定鏈接
第一種方法是wg0.conf使用服務器的公用密鑰,公用IP地址和端口直接編輯客戶端文件:

/etc/wireguard/wg0.conf
1
2
3
4
[Peer]
PublicKey =
Endpoint = :51820
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 endpoint :51820 allowed-ips 203.0.113.12/24,fd86:ea04:1115::5/64
驗證連接。可以從客戶端或服務器運行此命令:

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許可證發布的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM