在 VPS 上自建 OpenVPN 是保護公共 Wi-Fi 流量、繞過網路審查、安全存取內網資源的經典方案。本文提供 OpenVZ/LXC/KVM/Xen 全虛擬化架構相容性檢查、一鍵安裝腳本 (Angristan/OpenVPN-install)、手動逐步配置 (PKI/證書/伺服器/客戶端)、Windows/macOS/Linux/Android/iOS 客戶端導入、路由分流與 DNS 防洩漏、多用戶管理與撤銷完整實戰流程。
# 1. TUN/TAP 設備
cat /dev/net/tun
# 正常回應:File descriptor in bad state (表示可用)
# 若回應 No such file/device → 提交工單要求開通
# 2. iptables NAT 功能
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
# 正常無錯誤 → 可用
# 若報錯 "No chain/target/match" → 核心缺少 iptables_nat 模組,需開通
# 3. 系統架構
uname -m # x86_64 / aarch64
lsb_release -a
注意:OpenVZ 6 核心較舊 (2.6.32) 可能不支援 AES-NI 加速,建議選擇 KVM/Xen HVM/雲主機。
# Angristan/OpenVPN-install (支援 Debian 10+/Ubuntu 18.04+/CentOS 7+/Rocky/Alma)
wget https://git.io/vpn -O openvpn-install.sh
chmod +x openvpn-install.sh
./openvpn-install.sh
互動式選單將引導:
完成後產生 ~/client.ovpn,下載至本地即可使用。再次執行腳本可新增/撤銷用戶、列出用戶、移除 OpenVPN。
apt update && apt install -y openvpn easy-rsa iptables-persistent
# 複製 easy-rsa 至工作目錄
make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
# 編輯 vars 設定憑證資訊
cat > vars <
/etc/openvpn/server.conf
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
tls-auth /etc/openvpn/easy-rsa/ta.key 0
cipher AES-256-GCM
auth SHA256
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 8.8.8.8"
push "block-outside-dns" # Windows 防 DNS 洩漏
keepalive 10 120
persist-key
persist-tun
status /var/log/openvpn/status.log
log-append /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
# 效能優化
fast-io
sndbuf 0
rcvbuf 0
# 允許客戶端互訪 (可選)
# client-to-client
# /etc/sysctl.d/99-openvpn.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
# 套用
sysctl --system
# NAT 規則 (假設外網介面 eth0,VPN 網段 10.8.0.0/24)
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
# 允許 VPN 流量通過
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -o tun0 -j ACCEPT
# 持久化
netfilter-persistent save
systemctl enable --now openvpn@server
systemctl status openvpn@server
# 檢查介面
ip addr show tun0
# 測試連線
# 客戶端導入 .ovpn 後連線,ping 10.8.0.1
client.ovpn 模板
client
dev tun
proto udp
remote YOUR_VPS_PUBLIC_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
auth SHA256
key-direction 1
-----BEGIN CERTIFICATE-----
... ca.crt 內容 ...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
... client.crt 內容 ...
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
... client.key 內容 ...
-----END PRIVATE KEY-----
-----BEGIN OpenVPN Static key V1-----
... ta.key 內容 ...
-----END OpenVPN Static key V1-----
verb 3
# 新增用戶 user1
cd /etc/openvpn/easy-rsa
./easyrsa build-client-full user1 nopass
# 產生 user1.ovpn (腳本自動化)
# 撤銷用戶 user1
./easyrsa revoke user1
./easyrsa gen-crl
# 複製 crl.pem 至伺服器配置目錄
cp pki/crl.pem /etc/openvpn/crl.pem
# server.conf 加入
# crl-verify /etc/openvpn/crl.pem
systemctl reload openvpn@server
# 列出所有用戶
ls /etc/openvpn/easy-rsa/pki/issued/
# server.conf 或 client.ovpn
# 取消 push "redirect-gateway"
push "route 10.0.0.0 255.0.0.0" # 僅 10.x 流量走 VPN
push "route 192.168.100.0 255.255.255.0"
# 安裝 openvpn-systemd-resolved
apt install -y openvpn-systemd-resolved
# client.ovpn 加入
script-security 2
setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .
# server.conf
proto tcp
port 443 # 偽裝 HTTPS 流量
# 客戶端同步修改
完成上述部署與驗證,即可擁有一套完全自主可控、支援多平台、可擴展多用戶的 OpenVPN 服務。建議定期更新 apt upgrade openvpn easy-rsa、輪換 CA/伺服器憑證 (接近到期前)、監控 /var/log/openvpn/ 異常連線。