VPN 虛擬私人網路完整教學:原理、協定與實戰設定 | Networking

2026/05/17 2026/05/16
VPN 虛擬私人網路完整教學:原理、協定與實戰設定 | Networking

VPN(Virtual Private Network,虛擬私人網路)是一種透過公共網路建立 加密隧道(Encrypted Tunnel) 的技術,讓遠端使用者或不同地點的網路能夠安全通訊,如同處於同一個私有網路中。本文從 VPN 的核心原理出發,深入比較 IPSecOpenVPNWireGuard 等主流協定,介紹 Site-to-SiteRemote Access 兩種架構模式,並提供完整的 WireGuard 實戰設定教學。

VPN 是什麼?

虛擬私人網路(Virtual Private Network,VPN)是一種透過公共網路(例如 Internet)建立加密隧道的技術。VPN 結合了加密、認證與隧道協議,確保資料在傳輸過程中的 機密性(Confidentiality)完整性(Integrity)來源驗證(Authentication)

傳統做法是租用專線連接兩個地點的網路,成本極高。VPN 的核心概念就是利用已有的公共網路基礎建設,透過加密封裝的方式建立「虛擬的」私人通道,大幅降低成本的同時維持安全性。

封裝過程可以簡單理解為:

原始封包:
[IP: 10.0.1.50 → 10.0.2.100] [TCP] [Data]

VPN 封裝後:
[外部IP: 203.0.113.1 → 198.51.100.1]     ← 公網 IP,路由器看得到
  [ESP Header]                              ← VPN 安全標頭
    [加密: IP: 10.0.1.50 → 10.0.2.100]     ← 原始封包被加密
      [加密: TCP] [加密: Data]              ← 資料內容被加密

VPN 閘道(Gateway)將內部私有網路的封包封裝在公共網路封包中傳輸,接收端再解封裝還原原始封包,整個過程對使用者完全透明。

VPN 提供的核心安全功能

功能說明
機密性(Confidentiality)資料加密,防止第三方竊聽
完整性(Integrity)透過 HMAC/Hash 確保資料未被篡改
認證(Authentication)驗證通訊對方的身份
防重放(Anti-Replay)防止封包被攔截後重新發送
隧道封裝(Tunneling)將私有網路封包封裝於公共網路中傳輸

VPN 的兩種主要類型

根據使用場景,VPN 主要分為兩種架構:Site-to-Site VPNRemote Access VPN

Site-to-Site VPN(站對站 VPN)

Site-to-Site VPN 用來連接兩個或多個固定地點的網路,最常見的場景是企業總部與分公司之間的永久性連線。VPN 閘道(通常是防火牆或路由器)自動建立並維護隧道,使用者不需要手動操作。

特點:

  • 自動建立隧道,無需使用者介入
  • 兩端網路的使用者可以透明存取對方的資源
  • 通常使用 IPSec 協議
  • 需要固定的公網 IP 位址

Remote Access VPN(遠端存取 VPN)

Remote Access VPN 允許個別使用者(例如在家工作的員工)透過 VPN 客戶端軟體連接到企業內部網路。每位使用者獨立建立 VPN 連線,連線成功後就如同身處辦公室內網。

特點:

  • 每個使用者獨立建立連線
  • 需要在裝置上安裝 VPN 客戶端軟體
  • 常使用 SSL/TLS VPN、IPSec 或 WireGuard
  • 支援多因素認證(Multi-Factor Authentication,MFA)

兩種類型的比較

特性Site-to-SiteRemote Access
使用者網路對網路(自動)個人對網路(手動連線)
端點VPN 閘道 / 路由器使用者裝置 + VPN 伺服器
常用協議IPSecSSL/TLS、IPSec、WireGuard
連線時間永久連線按需連線
典型場景總部與分公司互連遠端工作、出差
設定複雜度中等(一次設定)低(使用者端簡單)

IPSec 協議套件

IPSec(Internet Protocol Security)是一套在 IP 層(Layer 3)提供安全通訊的協議框架,也是 Site-to-Site VPN 最廣泛使用的標準。IPSec 包含多個子協議與機制,主要透過 IKE 進行金鑰協商、使用 ESPAH 進行資料保護。

IKE 金鑰交換(Phase 1 & Phase 2)

IKE(Internet Key Exchange)負責在 VPN 端點之間協商安全參數並建立安全通道,分為兩個階段:

