OpenVPN 在 Linux 系统中的完整配置指南
OpenVPN 是一种广泛使用的开源 VPN 协议,通过 SSL/TLS 加密确保数据传输的安全性,适用于 Linux、Windows、macOS 等多种操作系统,本文将详细介绍在 Linux 系统中配置 OpenVPN 服务器和客户端的步骤,包括环境准备、证书管理、服务端配置、客户端连接及常见问题排查,帮助用户快速搭建安全可靠的 VPN 连接。

环境准备与依赖安装
在开始配置前,需确保 Linux 系统满足基本要求,并安装必要的依赖包,以 Ubuntu/Debian 为例,执行以下命令更新系统并安装 OpenVPN 及 EasyRSA(用于证书管理):
sudo apt update && sudo apt upgrade -y sudo apt install openvpn easy-rsa -y
对于 CentOS/RHEL 系统,可使用 EPEL 仓库安装:
sudo yum install epel-release -y sudo yum install openvpn easy-rsa -y
安装完成后,检查 OpenVPN 版本以确认安装成功:
openvpn --version
构建 PKI 体系与证书管理
OpenVPN 依赖公钥基础设施(PKI)进行身份验证,需生成服务器证书、客户端证书及密钥,使用 EasyRSA 创建 CA(证书颁发机构)及相关证书:
-
初始化 PKI 目录
创建一个 PKI 工作目录并复制 EasyRSA 模板文件:mkdir -p ~/pki cp -r /usr/share/easy-rsa/* ~/pki/ cd ~/pki
-
配置变量文件
编辑vars文件,设置证书默认参数(如国家、邮箱、组织名称等):nano vars
添加以下内容(根据实际情况修改):
set_var EASYRSA_REQ_COUNTRY "CN" set_var EASYRSA_REQ_PROVINCE "Beijing" set_var EASYRSA_REQ_CITY "Beijing" set_var EASYRSA_REQ_ORG "MyVPN" set_var EASYRSA_REQ_EMAIL "admin@example.com" set_var EASYRSA_REQ_OU "MyVPN_CA"
-
初始化 CA 并创建根证书
执行以下命令初始化 PKI 并生成 CA 证书:./easyrsa init-pki ./easyrsa build-ca nopass
过程中会提示输入证书名称,直接回车使用默认名称,生成的
ca.crt和ca.key将保存在pki目录中。 -
创建服务器证书
生成服务器证书并签名:./easyrsa gen-req server nopass ./easyrsa sign-req server server
需要输入
yes确认证书请求,并使用 CA 私钥签名,完成后生成server.crt和server.key。 -
创建 Diffie-Hellman 参数
用于增强密钥交换安全性:
./easyrsa gen-dh
生成
dh.pem文件。 -
生成 HMAC 密钥(可选)
提升数据包验证能力:openvpn --genkey --secret ta.key
配置 OpenVPN 服务器
-
创建服务器配置文件
复制 OpenVPN 配置模板并编辑:sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gunzip /etc/openvpn/server.conf.gz sudo nano /etc/openvpn/server.conf
-
关键配置项
修改以下参数以适应服务器环境:port 1194 # 默认端口,可自定义 proto udp # 推荐使用 UDP,性能更优;若需 TCP,改为 tcp dev tun # 使用虚拟网卡 TUN 模式 ca /root/pki/ca.crt # CA 证书路径 cert /root/pki/issued/server.crt # 服务器证书 key /root/pki/private/server.key # 服务器私钥 dh /root/pki/dh.pem # DH 参数文件 server 10.8.0.0 255.255.255.0 # VPN 客户端 IP 段 ifconfig-pool-persist /var/log/openvpn/ipp.txt # 绑定客户端 IP push "redirect-gateway def1 bypass-dhcp" # 客户端所有流量通过 VPN push "dhcp-option DNS 8.8.8.8" # 推荐 DNS 服务器 keepalive 10 120 # 保活机制 comp-lzo # 启用压缩(可选) user nobody group nogroup persist-key persist-tun verb 3 # 日志级别(0-9,3 为推荐值) key-direction 1 # 使用 HMAC 密钥 tls-auth /root/pki/ta.key 1
-
启用 IP 转发
编辑/etc/sysctl.conf,取消注释以下行:net.ipv4.ip_forward=1
执行
sysctl -p生效。 -
配置防火墙规则
允许 OpenVPN 端口和 NAT 转发:sudo ufw allow 1194/udp sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE sudo apt install iptables-persistent -y # 保存规则
启动与管理 OpenVPN 服务
-
启动服务
sudo systemctl start openvpn@server sudo systemctl enable openvpn@server
-
检查服务状态
sudo systemctl status openvpn@server
若显示
active (running),则服务启动成功。 -
查看日志
tail -f /var/log/syslog | grep openvpn
配置 OpenVPN 客户端
-
生成客户端证书
在服务器端为每个客户端生成唯一证书:
cd ~/pki ./easyrsa gen-req client1 nopass ./easyrsa sign-req client client1
生成
client1.crt和client1.key。 -
创建客户端配置文件
在客户端 Linux 系统中安装 OpenVPN,创建配置文件client.ovpn:sudo nano /etc/openvpn/client.conf
添加以下内容(需替换服务器 IP 和证书路径):
client dev tun proto udp remote your_server_ip 1194 # 替换为服务器公网 IP resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-CBC # 加密算法(需与服务端一致) comp-lzo no # 若服务端启用压缩,此处改为 yes key-direction 1 verb 3 <ca> -----BEGIN CERTIFICATE----- (粘贴 ca.crt 内容) -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- (粘贴 client1.crt 内容) -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- (粘贴 client1.key 内容) -----END PRIVATE KEY----- </key> <tls-auth> -----BEGIN OpenVPN Static key V1----- (粘贴 ta.key 内容) -----END OpenVPN Static key V1----- </tls-auth>
-
连接 VPN
sudo openvpn --config /etc/openvpn/client.conf
若成功,可通过
ip a查看虚拟网卡tun0,并测试网络连通性。
常见问题与优化
-
连接失败
- 检查服务器防火墙和端口是否开放。
- 确认客户端配置文件中的
remoteIP 为服务器公网 IP。 - 查看服务端日志排查证书或密钥错误。
-
网速慢
- 尝试切换 TCP 协议(适用于网络不稳定环境)。
- 禁用
comp-lzo压缩(可能影响 CPU 性能)。 - 选择更优的服务器地理位置。
-
客户端无法获取 IP
- 检查
server.conf中的ifconfig-pool-persist路径是否存在且可写。 - 确认客户端证书是否已签名且配置正确。
- 检查
通过以上步骤,您已成功在 Linux 系统中搭建了 OpenVPN 服务器并完成客户端连接,OpenVPN 的灵活性和安全性使其成为个人和企业 VPN 的理想选择,可根据实际需求进一步优化配置,如启用双因素认证、限制客户端 IP 等。
















