eth0 (公網 IP 61.1.1.2)、eth1 (內網 192.168.1.2)# 檢查並安裝 lzo 與開發套件
rpm -qa | grep lzo
# 若無,下載編譯或 yum install lzo lzo-devel
# 下載 OpenVPN 2.0_rc16(舊版示範,現行建議 2.5+)
wget https://mesh.dl.sourceforge.net/sourceforge/openvpn/openvpn-2.0_rc16.tar.gz
tar -zxvf openvpn-2.0_rc16.tar.gz
cd openvpn-2.0_rc16
./configure && make && make install
# 建立 TUN/TAP 裝置節點
mknod /dev/net/tun c 10 200
echo "alias char-major-10-200 tun" >> /etc/modprobe.conf
# 啟用 IP Forward
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久生效
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
# 複製 easy-rsa 腳本
mkdir /etc/openvpn
cp -r easy-rsa /etc/openvpn
cd /etc/openvpn/easy-rsa
# 修改 vars 設定組織資訊
# 重點變數:KEY_COUNTRY、KEY_PROVINCE、KEY_CITY、KEY_ORG、KEY_OU、KEY_EMAIL、KEY_SIZE=2048
vi vars
# 初始化並產生 CA
. vars
./clean-all
./build-ca
# Common Name: OpenVPN Root CA
# 產生 Diffie-Hellman 參數
./build-dh
# 輸出 dh1024.pem(或 dh2048.pem)
# 產生伺服器憑證
./build-key-server server
# Common Name: Server No.1
# 產生客戶端憑證(每位用戶一組)
./build-key client1
# Common Name: client1(不可重複,否需 server 端加 duplicate-cn)
# 產生 TLS-Auth 金鑰(防 DoS)
openvpn --genkey --secret keys/ta.key
# 產生憑證撤銷清單
./make-crl vpncrl.pem
/etc/openvpn/server.confport 1194
proto udp
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
crl-verify vpncrl.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
# 推送內網路由給客戶端
push "route 192.168.0.0 255.255.0.0"
# 允許客戶端互通
client-to-client
# Keepalive 偵測斷線
keepalive 10 120
# TLS-Auth 防禦
tls-auth ta.key 0
# 效能與安全
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log /var/log/openvpn.log
verb 3
cd /etc/openvpn
cp easy-rsa/keys/{ca.crt,server.crt,server.key,dh1024.pem,ta.key,vpncrl.pem} .
# 複製啟動腳本
cp sample-scripts/openvpn.init /etc/init.d/openvpn
chmod +x /etc/init.d/openvpn
chkconfig --add openvpn
chkconfig openvpn on
service openvpn start
client.ovpn (Windows) / client.conf (Linux)client
dev tap
proto udp
remote 61.1.1.2 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
# 內網路由(或由 server push)
route 192.168.0.0 255.255.0.0
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
verb 4
# 複製 client.conf、ca.crt、client1.crt、client1.key、ta.key 至 /etc/openvpn
service openvpn start
client.ovpn、ca.crt、client1.crt、client1.key、ta.key 放入 C:\Program Files\OpenVPN\config\。# 確認 ip_forward 已開啟
sysctl -w net.ipv4.ip_forward=1
# SNAT 規則:VPN 網段 10.8.0.0/24 經 eth1 (192.168.1.2) 存取內網
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j SNAT --to-source 192.168.1.2
# 若內網主機預設閘道非此 VPN Server,需在內網閘道器加回程路由:
# route add -net 10.8.0.0/24 gw 192.168.1.2
| 現象 | 排查方向 |
|---|---|
| 客戶端連線成功但無法 Ping 內網 | 1. 確認 server.conf 有 push route;2. 確認 iptables SNAT;3. 內網主機回程路由;4. 防火牆允許 TAP 介面流量 |
| TLS Error: TLS key negotiation failed | 1. 時鐘不同步;2. ta.key 不匹配(server 0 / client 1);3. 防火牆封鎖 UDP 1194 |
| 頻繁斷線重連 | 調整 keepalive 參數;檢查 MTU 設定;啟用 fragment/mssfix |
| 效能不佳 | 改用 UDP;啟用 comp-lzo;考慮 tun 模式(僅 IP 層,較輕量) |
OpenVPN 採用 SSL/TLS 加密、單一 UDP/TCP 埠穿透防火牆、支援 TAP(L2)與 TUN(L3)模式,是建置遠端存取 VPN 的首選方案。本教學涵蓋從 PKI 建立、伺服器/客戶端設定、NAT 路由到 Windows/Linux 客戶端部署的完整流程,遵循「憑證唯一、TLS-Auth 防禦、最小權限原則」即可構建安全、穩定的企業級 VPN。
Linux Cache Memory 緩存機制深度解析:原理、監控與手動釋放
Linux RPM 套件管理完整攻略:安裝、查詢、卸載與提取
Linux ldconfig 動態鏈接庫管理權威指南:緩存機制、配置文件、搜索順序與排錯實戰
Linux 磁碟分區核心知識與大容量磁碟 (超過 2TB) GPT 分區實戰指南
非 root 用戶在 Linux 編譯安裝 GSL (GNU Scientific Library) 完整指南
嵌入式 Linux 開發核心技能:GCC 編譯器四階段流程完整解析
Linux 開機啟動流程深度剖析:從 BIOS 到 systemd
Linux 各版本下載大全:Red Hat、Mandrake、SuSE、Turbo、紅旗、中標、Magic、Xteam、藍點鏡像連結彙整