WireGuard初體驗

工作和生活很忙的緣故,一直沒有好好維護Shadowsocks的Qt/C++分支,最近下定決心索性聲明好放棄維護了。偶然看到關於WireGuard的新聞,宣稱是一款現代、快速、安全的VPN工具,今天總算抽出來一點時間來試驗一番,下面來分享一下WireGuard之初體驗。

首先,在伺服器和客戶端安裝好WireGuard,官方文檔寫的很詳細。

然後在伺服器和客戶端都創建好一套密鑰文件,命令如下:

wg genkey > privatekey
wg pubkey < privatekey > publickey
chmod 600 privatekey
chmod 644 publickey

然後SSH連線到伺服器,首先確保sysctl裏面IPv4轉發已經啓用了,然後新建/etc/wireguard目錄,這個用於存放適用於wg-quick命令的配置文件(這些文件和wg命令不兼容)。然後新建文件/etc/wireguard/wg0.conf,內容如下:

[Interface]
Address    = 10.0.0.1/24
ListenPort = 51820
FwMark     = 51820
PrivateKey = <YOUR-SERVER-PRIVATE-kEY>
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

[Peer]
AllowedIPs = 10.0.0.2/32
PublicKey  = <YOUR-CLIENT-PUBLIC-KEY>

然後運行wg-quick up wg0 (不需要sudo權限)啓用WireGuard。如果測試通過需要服務在開機時自啓動,則可以添加到systemd的服務列表中:sudo systemctl enable wg-quick@wg0

這份配置文件僅僅允許最多一個客戶端同時連接(因爲限定了IP地址爲10.0.0.2)。如果需要允許多個客戶端同時連接,可以新增多個[Peer]設定。如果願意共享客戶端的私鑰,可以放寬IP的限制(多個IP用逗號隔開,或者/24整個子IP段)。

切記要把/etc/wireguard整個目錄chownroot用戶和組,內部的*.conf文件都要改爲僅用戶可讀寫(chmod 600)。

在客戶端你可以同樣的創建一個/etc/wireguard/wg0.conf文件,然後使用wg-quick來啓用和停止。如果你使用一個較新的Linux發行版和NetworkManager的話,你也可以選用透過NetworkManager圖形化的介面來控制客戶端的WireGuard,今天我調試了很久總算把這裏搞定(完全沒有使用wg-quick來得quick)。

WireGuard介面設定表

這裏的Private Key填客戶端生成的私鑰,這個必須是和伺服器配置文件中Peer的公鑰相匹配。監聽端口可以是其他端口並不重要,FwMark和伺服器保持一致。然後,點擊Peers按鈕配置好伺服器的信息。

WireGuard Peer設定

這裏的Public Key是伺服器生成的公鑰,允許的IP地址這裏我們填0.0.0.0/0, ::/0表示允許全部IP地址(這樣就讓系統把所有數據包全部轉發到伺服器)。Endpoint地址是伺服器的公網地址,端口就是伺服器WireGuard的監聽端口。確定之後回到NetworkManager,切換到IPv4選項卡,設定好要使用的IP地址(必須是伺服器Peer類別允許的IP地址段)。

WireGuard IPv4設定

比如這裏我們的地址是10.0.0.2,就是目前伺服器允許的唯一IP,確定好子網掩碼是255.255.255.0,然後網關地址是0.0.0.0

寫在最後,如果想要提升連接的安全係數,常見的如更換監聽端口到非默認值、加入預共享密鑰都是可以採取的,這裏就不贅述了。

參考文章: https://wiki.archlinux.org/index.php/WireGuard#Specific_use-case:_VPN_server

Author: librehat

自由軟體萬歲!

One thought on “WireGuard初體驗”

Comments are closed.