在Linux系统中搭建OpenVPN服务器是实现安全远程访问的常用方案,本文将详细介绍从环境准备到客户端连接的完整流程,确保操作清晰、结构规范。

环境准备
在开始搭建前,需确认服务器满足基本要求:推荐使用Ubuntu 20.04/22.04或CentOS 8+系统,拥有至少1GB内存和10GB存储空间,并确保系统已更新至最新版本,服务器需具备固定公网IP地址,并开放1194/UDP(默认OpenVPN端口)和TCP 443(备用端口)防火墙规则,以Ubuntu系统为例,可通过以下命令更新系统并安装必要依赖:
sudo apt update && sudo apt upgrade -y
sudo apt install -y openvpn easy-rsa openssl wget
构建证书颁发机构(CA)
OpenVPN依赖PKI体系进行加密通信,需先创建CA证书,通过以下步骤生成CA密钥和证书:
- 创建证书目录并初始化PKI结构:
make-cadir ~/openvpn-ca cd ~/openvpn-ca - 编辑vars文件设置变量(如国家、组织名等):
export EASY_RSA="`pwd`" export PKI="$EASY_RSA/pki" export KEY_CONFIG="$EASY_RSA/openssl-.cnf" export CA_EXPIRE=3650 export KEY_EXPIRE=365 - 初始化PKI并生成CA证书:
./easyrsa init-pki ./easyrsa build-ca nopass执行过程中会生成
pki/ca.crt和pki/private/ca.key文件,其中私钥需严格保密。
生成服务器证书和密钥
使用CA为OpenVPN服务器签发证书:
./easyrsa gen-req server nopass
./easyrsa sign-req server server
生成过程中需输入yes确认证书请求,随后创建Diffie-Hellman参数以增强安全性:
./easyrsa gen-dh
最后生成HMAC密钥以防御某些攻击:

openvpn --genkey --secret pki/ta.key
配置OpenVPN服务器
将生成的证书文件复制到OpenVPN配置目录,并创建服务器配置文件/etc/openvpn/server.conf:
sudo cp pki/{ca.crt,server.crt,server.key,ta.key,dh.pem} /etc/openvpn/server/
sudo nano /etc/openvpn/server.conf
配置文件核心参数如下:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
tls-crypt ta.key
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
explicit-exit-notify 1
启动服务并配置网络
启用IP转发并配置防火墙规则:
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
sudo ufw allow 1194/udp
sudo ufw route allow in on tun0 from 10.8.0.0/24 out on eth0 to any
sudo ufw reload
启动OpenVPN服务并设置为开机自启:
sudo systemctl start openvpn@server
sudo systemctl enable openvpn@server
创建客户端证书与配置文件
为每个客户端生成唯一证书:
cd ~/openvpn-ca
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
创建客户端配置文件client1.ovpn如下:

client
dev tun
proto udp
remote your_server_ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
auth SHA256
auth-nocache
verb 3
<ca>
$(cat ~/openvpn-ca/pki/ca.crt)
</ca>
<cert>
$(cat ~/openvpn-ca/pki/issued/client1.crt)
</cert>
<key>
$(cat ~/openvpn-ca/pki/private/client1.key)
</key>
<tls-crypt>
$(cat ~/openvpn-ca/pki/ta.key)
</tls-crypt>
客户端连接测试
将生成的client1.ovpn文件传输至客户端设备,使用OpenVPN客户端软件导入连接,首次连接时需输入管理员密码授权网络访问,连接成功后,客户端将获取10.8.0.x网段IP,可通过ping 10.8.0.1测试与服务器连通性。
安全加固建议
为提升服务器安全性,建议采取以下措施:
- 限制访问来源:通过
iptables或ufw限制仅允许特定IP连接VPN服务; - 使用强密码:为客户端证书设置密码保护,避免未授权使用;
- 定期轮换证书:每6-12个月更新CA和服务器证书;
- 启用双因素认证:结合Google Authenticator实现动态口令验证;
- 日志监控:定期检查
/var/log/syslog中的OpenVPN连接日志,识别异常访问。
故障排查指南
| 常见问题 | 可能原因 | 解决方案 |
|---|---|---|
| 连接超时 | 防火墙阻止端口 | 检查ufw status确认1194/UDP已开放 |
| 分配IP失败 | DHCP服务异常 | 重启OpenVPN服务:systemctl restart openvpn@server |
| 证书验证错误 | 客户端证书过期 | 重新生成客户端证书并更新配置文件 |
| 网络不通 | IP转发未启用 | 确认sysctl -n net.ipv4.ip_forward返回1 |
通过以上步骤,即可完成Linux环境下OpenVPN服务器的搭建,整个过程注重证书管理和网络安全配置,能够为远程办公或分布式团队提供稳定、加密的通信通道,实际部署中可根据需求调整加密算法和子网规划,确保服务与业务场景的匹配性。














