如何在 Debian 12 設定 WireGuard 點對點 VPN

範例場景: Maya 在咖啡館工作時,使用 Debian 12 VPS 作為個人 VPN 端點。她的筆記型電腦應透過加密的 WireGuard 隧道連接到該 VPS,並將 IPv4 網路流量透過該伺服器發送。此範例並非實際測試報告;下方顯示的公用 IP 位址、金鑰和終端輸出均為佔位符或範例。

此配置為點對點 VPN:一個客戶端連接到一個伺服器。它使用 Debian 自帶的 WireGuard 工具,採用單對等節點、IPv4 轉送和 IPv4 NAT。此設定假設 VPS 具有公網或已連接埠轉送的 IPv4 位址,您可以使用 sudo 對其進行管理,並且可以透過 UDP 連接埠 51820 存取它。本教學不涉及配置路由 IPv6 或 VPS 後端的私有網路。

首先規劃地址和通道。

此範例10.8.0.0/24使用 VPN,10.8.0.1伺服器端和10.8.0.2Maya 的第一個用戶端都配置了 VPN。請使用與用戶端 Wi-Fi、辦公室網路或雲端網路不重疊的子網路。即使握手成功,衝突也可能導致流量走錯路徑。

WireGuard 使用公鑰認證。伺服器需要客戶端的公鑰,客戶端也需要伺服器的公鑰;每個私鑰都保存在其所屬裝置上。 Debian 的 WireGuard 文件介紹了軟體包和對等節點的配置,而 WireGuard 的快速入門指南則介紹了金鑰產生和 keepalive 機制。請參閱Debian WireGuard 文件和WireGuard 快速入門指南。

配置 Debian 12 伺服器

1. 安裝工具

更新軟體包索引並安裝 WireGuard 和 nftables,這將提供範例 IPv4 位址偽裝規則。在 VPS 上執行以下命令:

sudo apt update
sudo apt install wireguard nftables

Debian 透過wireguard元軟體包及其工具打包了 WireGuard。如果伺服器已在使用防火牆管理器(例如 UFW、firewalld 或提供者管理的規則),請在新增任何內容之前確定其活動規則集。請勿使用此範例取代現有的防火牆配置。

Debian 終端機顯示 apt 更新並安裝 WireGuard 和 nftables 軟體包。
終端機會顯示軟體包安裝步驟;軟體包輸出可能會因鏡像來源和系統狀態而異。

2. 找到面向大眾的介面並啟用轉送功能

查詢路由表,了解 Debian 使用哪個介面來存取外部 IPv4 位址:

ip route get 1.1.1.1

範例中,路由使用 `<route_name> eth0`。您的 VPS 可能顯示不同的名稱,例如ens3`<route_name>` 或 ` enp1s0<route_name>`;稍後在 NAT 規則中使用您輸出的名稱。另請注意伺服器的公網 IPv4 位址或 DNS 名稱。如果伺服器位於路由器之後,請將來自該路由器的 UDP 51820 連接埠轉送至 Debian 主機。

要建立完整的隧道,需要啟用 IPv4 轉送。請立即啟用並使其在重新啟動後仍然有效:

echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system
sysctl net.ipv4.ip_forward

最後一條命令應該會報告結果net.ipv4.ip_forward = 1。此設定允許封包轉送;但它本身並不會開啟防火牆或提供NAT功能。

Debian 終端機顯示路由通過 eth0,且 IPv4 轉送已啟用。
路由查找確定用於出站 IPv4 的接口,而 sysctl 確認轉送已開啟。

3. 建立伺服器金鑰和客戶端金鑰對

在 Debian 主機上建立伺服器金鑰,並設定嚴格的檔案權限:

sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key; wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'

盡可能在客戶端設備上產生客戶端金鑰對。在wireguard-tools已安裝以下軟體的 Linux 用戶端上:

umask 077
wg genkey | tee client.key | wg pubkey > client.pub

對於手機,請在官方 WireGuard 應用程式中建立新的隧道,並讓它產生個人資料金鑰。僅將客戶端的公鑰複製到伺服器。務必client.key妥善保管,切勿將其貼到伺服器配置中或在聊天中發送。 Debian Bookwormwg(8)手冊詳細記錄了關鍵命令和介面欄位。

4. 建立伺服器介面並新增對等節點

/etc/wireguard/wg0.conf按照以下結構建立密鑰。將每個大寫佔位符替換為對應的真實密鑰。使用 `getServerPrivateKey()` 指令在本機上讀取伺服器私鑰sudo cat /etc/wireguard/server.key;將客戶端公鑰放入 peer 部分。

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32

請保護該文件,因為它包含私鑰:

sudo chown root:root /etc/wireguard/wg0.conf
sudo chmod 600 /etc/wireguard/wg0.conf

AllowedIPs = 10.8.0.2/32為該對等方指派一個 VPN 位址,並阻止其他對等方聲明該位址。為每個額外的設備10.8.0.3/32分配單獨的金鑰對和不同的位址,例如 123. ...

