使用 Wireguard 構建虛擬專用網絡 – Linux 技術博客


Wireguard 是一種新的 VPN,旨在取代 IPSec 和 OpenVPN。它設計簡單且安全,採用最新技術,例如: 噪聲協議框架一些人認為 Wireguard 與 OpenSSH 一樣易於配置。本文介紹如何部署和使用它。

它目前正在積極開發中,可能不是生產機器的最佳選擇。但是,正在考慮將 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。 umask 077 允許文件所有者 (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 地址。

服務器

添加了防火牆規則以在接口出現時啟用偽裝。請務必注意與客戶端不同的接口上的 /24 IPv4 地址範圍。 編輯 /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 將通過隧道轉發所有流量。編輯客戶端的 /etc/wireguard/wg0.conf 文件如下,使用客戶端的 IP 地址作為地址,端點的服務器 IP 地址:

[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

*“形式驗證”在這個意義上意味著證明設計具有數學上正確的消息和密鑰保密、前向保密、相互認證、會話唯一性、通道綁定和重放阻力。意味著密鑰洩露模擬服務器攻擊並否認它。

攝影師 嘿陳 存在 沒有飛濺.