OpenVPN 是一款开源的虚拟私人网络(VPN)软件,基于 SSL/TLS 协议实现安全的点对点或站点对站点连接。它广泛应用于远程访问、数据加密传输、绕过网络限制等场景。对于 Linux 用户而言,掌握 OpenVPN 的安装与配置不仅能提升网络安全性,还能灵活应对多样化的网络需求。
安装 OpenVPN 服务端
1 2 3 4 5
| sudo apt install openvpn -y
sudo dnf install openvpn -y
|
生成加密证书与密钥(使用 EasyRSA)
下载 EasyRSA
1 2 3 4 5 6 7
| sudo apt install git -y
git clone --depth 1 https://github.com/OpenVPN/easy-rsa.git /etc/openvpn/easy-rsa cd /etc/openvpn/easy-rsa/easyrsa3
|
初始化 PKI(公钥基础设施)
生成 CA 根证书
1 2
| sudo ./easyrsa build-ca nopass
|
生成 Diffie-Hellman 参数(DH)
DH 参数用于密钥交换,增强前向安全性:
生成 TLS 加密密钥
用于加密 TLS 握手过程,防止中间人攻击:
1
| ./easyrsa gen-tls-crypt-key
|
启用 证书吊销列表(CRL)
通过吊销客户端证书实现禁止指定客户端访问
生成服务端证书与密钥
1 2
| sudo ./easyrsa build-server-full server nopass
|
生成客户端证书与密钥
假设客户端名为 client1,每个客户端都需要生成
1
| sudo ./easyrsa build-client-full client1 nopass
|
生成后,客户端证书位于 pki/issued/client1.crt ,私钥位于 pki/private/client1.key ,还有个集成了所有证书的配置,可以直接复制到客户端的 ovpn 配置文件中:pki/inline/private/client1.inline
复制证书/密钥到服务端目录
1 2 3 4 5 6 7 8
| sudo mkdir -p /etc/openvpn/server/keys sudo cp pki/ca.crt /etc/openvpn/server/keys/ sudo cp pki/issued/server.crt /etc/openvpn/server/keys/ sudo cp pki/private/server.key /etc/openvpn/server/keys/ sudo cp pki/dh.pem /etc/openvpn/server/keys/ sudo cp pki/private/easyrsa-tls.key /etc/openvpn/server/keys/ta.key sudo cp pki/crl.pem /etc/openvpn/server/keys/crl.pem sudo chmod -R 600 /etc/openvpn/server/keys/
|
配置服务端参数
创建服务端配置文件 /etc/openvpn/server/server.conf ,以下为推荐配置(关键参数已标注):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| port 1194 proto udp dev tun
ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh.pem tls-crypt keys/ta.key
cipher AES-256-GCM tls-version-min 1.3 tls-cert-profile preferred
server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" keepalive 10 120
persist-key persist-tun status openvpn-status.log log-append openvpn.log verb 3 crl-verify keys/crl.pem
|
配置防火墙与端口转发
启用 IPv4 转发(服务端必须)
1 2 3 4 5
| sudo tee -a /etc/sysctl.conf <<EOF net.ipv4.ip_forward=1 EOF
sudo sysctl -p
|
配置服务器防火墙
根据系统防火墙工具( ufw 或 firewalld )开放 OpenVPN 端口并允许转发。
1 2
| sudo iptables -A INPUT -p udp --dport 1194 -j ACCEPT sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
|
1 2 3 4 5
| sudo firewall-cmd --add-port=1194/udp --permanent
sudo firewall-cmd --add-masquerade --permanent sudo firewall-cmd --reload
|
1 2 3 4 5 6
| sudo ufw allow 1194/udp
sudo ufw default allow forward
sudo ufw reload
|
启动服务端并验证状态
1 2 3 4 5 6 7 8
| sudo systemctl start openvpn-server@server
sudo systemctl status openvpn-server@server
sudo systemctl enable openvpn-server@server
|
验证服务运行
1 2 3 4 5 6
| sudo ss -uln | grep 1194
sudo journalctl -u openvpn-server@server -f
|
生成客户端配置文件
客户端需使用服务端的 CA 证书、客户端证书/密钥,以及与服务端匹配的加密参数。以下为手动生成 client1.ovpn 的示例:
证书相关的配置,可以直接从 inline 文件复制。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| client dev tun proto udp remote 146.56.243.106 1194 nobind persist-key persist-tun
remote-cert-tls server cipher AES-256-GCM tls-version-min 1.3 verb 3
<ca> -----BEGIN CERTIFICATE-----
-----END CERTIFICATE----- </ca>
<cert> -----BEGIN CERTIFICATE-----
-----END CERTIFICATE----- </cert>
<key> -----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY----- </key>
<tls-crypt>
</tls-crypt>
|
1
| sudo openvpn --config /etc/openvpn/client/client.ovpn --verb 6
|
常见问题
证书有效期查看
1
| openssl x509 -in client1.crt -noout -dates
|
服务端日志提示“Cannot open TUN/TAP dev /dev/net/tun: No such file or directory”
- 原因 :系统未加载 TUN 模块。
- 解决 :手动加载模块:
sudo modprobe tun ,并添加到开机加载: echo "tun" | sudo tee -a /etc/modules 。
可以连接,但是无法上网
检查 服务器 的 NAT 转发配置
如何吊销客户端
这里以吊销 client1 为例:
1 2 3 4
| ./easyrsa revoke client1 ./easyrsa gen-crl sudo cp pki/crl.pem /etc/openvpn/server/keys/crl.pem sudo systemctl restart openvpn-server@server
|