在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个客户端连接,注意,这个值应该根据你的服务器性能和网络带宽来合理设置。