Debian 終端機顯示 WireGuard 金鑰產生以及與用戶端對等體的 wg0 介面。
伺服器介面列出了一個對等方及其專用隧道位址;顯示的關鍵資訊僅供參考。

5. 新增 IPv4 NAT 並允許 WireGuard 連接埠

對於範例完整 IPv4 隧道,出站封包10.8.0.0/24必須透過具有來源 NAT 的公網路介面發出。在伺服器現有的 nftables 設定或防火牆管理器中新增對應的規則。以下獨立的 nftables 表示例說明了該規則;請將其替換eth0為步驟 2 中發現的介面:

table ip wg_nat {
  chain postrouting {
    type nat hook postrouting priority srcnat; policy accept;
    ip saddr 10.8.0.0/24 oifname "eth0" masquerade
  }
}

如果您使用 Debian 系統nftables.service,請將 nftables 表合併到服務啟動時載入的設定中,並sudo nft -c -f /etc/nftables.conf在重新載入之前驗證整個檔案。在應用目前配置之前,請檢查該配置是否會重新整理或取代現有規則。 NAT 本身並不能覆寫丟棄流量的轉送鏈策略:請wg0在您的活動防火牆中允許從 WAN 介面轉送流量,並允許回傳流量。 Debiannft(8)手冊中記錄了 nftables 規則載入和 NAT 語句的相關內容。

在VPS提供者防火牆和任何主機防火牆中,允許入站UDP 51820連接埠。不要為該WireGuard隧道開放TCP 51820埠。變更防火牆策略時,請保持SSH存取規則有效;如果防火牆重新啟動導致連線斷開,請使用提供者控制台或其他復原路徑。

nftables 設定視圖顯示 VPN 子網路 10.8.0.0/24 透過 eth0 進行 IPv4 位址偽裝。
此規則符合透過選定的 WAN 介面離開的 VPN IPv4 流量,並套用位址偽裝。

配置並連接客戶端

6. 建立客戶畫像

在 WireGuard 用戶端應用程式中建立一個新的隧道,或在 Linux 用戶端上儲存類似這樣的設定。請將私鑰、伺服器公鑰和端點替換為實際值。下面的 TEST-NET 位址只是一個範例,無法連接到真實的伺服器。

[Interface]
Address = 10.8.0.2/32
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = 203.0.113.10:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

AllowedIPs = 0.0.0.0/0透過隧道路由 IPv4 目標位址,因此它是完整的 IPv4 隧道方案。對於僅到達 WireGuard 伺服器位址的窄分支隧道,請改用10.8.0.0/24其他方案。若要存取伺服器後面的 LAN,請在用戶端的設定中包含該 LAN 的實際子網AllowedIPs,新增回傳路由或適當的 NAT,並允許流量通過伺服器防火牆;這些步驟取決於 LAN 路由器,不在本範例中。

PersistentKeepalive = 25可以幫助位於 NAT 後面的用戶端在空閒一段時間後保持可訪問性。它是可選的;WireGuard 文件指出大多數用戶不需要它,但建議在 NAT 映射必須保持開啟時,25 秒是一個普遍適用的間隔。DNS一些用戶端和基於 的用戶端支援此欄位wg-quick;如果您的應用程式忽略它,請透過該應用程式本身的控制項設定 DNS。

用戶端設定編輯器顯示 WireGuard 位址、端點、完整 IPv4 路由和 keepalive 欄位。
客戶端設定檔透過伺服器路由 IPv4;TEST-NET 端點是一個佔位符,不是一個有效的位址。

7. 啟動隧道並檢查握手

在 Debian 系統中,使用以下命令在啟動時啟動該介面:

sudo systemctl enable --now wg-quick@wg0
sudo wg show

在 UDP 連接埠 51820 可達後,匯入或啟動用戶端設定檔。wg show檢查預期對等方是否出現,以及latest handshake客戶端發送流量後配置是否更新。 Debian wg-quick(8)Bookworm 手冊介紹了 systemd 單元使用的介面設定助手。

握手失敗首先指向可達性問題或金鑰不符:請確認端點位址和連接埠、UDP 防火牆規則、用戶端設定檔中的伺服器公鑰、用戶端公鑰wg0.conf以及正確的系統時間。握手失敗但流量仍然無法正常運作通常指向轉送、NAT、路由重疊或防火牆轉送鏈規則。

Debian 終端機顯示 wg-quick 服務已啟用,並且正在與流量計數器進行對等握手。
此服務已啟用,對等顯示包括握手和傳輸欄位;數值僅供參考。

8. 驗證流量並了解 IPv6 限制

用戶端連線成功後,先測試伺服器的隧道位址,然後使用外部 IPv4 位址檢查服務檢查看到的公用 IPv4 位址:

ping -c 3 10.8.0.1
curl -4 https://ifconfig.me

如果允許 ICMP 協議,ping 命令應該可以到達伺服器。對於這種全隧道配置,外部 IPv4 檢查應該顯示 VPS 的公網出口位址。如果公網位址沒有變化,請檢查AllowedIPs轉送設定、NAT 介面名稱以及防火牆的轉送策略。

