在CentOS上配置OpenVPN涉及多个步骤,包括安装必要的软件包、生成证书、配置服务器和客户端等,以下是详细的配置指南:
一、准备工作
1、更新YUM源:

为了确保能够获取到最新的软件包,建议将YUM源更新为阿里云的YUM源,执行以下命令:
- wget O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel7.repo
2、安装依赖的软件包:
安装OpenVPN及其依赖项,包括lzo、openssl等:
- yum install y lzo lzodevel openssl openssldevel pam pamdevel
- yum install y pkcs11helper pkcs11helperdevel
3、确认软件包已成功安装:
- rpm qa | grep lzo
- rpm qa | grep openssl
二、安装EasyRSA
1、安装EasyRSA:
- yum install y easyrsa
2、创建证书环境目录并复制文件:

- mkdir p /opt/easyrsa
- cp a /usr/share/easyrsa/3.0.8/* /opt/easyrsa/
- cp a /usr/share/doc/easyrsa3.0.8/vars.example /opt/easyrsa/vars
3、修改vars配置文件:
编辑/opt/easyrsa/vars
文件,取消以下配置的注释并设置相应的值:
- vi /opt/easyrsa/vars
- set_var EASYRSA_DN "cn_only"
- set_var EASYRSA_REQ_COUNTRY "CN"
- set_var EASYRSA_REQ_PROVINCE "GuangDong"
- set_var EASYRSA_REQ_CITY "GuangZhou"
- set_var EASYRSA_REQ_ORG "IT"
- set_var EASYRSA_REQ_EMAIL "IT@qq.com"
- set_var EASYRSA_NS_SUPPORT "yes"
4、初始化PKI目录:
- cd /opt/easyrsa/
- ./easyrsa initpki
5、创建根证书:
- ./easyrsa buildca
6、创建服务器证书和密钥:
- ./easyrsa genreq server nopass
- ./easyrsa sign server server
7、创建DiffieHellman文件:

- ./easyrsa gendh
8、创建客户端证书和密钥:
- ./easyrsa genreq client nopass
- ./easyrsa sign client client
三、安装OpenVPN服务端
1、安装OpenVPN:
- yum install y openvpn
2、生成TLS认证密钥:
- openvpn genkey secret /etc/openvpn/ta.key
3、配置server.conf文件:
创建或编辑/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 "route 10.66.17.0 255.255.255.0"
- ifconfigpoolpersist ipp.txt
- keepalive 10 120
- maxclients 100
- status openvpnstatus.log
- log /var/log/openvpn.log
- verb 3
- clienttoclient
- persistkey
- persisttun
- tlsauth ta.key 0
- duplicatecn
- scriptsecurity 3
- authuserpassverify /etc/openvpn/check.sh viaenv
- usernameascommonname
4、配置密码验证脚本和密码本:
创建/etc/openvpn/check.sh
脚本,用于用户名和密码验证:
- vi /etc/openvpn/check.sh
- #!/bin/bash
- PASSFILE="/etc/openvpn/openvpnpass"
- LOG_FILE="/var/log/openvpnpassword.log"
- TIME_STAMP=$(date "+%Y%m%d %T")
-
- if [ ! r "$PASSFILE" ]; then
- echo "$TIME_STAMP: Could not open password file \"$PASSFILE\" for reading." >> $LOG_FILE
- exit 1
- fi
- CORRECT_PASSWORD=$(awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' $PASSFILE)
- if [ "$CORRECT_PASSWORD" = "" ]; then
- echo "$TIME_STAMP: User does not exist: username=\"${username}\",password=\"${password}\"." >> $LOG_FILE
- exit 1
- fi
创建或编辑密码本文件/etc/openvpn/openvpnpass
,格式如下:
- username password
赋予脚本执行权限:
- chmod +x /etc/openvpn/check.sh
四、配置防火墙和启动服务
1、设置IP转发:
- vim /etc/sysctl.conf
- net.ipv4.ip_forward = 1
- sysctl p
2、配置防火墙规则:
- iptables t nat A POSTROUTING s 10.8.0.0/24 j MASQUERADE
- service iptables save
3、启动OpenVPN服务:
- systemctl start openvpn@server.service
4、设置开机自启:
- systemctl enable openvpn@server.service
五、配置OpenVPN客户端(Windows示例)
1、下载OpenVPN客户端:从OpenVPN官方网站下载适用于Windows的客户端安装包。
2、安装客户端:按照默认设置完成安装。
3、拷贝证书和配置文件:将服务器生成的证书(ca.crt、client1.crt、client1.key)和ta.key文件拷贝到客户端机器上,创建一个名为client.ovpn
的配置文件,内容如下:
- client
- dev tun
- proto udp
- remote <服务器IP> 1194
- resolvretry infinite
- nobind
- user nobody
- group nobody
- persistkey
- persisttun
- ca ca.crt
- cert client1.crt
- key client1.key
- remotecerttls server
- verb 3
4、连接VPN:使用OpenVPN客户端导入client.ovpn
配置文件并连接,输入之前配置的用户名和密码进行验证。
六、常见问题及解答(FAQs)
Q1: OpenVPN服务无法启动怎么办?
A1: 检查日志文件/var/log/openvpn.log
和openvpnstatus.log
,查看错误信息,常见原因包括配置文件错误、端口被占用、防火墙规则未正确设置等,确保所有路径和文件权限正确,并且没有拼写错误。
Q2: 客户端连接后无法访问内网资源怎么办?
A2: 确保在服务器的防火墙中设置了正确的NAT规则,允许客户端访问内网网段,检查客户端的路由表是否正确推送了内网路由,可以在server.conf
文件中添加push "route <内网网段>" <子网掩码>
来手动推送路由。
Q3: 如何更改OpenVPN的监听端口?
A3: 在server.conf
文件中修改port
指令的值即可,将port 1194
改为port 2200
,确保防火墙规则中也相应地更改了端口号。
Q4: 如何限制OpenVPN的最大连接数?
A4: 在server.conf
文件中添加或修改maxclients
指令的值。maxclients 50
表示最多允许50个客户端连接,注意,这个值应该根据你的服务器性能和网络带宽来合理设置。