SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 已更新 2026-08-07

WireGuard 還是 OpenVPN?自架 VPN 怎麼選

WireGuard 以速度、約 10 行的設定檔與較小的 4,000 行程式碼勝出;但遇到 TCP 443、憑證授權、帳密驗證或 Layer 2 橋接時,OpenVPN 仍較適合。

簡短結論

對於單人自行在 VPS 上執行 VPN 伺服器的情境,WireGuard 與 OpenVPN 並不是勢均力敵的選擇:請選擇 WireGuard。WireGuard 的程式碼規模較小、在 Linux kernel 內執行,建立連線只需不到一秒,而且可運作的用戶端設定檔大約只有 10 行。OpenVPN 仍有 4 項實際用途;如果你不需要其中任何一項,就不需要使用 OpenVPN。

這 4 項用途包括:離開只允許 TCP port 443 的網路、接入現有的憑證授權中心、使用密碼或第二因素驗證具名使用者,以及在 Layer 2 建立橋接。以下內容將說明這項建議的依據,並指出每個例外情況開始適用於你的確切條件。

WireGuard 為何成為自架服務使用者的首選

程式碼規模小到可以讀完。 WireGuard 專案的通訊協定實作約有 4,000 行程式碼。若把 OpenVPN 所依賴、用於每項密碼編譯操作的 OpenSSL 函式庫也計算在內,程式碼規模會達到 6 位數。規模很重要,因為每一行都是攻擊面;你和審查者都不可能讀完 100,000 行,但 4,000 行則可以。

它在核心中執行。 WireGuard 自 5.6 起已納入 Linux mainline,因此 Ubuntu 24.04 與 Debian 13 都已隨附,無須編譯。封包會在原本所在的位置,也就是核心空間中完成加密,不必複製到 userspace 程序再複製回來。先執行以下命令確認:

sudo modprobe wireguard && echo ok

在 KVM VPS 上會輸出 ok。在 OpenVZ 或 LXC 等共用主機核心的容器虛擬化環境中,則會因 Operation not supported 而失敗,因為你無法將模組載入不屬於你的核心。

不需要協商。 WireGuard 只有一組固定的 cipher suite:資料使用 ChaCha20-Poly1305,並搭配 Curve25519 金鑰。不存在可降級的版本,也沒有可能設定錯誤的選項。OpenVPN 會與每個 client 協商 cipher 和 TLS(transport layer security)版本。這提供了彈性,但也讓設定錯誤有機可乘。若伺服器保留 data-ciphers AES-256-GCM:AES-128-CBC,當 client 沒有提供更好的選項時,就會順利退回 CBC cipher;日誌中也不會指出這是問題。

該埠不會回應。 WireGuard 封包若未通過訊息驗證檢查,會直接丟棄,完全不回覆。因此無論是否有程式監聽,nmap -sU -p 51820 都會回傳 open|filtered。TCP 模式的 OpenVPN 伺服器會先完成 TCP handshake,之後才判定不接受該連線;這已足以讓掃描器確認有服務存在。使用 tls-crypt 的 UDP OpenVPN 幾乎同樣安靜,因此這是反對在 TCP 上執行 OpenVPN,而不是反對 OpenVPN 本身的理由。

漫遊不需額外設定。 WireGuard peer 以 public key 識別,而不是以位址識別。你的 laptop 從家用網路切換到 mobile hotspot 後,會從新位址送出一次 handshake,伺服器便會更新回覆時使用的 endpoint。沒有任何項目需要重新連線,因為原本就沒有建立持續連線。OpenVPN 也能透過 float 實現類似功能,但 client 通常會拆除並重新建立完整的 TLS session。因此,掀開 laptop 螢幕後,OpenVPN 會出現明顯的暫停,而 WireGuard 不會。

2026 年的速度:差距已經縮小

多年來,速度方面的合理說法是:OpenVPN 會將每個封包複製到 userspace,在該處加密後再複製回去;WireGuard 則始終在 kernel 內處理。現在情況已不完全如此,忽略這項變化的比較已經過時。

OpenVPN 2.7 於 2026 年 2 月發布,支援上游的 ovpn kernel module;該模組已併入 Linux 6.16。這就是 DCO(data channel offload):control channel 仍在 userspace 執行,而大量資料路徑移至 kernel,整體方式大致與 WireGuard 一貫的做法相同。在 kernel 和 OpenVPN 都足夠新、能使用這項功能的情況下,兩者的吞吐量屬於同一級距,而不是一個快、一個慢很多。請確認目前實際使用的版本:

uname -r
openvpn --version | head -n 1
modinfo ovpn 2>/dev/null | head -n 3

截至 2026 年 7 月,標準的 Ubuntu 24.04 LTS 提供的是 OpenVPN 2.6,而非 2.7;ovpn module 需要 2.7。在此版本中,只有透過較舊的 openvpn-dco-dkms package 才能使用 offload。該 package 會針對目前執行中的 kernel 建置 out-of-tree module,因此每次 kernel 升級都必須重新建置。這是 WireGuard 不具備的額外變動因素。

在將 DCO 視為繼續使用 OpenVPN 的理由前,請先閱讀其限制。它只支援 Layer 3 tunnel,只接受 AEAD cipher(authenticated encryption with associated data:AES-GCM 或 ChaCha20-Poly1305),不支援 compression;在 server 上也只能搭配 topology subnet 使用。這些限制每一項都削弱了 OpenVPN 原本主打的彈性。所謂快速的 OpenVPN,其實是設定成看起來像 WireGuard 的 OpenVPN。

不要相信任何人發布的吞吐量數字,包括本頁的數字。VPS 的上限通常取決於 CPU 配額或 network 配額,而不是 protocol。請使用 iperf3 在 tunnel 內執行測試,再於 tunnel 外重複測試,並比較兩者結果。

OpenVPN 仍然適用的情境

你必須透過 TCP port 443 對外連線。 WireGuard 僅支援 UDP,這是刻意的設計,也不會加入 TCP 模式。只允許 TCP 443 的旅館網路或企業 proxy,會放行使用 proto tcp-serverport 443 設定的 OpenVPN,因為這類流量看起來像一般的 TLS 工作階段。WireGuard 必須使用 wstunneludp2raw 等 wrapper 才能穿過相同的網路,這會多出一個需要執行及修補的程序。請注意衝突:如果該 IP address 上的 TCP 443 已由 web server 使用,其中一方就必須更換埠號。

你已經在執行 certificate authority。 OpenVPN 使用 X.509 certificates 進行驗證,因此可以直接整合至你已經維運的 PKI (public key infrastructure)。Certificates 會自然到期;若要撤銷某張 certificate,只要將它加入 certificate revocation list,伺服器便可透過 crl-verify 讀取。WireGuard 沒有 certificates、到期機制或 certificate revocation list。移除 peer 必須編輯伺服器設定並重新載入。只有 ten 個 peers 時,這樣做沒有問題。但在有 audit requirement 的情況下,若有 four hundred 個 peers,certificate model 就能實際減輕你的管理負擔。

你需要具名使用者,而不只是 keys。 OpenVPN 可透過 auth-user-pass-verifyopenvpn-plugin-auth-pam.so 等 plugin,將驗證交給外部系統;這也是整合 LDAP 或 one-time-password second factor 的方式。WireGuard 完全沒有 user 的概念。某個 key 不是存在設定中,就是不存在。如果你的要求是「Sara 必須輸入手機收到的 code」,WireGuard 本身無法表達這項要求。

你需要 Layer 2,或需要支援老舊系統的 client。 使用 dev tap 的 OpenVPN 可以橋接 Ethernet frames,這對 broadcast protocols 與舊型 LAN games 很重要。WireGuard 僅支援 Layer 3,而且未來也會維持如此。OpenVPN 也有適用於某些硬體及作業系統的 clients,而這些平台永遠不會有 WireGuard app。這兩項理由的重要性都在降低;此外,dev tap 與 DCO 不相容,因此使用 bridge 時必須採用較慢的路徑。

兩種設定實際上需要付出什麼代價

WireGuard identity 只需執行一個命令。括號不可省略,因為它會在金鑰建立前設定檔案模式:

(umask 077; wg genkey > private.key)
wg pubkey < private.key > public.key

OpenVPN 對應的設定則是由你負責管理的憑證授權單位,而且只要 VPN 存在,就必須持續管理:

sudo apt install -y easy-rsa
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
./easyrsa init-pki
./easyrsa build-ca
./easyrsa gen-req server nopass
./easyrsa sign-req server server

這兩份清單都沒有刻意偏頗。CA 能提供到期與撤銷機制,但你也必須保護一把要使用多年的私密金鑰、記得續期,並在遺失金鑰時重新建立整套環境。如果你不需要 CA 提供的功能,就等於白費成本。完整的 WireGuard 操作程序包含 forwarding、NAT (network address translation),以及可能浪費一個下午的 handshake failures,請參閱在 VPS 上自行架設 WireGuard VPN 的指南