此範例僅支援 IPv4,AllowedIPs = 0.0.0.0/0不路由 IPv6,因此具有 IPv6 連線的用戶端仍可能將 IPv6 流量傳送至隧道外部。請勿將此配置描述為完整的雙棧隱私隧道。若要透過 WireGuard 承載 IPv6,請為隧道分配和路由 IPv6 位址,啟用 IPv6 轉發,配置相應的防火牆和路由規則,並在::/0端對端路徑正常運作後才新增用戶端。不同服務提供者的支援情況可能有所不同。或者,請謹慎選擇分割隧道策略,並檢查用戶端的 IPv6 行為。

手機 VPN 介面會顯示一個已啟動的筆記型電腦 VPN 配置,其中包含伺服器和隧道位址等詳細資訊。
通用 VPN 用戶端設定檔處於活動狀態,並列出伺服器端點和隧道 IP;控制選項因應用程式而異。
Debian 終端機顯示 IPv4 位址檢查結果,並成功 ping 通了 WireGuard 伺服器。
終端檢查 IPv4 出口位址並 ping 伺服器的 WireGuard 位址;輸出結果僅供參考。

常見問題及快速最終檢查

  • 無需握手:確認提供者和主機防火牆上的入站 UDP 51820、端點的公共 IP 或 DNS,以及雙方的對等公鑰。
  • 握手成功,但網站無法載入:確認net.ipv4.ip_forward=1NAT 規則使用實際出口接口,且防火牆允許轉送流量。
  • 只有部分網路故障:檢查是否10.8.0.0/24與本地網路或遠端網路重疊。如有必要,請重新編號隧道,同時更新對等節點和防火牆規則。
  • 重新啟動後功能失效:請確認wg-quick@wg0已啟用防火牆和 sysctl 設置,並確保這些設定已透過系統的正常配置保留。
  • IPv6 仍然使用本機連線:這對於這個僅包含 IPv4 的範例來說是預期行為。在依賴完全隧道隱私權聲明之前,請設定並測試 IPv6 隧道路由。

在確認設定完成之前,請先驗證伺服器服務是否處於活動狀態,wg show是否報告最近一次握手且傳輸計數器持續增加,客戶端是否可以存取伺服器10.8.0.1,以及 IPv4 出口檢查是否報告了伺服器的公網位址。僅在持久防火牆和轉發設定生效後才能重新啟動伺服器,然後重複上述檢查。對於其他對等節點,請指派單獨的金鑰對和唯一的隧道 IP 位址,然後透過刪除裝置的對等節點條目並重新載入介面來移除該裝置。

留下評論

使用 Systemd 定時器可靠地執行 ownCloud 後台作業

將按需作業運行替換為 systemd 定時器,該定時器每 15 分鐘執行一次 ownCloud 支援的 occ system:cron 命令。

透過尋找故障路由來恢復 ownCloud WebDAV 同步

透過 Apache、Nginx 或反向代理程式追蹤 WebDAV 請求,然後使用經過驗證的 PROPFIND 測試確認 ownCloud 同步功能正常。

設定 Nextcloud 的公共 URL,以便它可以存取自身。

透過設定其規範 URL 並從伺服器本身檢查 DNS、HTTPS 和反向代理路由,修復 Nextcloud 缺少出站位址警告的問題。

在 Ubuntu 24.04 上設定 Nextcloud Redis 快取

在 Ubuntu 24.04 上設定 Nextcloud Redis 快取

透過本機 Unix 套接字配置 APCu 和 Redis,以實現 Nextcloud 快取和檔案鎖定,並提供目前和舊版 Nextcloud 的步驟。

使用 Systemd 定時器自動執行 Nextcloud Cron

檢查 Nextcloud 的 cron 模式,修復其 systemd 服務和計時器,並驗證後台作業在啟動後以及每隔五分鐘運行一次。

使用 Redis 清除 Nextcloud 的檔案鎖定警告

啟用可靠的 Nextcloud 檔案鎖定,選擇適當的 Redis 或 Valkey 後端,並驗證警告是否清除,同時避免並發檔案變更的風險。

如何才能獲得 Nextcloud A+ 安全評級

如何才能獲得 Nextcloud A+ 安全評級

使用最新更新、HTTPS 和 HSTS、精確的反向代理信任以及針對公共伺服器的檢查,修復 Nextcloud 掃描中常見的錯誤。

啟用 Nextcloud 伺服器端加密,並評估其影響

為需要加密的儲存配置 Nextcloud SSE,保護加密金鑰,並在加密現有文件之前測量傳輸和 CPU 影響。

將 Elasticsearch 全文搜尋功能新增至 Nextcloud

將 Nextcloud 的檔案搜尋連接到 Elasticsearch,索引文件內容,並選擇適合您的伺服器和安全需求的設定。

為 Nextcloud 已刪除檔案設定可靠的過期策略

為 Nextcloud 已刪除檔案設定可靠的過期策略

配置 Nextcloud 在規定的保留期後刪除已刪除的文件,可靠地安排後台作業,並避免執行清除所有使用者回收站的命令。