Phase 1 — 建立安全管理通道:

  1. 雙方交換安全參數提議(加密演算法、雜湊函式、DH 群組)
  2. 進行 Diffie-Hellman 金鑰交換,產生共享秘密
  3. 完成身份認證(Pre-shared Key 或數位憑證)
  4. 建立 IKE SA(安全管理通道),用於保護 Phase 2 的協商

Phase 2 — 建立資料傳輸通道:

  1. 在 Phase 1 建立的安全通道中,協商 IPSec 參數(ESP 或 AH)
  2. 產生 IPSec SA 金鑰
  3. 建立實際的加密資料傳輸通道

目前建議使用 IKEv2,相比 IKEv1 只需 4 個訊息(v1 需要 6-9 個)就能完成協商,並且原生支援 NAT 穿越與 MOBIKE(IP 變更不斷線)。

ESP vs AH

IPSec 提供兩種資料保護協議:

特性ESP(Encapsulating Security Payload)AH(Authentication Header)
加密是(AES、3DES 等)
認證是(HMAC)是(HMAC)
IP Header 認證是(含不可變欄位)
NAT 相容是(NAT-T,UDP 4500)否(修改 IP Header 會破壞認證)
Protocol 編號5051
使用率極高(主流選擇)低(逐步淘汰)

實務上幾乎都使用 ESP,因為它同時提供加密與認證,且與 NAT 相容。AH 因為不支援加密且與 NAT 不相容,已經很少使用。

Tunnel Mode vs Transport Mode

特性Tunnel Mode(隧道模式)Transport Mode(傳輸模式)
封裝方式封裝整個原始 IP 封包僅加密 Payload
IP Header新增外部 IP Header使用原始 IP Header
主要用途閘道對閘道(Site-to-Site VPN)主機對主機(L2TP/IPSec)
隱私性原始 IP 被加密隱藏原始 IP 可見
開銷較大(額外 IP Header)較小

Tunnel Mode 是 Site-to-Site VPN 的標準模式,它會將整個原始 IP 封包加密並加上新的 IP Header,讓中間路由器只看到 VPN 閘道之間的流量。Transport Mode 則常用於端對端的通訊場景。


OpenVPN 概述

OpenVPN 是最廣泛使用的開源 SSL/TLS VPN 實現,利用 SSL/TLS 協議建立加密隧道。它通常運作在 TCP 443 或 UDP 1194 端口。

OpenVPN 的主要特點:

  • 使用 OpenSSL 函式庫,支援所有 SSL/TLS 加密套件
  • 支援 TCP(可靠但較慢)和 UDP(較快,推薦)兩種傳輸模式
  • 憑證式認證(PKI,X.509)
  • 跨平台支援:Linux、Windows、macOS、Android、iOS
  • 使用 TCP 443 端口時幾乎不會被防火牆阻擋
  • 提供 TUN 模式(Layer 3 路由模式)和 TAP 模式(Layer 2 橋接模式)

OpenVPN 的缺點是程式碼量較大(約 70,000 行),運行在 User Space,效能不如 Kernel Space 的方案。設定相對複雜,需要管理憑證基礎設施(CA)。


WireGuard 深入解析

WireGuard 是一個現代、極簡的 VPN 協議與實現,已直接整合在 Linux Kernel 中。以極少的程式碼量(約 4,000 行,對比 OpenVPN 的 70,000+ 行)實現了高效能的加密隧道,是目前最受推薦的 VPN 方案之一。

WireGuard 的設計哲學

WireGuard 的核心設計原則包括:

  • Cryptokey Routing:公鑰等於 Peer 的身份,同時也定義了允許的 IP 範圍,不需要傳統的 PKI/CA 基礎設施
  • 固定加密套件:使用 Noise Protocol Framework,不提供演算法選擇,避免設定錯誤
    • Curve25519 — ECDH 金鑰交換
    • ChaCha20 — 對稱加密
    • Poly1305 — MAC 認證
    • BLAKE2s — 雜湊函式
  • Kernel Space 實現:直接在 Linux Kernel 運作,效能極高
  • Stealth 特性:不回應未認證的封包,對網路掃描器不可見

WireGuard 金鑰生成

WireGuard 使用公私鑰對進行認證,金鑰生成非常簡單:

# 安裝 WireGuard(Ubuntu/Debian)
sudo apt update && sudo apt install wireguard

# 產生伺服器金鑰對
wg genkey | tee server_privatekey | wg pubkey > server_publickey

# 產生客戶端金鑰對
wg genkey | tee client_privatekey | wg pubkey > client_publickey

# 查看產生的金鑰
cat server_privatekey
# 輸出範例:yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=

cat server_publickey
# 輸出範例:xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=

# 設定金鑰檔案權限(僅限擁有者讀取)
chmod 600 server_privatekey client_privatekey

WireGuard Server 端設定

在伺服器上建立設定檔 /etc/wireguard/wg0.conf

# === WireGuard Server 設定 ===
# 檔案位置:/etc/wireguard/wg0.conf

[Interface]
# 伺服器的私鑰
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
# VPN 內部 IP 位址
Address = 10.200.200.1/24
# 監聽端口
ListenPort = 51820
# 啟動時設定 NAT 轉發規則
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 關閉時移除 NAT 轉發規則
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Peer 1:員工 Alice
[Peer]
PublicKey = ALICE_PUBLIC_KEY_BASE64
# 允許 Alice 使用的 VPN IP
AllowedIPs = 10.200.200.2/32
# 保持連線,用於 NAT 穿越(每 25 秒發送一次心跳)
PersistentKeepalive = 25

# Peer 2:員工 Bob
[Peer]
PublicKey = BOB_PUBLIC_KEY_BASE64
AllowedIPs = 10.200.200.3/32
PersistentKeepalive = 25

WireGuard Client 端設定

在客戶端建立設定檔:

# === WireGuard Client 設定(Alice)===
# 檔案位置:/etc/wireguard/wg0.conf

[Interface]
# 客戶端的私鑰
PrivateKey = ALICE_PRIVATE_KEY_BASE64
# 客戶端的 VPN 內部 IP
Address = 10.200.200.2/24
# 指定 DNS 伺服器
DNS = 10.200.200.1, 1.1.1.1

[Peer]
# 伺服器的公鑰
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
# Full Tunneling:所有流量都走 VPN
AllowedIPs = 0.0.0.0/0, ::/0
# 伺服器的公網位址與端口
Endpoint = vpn.example.com:51820
# 保持連線
PersistentKeepalive = 25

WireGuard 常用操作指令

# 啟動 VPN 介面
sudo wg-quick up wg0

# 輸出範例:
# [#] ip link add wg0 type wireguard
# [#] wg setconf wg0 /dev/fd/63
# [#] ip -4 address add 10.200.200.1/24 dev wg0
# [#] ip link set mtu 1420 up dev wg0

# 查看連線狀態
sudo wg show

# 輸出範例:
# interface: wg0
#   public key: xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
#   private key: (hidden)
#   listening port: 51820
#
# peer: ALICE_PUBLIC_KEY_BASE64
#   endpoint: 203.0.113.50:52341
#   allowed ips: 10.200.200.2/32
#   latest handshake: 32 seconds ago
#   transfer: 3.41 GiB received, 1.02 GiB sent

# 關閉 VPN 介面
sudo wg-quick down wg0

# 設定開機自動啟動
sudo systemctl enable wg-quick@wg0

# 確認服務狀態
sudo systemctl status wg-quick@wg0

L2TP/IPSec 簡介

L2TP(Layer 2 Tunneling Protocol)本身不提供加密,通常與 IPSec 搭配使用,稱為 L2TP/IPSec。L2TP 負責隧道封裝,IPSec 負責加密。

L2TP/IPSec 的優勢在於多數作業系統原生支援,不需要安裝額外軟體。但它有幾個明顯的缺點:

  • 雙重封裝 導致效能開銷較大
  • 固定使用 UDP 500/4500/1701 端口,容易被防火牆阻擋
  • NAT 穿越能力較差
  • 已逐漸被 IKEv2 和 WireGuard 取代

Split Tunneling vs Full Tunneling

VPN 連線建立後,有兩種流量處理策略:

Full Tunneling(全隧道)

所有 網路流量都經過 VPN 隧道,包括存取公共網站(如 YouTube、Gmail)的流量。

  • 安全性較高,企業可以完全掌控流量
  • 但 VPN 伺服器負載較大,使用者體驗可能較差(所有流量繞道)

Split Tunneling(分割隧道)