防火牆需要為每個協定設定什麼

WireGuard 只需要一條入站規則,允許 ListenPort 中指定連接埠的 UDP 流量:

sudo ufw allow 51820/udp
sudo ufw status verbose

OpenVPN 預設需要開放 UDP 1194;如果選擇該設定,也可以使用 TCP 443。接著,這兩種協定都需要啟用 IP forwarding,並設定來源 NAT 規則,因為 Linux 會丟棄目的地不是本機的封包。這部分對兩種協定完全相同,也是大多數「tunnel 已連線,但沒有網際網路」問題的來源。如果你不熟悉 ufw,請先閱讀 VPS 上的 ufw 防火牆基本概念,並注意多數供應商會在控制面板中另外提供網路防火牆:如果封包根本沒有到達伺服器,你在伺服器上新增的規則就不會生效。了解 連接埠的用途,以及 Linux 如何監聽連接埠,可以更快完成這兩項檢查。

如何選擇:一段話說明

除非你能明確指出 WireGuard 無法滿足的需求,否則請使用 WireGuard。如果需要透過 TCP 443 穿越受限網路,請在該埠執行 OpenVPN,也可以考慮同時執行兩者:它們使用不同的埠,可在同一台伺服器上共存而不會衝突。如果需要每位使用者各自的帳號或第二因素驗證,不要勉強讓 WireGuard 負責這些功能。請在 WireGuard 之上加入身分識別層。自架的 Headscale 控制伺服器底層使用 WireGuard,並提供帳號模型、金鑰分發與裝置核准功能;這些工作在單獨使用 WireGuard 時都必須自行處理。

不間斷地從 OpenVPN 遷移

這不是轉換作業。OpenVPN 的 PKI 不會轉換成 WireGuard 金鑰,因為 WireGuard 沒有可供轉換的憑證。每個用戶端都會取得一組新的金鑰組,產生方式與伺服器的金鑰組相同。

請並行遷移,不要直接切換。WireGuard 使用 UDP 51820,而 OpenVPN 使用 1194;兩者可同時在同一台主機上執行。因此,先啟動 wg0,再使用 sudo wg show 列出最近的 latest handshake 以確認狀態,接著逐一遷移用戶端。當 OpenVPN 對等端清單不再變動時,使用 sudo systemctl disable --now openvpn-server@server 停止服務。確定不再需要 CA 檔案前,請保留這些檔案,因為刪除 CA 後,無法在該 CA 上重新建立已撤銷的用戶端。

有一項內容確實無法沿用:使用者名稱與密碼帳號,以及與其相關的撤銷紀錄。請在關閉舊伺服器前決定這些資料的存放位置,不要等到關閉後才處理。

FAQ

WireGuard 比 OpenVPN 快嗎?

在標準的 Ubuntu 24.04 伺服器上,是的,而且差距很大。這是因為 WireGuard 在核心中進行加密,而 OpenVPN 2.6 會將每個封包交由 userspace 程序處理。使用 OpenVPN 2.7 搭配 Linux 6.16 的 ovpn 核心模組後,資料路徑也位於核心中,兩者的效能屬於同一級距。請使用 iperf3 在通道兩端測量實際效能,不要直接採信部落格上的數字,因為在 VPS 上,限制通常來自 CPU 或頻寬額度。

WireGuard 可以透過 TCP 443 埠運作嗎?

不能單獨做到。WireGuard 的設計僅支援 UDP,也沒有規劃 TCP 模式。若要通過只允許 TCP 443 的網路,必須使用 wstunneludp2raw 等通道包裝 WireGuard,但兩端都需要執行及修補額外的程序。如果這是你平時的工作環境限制,搭配 proto tcp-serverport 443 的 OpenVPN 會是較簡單的選擇。

OpenVPN 現在不安全了嗎?

不是。使用 AEAD 密碼套件(例如 AES-256-GCM)並啟用 tls-crypt 的最新版 OpenVPN,仍是可靠的 VPN。WireGuard 的優勢在於另一點:OpenVPN 包含更多程式碼與更多選項,因此容易讓疲於管理的系統管理員有更多機會錯誤設定。選項越少,設定錯誤也越少。

個人 VPN 架設在 VPS 上時,應該選哪一個?

WireGuard。每個裝置使用一組金鑰組、一份約 10 行的設定檔,只需開放一個 UDP 埠,而且握手會在你察覺之前完成。只有在你經常從封鎖 UDP 的網路連線,或必須整合現有的憑證授權單位或使用者目錄時,才選擇 OpenVPN。