使用 Wireguard-LinuxTechBlog 構建虛擬專用網絡


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

* 在這個意義上,“形式驗證”證明了該設計具有數學上正確的消息和密鑰秘密、傳輸秘密、相互認證、會話唯一性、通道綁定和重放阻力。密鑰洩露模擬和拒絕服務器攻擊。

攝影師 中平 存在 無飛濺..