輕鬆幾步搭建 WireGuard (快速安全的下一代 VPN)
WireGuard 是一個快速安全的新型 VPN 隧道程序,它簡單高效的特性特別適合在手機等低能耗設備上使用。
WireGuard 不同於 IPSec ,它的設計簡單(目前整體只有幾千行代碼),在不使用的情況下默認不會傳輸任何 UDP 數據包,而且能夠無縫漫遊在不同的 IP 地址間,這些特定都使它特別適合於移動設備的使用。目前 WireGuard 基於 Linux 內核實現,得到了 Linux 內核主要維護者 Greg KH 的肯定。下面介紹如何在 Ubuntu 16.04 搭建使用 WireGuard 。
搭建步驟
下載安裝 WireGuard (服務端和客戶端都需要安裝)
$ sudo add-apt-repository ppa:wireguard/wireguard
$ sudo apt-get update
$ sudo apt-get install wireguard
配置服務端相關參數,創建並編輯 /etc/wireguard/wg0.conf
,內容如下:
[Interface]
PrivateKey = <Private Key>
Address = 10.0.0.1/24
ListenPort = 56660
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
其中 PrivateKey
通過命令 wg genkey
生成。
啟動服務端 WireGuard
$ wg-quick up wg0
可以通過命令 wg
檢查啟動是否成功,成功的話會輸出如下內容:
interface: wg0
public key: xxxxxxxxxx
private key: (hidden)
listening port: 56660
將 WireGuard 設置成開機啟動
$ systemctl enable wg-quick@wg0
配置客戶端相關參數,創建並編輯 /etc/wireguard/wg0.conf
,內容如下:
[Interface]PrivateKey = <Private Key>Address = 10.0.0.3/24DNS = 8.8.8.8
[Peer]PublicKey = xxxxxxxxxxEndpoint = <Server Public IP>:56660AllowedIPs = 0.0.0.0/0
其中 PrivateKey
也是通過命令 wg genkey
生成, Peer
的 PublicKey
填入上面服務端 wg
命令返回的 public key
, Endpoint
的 IP 設置為服務端可訪問的公網 IP 。
啟動客戶端 WireGuard
$ wg-quick up wg0
啟動后同樣通過命令 wg
可查看公鑰。
在服務端添加客戶端信息
$ sudo wg set wg0 peer <Public Key> allowed-ips 10.0.0.3/24
Public Key
是客戶端的公鑰。
如果在服務端配置信息里設置了 SaveConfig = true
那麼剛才添加的客戶端參數信息會在服務端關閉時自動保存到配置文件中。如果想立即存儲剛設置的參數也可以執行命令 wg-quick save wg0
。
測試驗證
完成上述步驟后客戶端便能直接訪問服務端所在的網路了,可以通過 ping 10.0.0.1
進行驗證。
Tips
- WireGuard 能夠提供類似 TCP keepalive 的功能,如果客戶端在 NAT 子網可以考慮開啟這一選項。
- WireGuard 目前僅實現了 Linux 內核模塊版本,所以目前客戶端僅支持部分 Linux 和 Android 。