在Linode的Ubuntu安裝WireGuard VPN

WireGuard是一種簡單,快速,安全的VPN,採用最先進的加密技術。它具有較小的源代碼佔用空間,旨在比其他VPN協議(如OpenVPN和IPSec)更快,更精簡。WireGuard仍在開發中,但即使在未優化的狀態下,它也比流行的OpenVPN協議更快。

在Linode的Ubuntu安裝WireGuard VPN 2

WireGuard配置就像設置SSH一樣簡單。通過服務器和客戶端之間的公鑰交換建立連接。只允許在其對應的服務器配置文件中具有其公鑰的客戶端進行連接。WireGuard設置標準網絡接口(例如wg0wg1),其行為與常見的eth0接口非常相似。這樣就可以使用ifconfig和等標準工具配置和管理WireGuard接口ip

目前,WireGuard僅適用於Linux。本指南將在運行Ubuntu 18.04的Linode與客戶端之間配置簡單的對等連接。客戶端可以是您的本地計算機或其他Linode。


警告不要將WireGuard用於關鍵應用程序。
該項目仍在進行安全測試,未來可能會經常收到關鍵更新。

開始之前

  • 您需要root權限才能訪問您的Linode或具有sudo權限的用戶帳戶。
  • 設置系統的主機名。

安裝WireGuard

1將Wireguard存儲庫添加到源列表中。然後,Apt將自動更新包緩存。

sudo add-apt-repository ppa:wireguard/wireguard

2.安裝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服務器

1. 為WireGuard服務器生成私鑰和公鑰對:

umask 077
wg genkey | tee privatekey | wg pubkey > publickey

這將保存您的主目錄的私鑰和公鑰; 他們可以分別用cat privatekey和觀看cat publickey

2. 創建文件/etc/wireguard/wg0.conf並添加下面顯示的內容。您需要在該PrivateKey字段中輸入服務器的私鑰,並在該字段中輸入其IP地址Address

/etc/wireguard/wg0.conf
[Interface]
PrivateKey = <Private Key>
Address = 203.0.113.5/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
  • Address定義WireGuard服務器的專用IPv4和IPv6地址。VPN網絡中的每個對等體都應具有該字段的唯一值。
  • ListenPort指定WireGuard將用於傳入連接的端口。
  • PostUpPostDown分別定義了打開或關閉界面後要運行的步驟。在這種情況下,iptables用於設置Linux IP偽裝規則以允許所有客戶端共享服務器的IPv4和IPv6地址。一旦隧道關閉,規則將被清除。
  • SaveConfig告訴配置文件在服務運行時添加新對等體時自動更新。

設置防火牆規則

  1. 允許SSH連接和WireGuard的VPN端口:
sudo ufw allow 22/tcp
sudo ufw allow 51820/udp
sudo ufw enable

2. 驗證設置:

sudo ufw status verbose

啟動Wireguard Service

  1. 啟動Wireguard:
wg-quick up wg0


wg-quick是許多常見功能的便捷包裝
wg
您可以使用關閉wg0界面
wg-quick down wg0

2. 使Wireguard服務在引導時自動重新啟動:

sudo systemctl enable [email protected]

3. 使用以下兩個命令檢查VPN隧道是否正在運行:

sudo wg show

您應該看到類似的輸出:

[email protected]:~$ sudo wg show
interface: wg0
public key: vD2blmqeKsV0OU0GCsGk7NmVth/+FLhLD1xdMX5Yu0I=
private key: (hidden)
listening port: 51820
ifconfig wg0

您的輸出應類似於以下內容:

[email protected]:~$ ifconfig wg0
wg0: flags=209 mtu 1420
inet 203.0.113.5 netmask 255.255.255.0 destination 203.0.113.5
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文檔

1.如果您還沒有為客戶端生成密鑰對:

umask 077
wg genkey | tee privatekey | wg pubkey > publickey

在客戶端和服務器的配置文件之間的主要區別,wg0.conf是它必須包含自己的 IP地址,並且不包含ListenPortPostUPPostDown,和SaveConfig值。
/etc/wireguard/wg0.conf

[Interface]
PrivateKey = <Output of privatekey file that contains your private key>
Address = 203.0.123.12/24, fd86:ea04:1115::5/64

連接客戶端和服務器

有兩種方法可以向WireGuard添加對等信息; 本指南將演示這兩種方法。

  1. 第一種方法是wg0.conf使用服務器的公鑰,公共IP地址和端口直接編輯客戶端的文件:/etc/wireguard/wg0.conf:
[Peer]
PublicKey = <Server Public key>
Endpoint = <Server Public IP>:51820
AllowedIPs = 203.0.123.12/24, fd86:ea04:1115::5/64

2.啟用wg服務:

wg-quick up wg0
systemctl enable [email protected]

3.添加對等信息的第二種方法是使用命令行。由於SaveConfigWireguard服務器配置文件中指定的選項,此信息將自動添加到配置文件中。

從服務器運行以下命令。將示例IP地址替換為客戶端的IP地址:

sudo wg set wg0 peer <Client Public Key> endpoint <Client IP address>:51820 allowed-ips 203.0.123.12/24,fd86:ea04:1115::5/64

4.驗證連接。可以從客戶端或服務器運行此命令:

sudo wg

無論您選擇哪種方法將對等信息添加到WireGuard,如果設置成功,命令輸出中應該有一個Peer部分sudo wg

  
[email protected]:~$ sudo wg
interface: wg0
public key: vD2blmqeKsV0OU0GCsGk7NmVth/+FLhLD1xdMX5Yu0I=
private key: (hidden)
listening port: 51820

peer: iMT0RTu77sDVrX4RbXUgUBjaOqVeLYuQhwDSU+UI3G4=
endpoint: 203.0.123.12:51820
allowed ips: 203.0.123.12/24, fd86:ea04:1115::/64

wg0.conf重新啟動服務時,將自動添加此Peer部分。如果您想立即將此信息添加到配置文件中,您可以運行:

wg-quick save wg0

可以使用相同的過程添加其他客戶端。

測試連接

返回客戶端並ping服務器:

ping 192.168.2.1
sudo wg

運行wg命令的輸出的最後兩行應類似於:

  
latest handshake: 1 minute, 17 seconds ago
transfer: 98.86 KiB received, 43.08 KiB sent

這表示您現在在服務器和客戶端之間擁有專用連接。您還可以從服務器ping客戶端以驗證連接是否同時工作。

可以擴展本指南中使用的過程以配置網絡拓撲。如前所述,Wireguard是一項不斷發展的技術。如果您使用WireGuard,則應監控官方文檔待辦事項列表,以獲取關鍵更新和新/即將推出的功能。

1 comments On 在Linode的Ubuntu安裝WireGuard VPN

Leave a reply:

Your email address will not be published.