Wireguard 是一種新的 VPN,旨在取代 IPSec 和 OpenVPN。設計簡單安全, 噪聲協議框架像 .OpenSSH 一樣,有些人發現 Wireguard 易於配置。本文將向您展示如何部署和使用它。
由於它的積極發展,它可能不是生產機器的最佳選擇。但是,正在考慮將 Wireguard 包含在 Linux 內核中。我有一個設計 形式驗證* 並被證明可以抵禦多種威脅。
部署 Wireguard 時,請將您的 Fedora Linux 系統更新到最新版本。這是因為 Wireguard 沒有穩定的發布節奏。
設置時區
要查看和設置時區,首先顯示當前時間信息。
timedatectl
然後根據需要設置正確的時區(例如歐洲/倫敦)。
timedatectl set-timezone Europe/London
請記住,系統的實時時鐘 (RTC) 可能仍設置為 UTC 或其他時區。
安裝護線
要安裝,請啟用項目的 COPR 存儲庫,然後使用 sudo 與 dnf 一起安裝。
$ sudo dnf copr enable jdoss/wireguard $ sudo dnf install wireguard-dkms wireguard-tools
安裝後,將有兩個新命令可用於支持 systemd。
- 根據: Wireguard 接口配置
- 工作組快 啟動 VPN 隧道
創建一個 Wireguard 配置目錄並應用 077 umask。 077 的 umask 允許文件所有者(root)的讀、寫和運行權限,但禁止所有其他用戶的讀、寫和運行權限。
mkdir /etc/wireguard cd /etc/wireguard umask 077
生成密鑰對
生成私鑰並從中獲取公鑰。
$ wg genkey > /etc/wireguard/privkey $ wg pubkey < /etc/wireguard/privkey > /etc/wireguard/publickey
或者,您可以一次完成所有操作。
wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey
一個在這裡 虛擬地址生成器, 對某些人來說可能很有趣。您還可以生成預共享密鑰以提供一些量子保護。
wg genpsk > psk
這在服務器和客戶端上是相同的值,因此您只需要運行該命令一次。
配置 Wireguard 服務器和客戶端
對於客戶端和服務器 [Interface] 該選項指定分配給接口的 IP 地址以及私鑰。
對於每個對等點(服務器和客戶端) [Peer] 它分別包含一個 PublicKey 部分和一個 PresharedKey 部分。此外,此塊可以列出可以使用隧道的允許 IP 地址。
服務器
當接口啟動並啟用偽裝時,會添加防火牆規則。需要注意的是接口的/24IPv4地址範圍,與客戶端不同。編輯 /etc/wireguard/wg0.conf 文件,使用服務器 IP 地址作為 AllowedIPs 的地址和客戶端 IP 地址,如下所示:
[Interface] Address = 192.168.2.1/24, fd00:7::1/48 PrivateKey = <SERVER_PRIVATE_KEY> PostUp = firewall-cmd --zone=public --add-port 51820/udp && firewall-cmd --zone=public --add-masquerade PostDown = firewall-cmd --zone=public --remove-port 51820/udp && firewall-cmd --zone=public --remove-masquerade ListenPort = 51820 [Peer] PublicKey = <CLIENT_PUBLIC_KEY> PresharedKey = LpI+UivLx1ZqbzjyRaWR2rWN20tbBsOroNdNnjKLMQ= AllowedIPs = 192.168.2.2/32, fd00:7::2/48
將以下內容添加到 /etc/sysctl.conf 以允許轉發 IP 數據包。
net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1
加載新設置。
$ sysctl -p
重新啟動後會保留傳輸。
客戶
客戶端和服務器配置非常相似,但可選的附加條目 PersistentKeepalive 設置為 30 秒。這是為了防止 NAT 引起問題,根據您的配置,這可能不是必需的。 如果將 AllowedIPs 設置為 0.0.0.0/0,則所有流量都將通過隧道轉發。使用客戶端的 IP 地址作為地址和端點的服務器 IP 地址編輯客戶端的 /etc/wireguard/wg0.conf 文件,如下所示:
[Interface] Address = 192.168.2.2/32, fd00:7::2/48 PrivateKey = <CLIENT_PRIVATE_KEY> [Peer] PublicKey = <SERVER_PUBLIC_KEY> PresharedKey = LpI+UivLx1ZqbzjyRaWR2rWN20tbBsOroNdNnjWKLM= AllowedIPs = 0.0.0.0/0, ::/0 Endpoint = <SERVER_IP>:51820 PersistentKeepalive = 30
測試線衛
啟動並檢查服務器和客戶端的隧道狀態。
$ systemctl start [email protected] $ systemctl status [email protected]
要測試連接,請嘗試以下操作:
ping google.com ping6 ipv6.google.com
然後檢查外部IP地址。
dig +short myip.opendns.com @resolver1.opendns.com dig +short -6 myip.opendns.com aaaa @resolver1.ipv6-sandbox.opendns.com
* 在這個意義上,“形式驗證”證明了該設計具有數學上正確的消息和密鑰秘密、傳輸秘密、相互認證、會話唯一性、通道綁定和重放阻力。密鑰洩露模擬和拒絕服務器攻擊。