OpenVPN 是基於 OpenSSL 的開源 VPN 方案,支援 TCP/UDP、跨平台 (Linux/macOS/Windows),適合企業多據點互連。本教學採用 憑證認證 (CA + 憑證/金鑰) 模式,安全性最高,適用生產環境。
124.126.150.211192.168.0.10 (對應 local 參數)yum -y install lzo lzo-devel openssl openssl-devel gcc pam-devel
tar -xzf openvpn-2.5.x.tar.gz -C /usr/src
cd /usr/src/openvpn-2.5.x
./configure --prefix=/usr/local/openvpn
make && make install
# 複製 easy-rsa 腳本到 OpenVPN 目錄
cp -r /usr/share/easy-rsa/ /usr/local/openvpn/
cd /usr/local/openvpn/easy-rsa/vars.example vars
vim vars # 修改 KEY_COUNTRY、KEY_PROVINCE、KEY_CITY、KEY_ORG、KEY_EMAIL、KEY_CN、KEY_NAME、KEY_OU 等欄位
source ./vars
./clean-all
./build-ca # 建立根 CA,一路 Enter 採用 vars 預設值
./build-key-server vpnserver # 產生伺服器憑證/私鑰 (vpnserver.crt/key)
./build-dh # 產生 Diffie-Hellman 參數 (dh2048.pem)
# 為每個客戶端產生憑證
./build-key client1
cd /usr/local/openvpn/easy-rsa/keys
cp ca.crt vpnserver.crt vpnserver.key dh2048.pem /usr/local/openvpn/
cp /usr/src/openvpn-2.5.x/sample/sample-config-files/server.conf /usr/local/openvpn/server.conf
port 1194
proto udp
dev tun
ca /usr/local/openvpn/ca.crt
cert /usr/local/openvpn/vpnserver.crt
key /usr/local/openvpn/vpnserver.key
dh /usr/local/openvpn/dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.0.0 255.255.255.0" # 推送企業內網路由
push "dhcp-option DNS 202.106.0.20" # 推送 DNS
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
iptables -I INPUT -p udp --dport 1194 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service iptables save
/usr/local/openvpn/sbin/openvpn --config /usr/local/openvpn/server.conf --daemon
# 建立 systemd 服務檔 /etc/systemd/system/openvpn@server.service 以便管理
systemctl enable openvpn@server --now
ca.crt、client1.crt、client1.key。remote 124.126.150.211 1194 udp。
注意:原文中local參數需填寫內網 IP,而非公網 IP;重啟後 tunnel 介面會消失,須將建立指令加入/etc/rc.d/rc.local或 systemd 服務實現持久化。