僅企業內部 流量經過 VPN 隧道,公共網站流量直接存取 Internet。

  • VPN 伺服器負載較小,公共服務速度不受影響
  • 但公共流量未受 VPN 保護,企業無法完全監控

WireGuard 中的設定差異

在 WireGuard 的 Client 設定中,透過 AllowedIPs 參數即可控制:

# Full Tunneling — 所有流量都走 VPN
[Peer]
AllowedIPs = 0.0.0.0/0, ::/0

# Split Tunneling — 僅私有網段走 VPN
[Peer]
AllowedIPs = 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
特性Full TunnelingSplit Tunneling
安全性較高(所有流量受保護)較低(公共流量未經 VPN)
VPN 頻寬伺服器負載大伺服器負載小
使用者體驗較差(速度慢)較佳(公共服務速度正常)
企業控管完整流量可視性部分流量不可見
適用場景高安全需求環境一般遠端工作

VPN 協定比較總表

特性WireGuardIPSec/IKEv2OpenVPNL2TP/IPSec
運作層級Layer 3Layer 3Layer 3 (TUN) / Layer 2 (TAP)Layer 2
加密演算法ChaCha20、Curve25519AES、3DES、DHOpenSSL 全部支援AES + IPSec
使用端口UDP(自訂)UDP 500/4500TCP/UDP(自訂)UDP 1701/500/4500
NAT 穿越原生支援NAT-T(UDP 4500)容易較困難
程式碼量約 4,000 行數十萬行約 70,000 行作業系統內建
效能最高(Kernel Space)高(硬體加速支援佳)中等(User Space)中等(雙重封裝)
設定難度極簡最複雜複雜但文件豐富簡單(OS 原生)
跨平台全平台支援全平台(OS 內建)全平台全平台(OS 內建)

Zero Trust Network Access(ZTNA)

傳統 VPN 模型存在一個根本問題:一旦使用者通過 VPN 認證進入內部網路,就可以存取網路中的所有資源。這種「信任邊界」的概念在現代威脅環境下越來越不安全。

零信任網路存取(Zero Trust Network Access,ZTNA) 是一種更現代的安全架構,其核心原則是 「永不信任,始終驗證」

  • 每次存取資源都需要重新驗證身份與裝置狀態
  • 遵循 最小權限原則,使用者只能存取被明確授權的資源
  • 不區分「內部」與「外部」,無論使用者在哪裡,都適用相同的安全策略

主流的 ZTNA 方案包括:

方案說明
Google BeyondCorpGoogle 內部實踐的零信任架構
Cloudflare Access基於 Cloudflare 網路的零信任存取
Zscaler Private Access企業級零信任安全平台
Tailscale基於 WireGuard 的 Mesh VPN + ACL 控制

值得注意的是,ZTNA 與 VPN 並非完全對立。像 Tailscale 這樣的方案就是將 WireGuard VPN 技術與零信任存取控制結合,既保留了 VPN 的加密隧道優勢,又加入了細粒度的權限管理。


總結

VPN 技術讓我們能夠在不安全的公共網路上建立安全的私人通訊通道。以下是本文的重點回顧:

  1. VPN 的核心原理 是透過加密隧道封裝私有網路封包,在公共網路上安全傳輸
  2. Site-to-Site VPN 適用於企業分公司互連的固定連線場景;Remote Access VPN 適用於遠端員工按需連回公司的場景
  3. IPSec 是成熟的協議框架,透過 IKE 進行金鑰協商、ESP 進行加密與認證,是 Site-to-Site VPN 的主流選擇
  4. OpenVPN 基於 SSL/TLS,跨平台且容易穿越防火牆,但設定較為複雜
  5. WireGuard 是目前最推薦的現代 VPN 方案——程式碼極簡、效能最高、設定容易,已內建於 Linux Kernel
  6. Split TunnelingFull Tunneling 各有優缺點,應根據安全需求與使用者體驗來選擇
  7. ZTNA 代表了網路安全的演進方向,但 VPN 技術仍然是建立安全通訊的基礎

如果你正在考慮為團隊或個人架設 VPN,WireGuard 是目前最值得優先嘗試的方案:設定簡單、效能卓越、安全性高,幾乎沒有理由不選擇它。

BenZ Software Developer

熱愛技術的軟體開發者,在這裡分享程式開發經驗與學習筆記。