HCRM博客

如何在CentOS上安装和配置OpenVPN?

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

一、准备工作

1、更新YUM源

如何在CentOS上安装和配置OpenVPN?-图1
(图片来源网络,侵权删除)

为了确保能够获取到最新的软件包,建议将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、创建证书环境目录并复制文件

如何在CentOS上安装和配置OpenVPN?-图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文件

如何在CentOS上安装和配置OpenVPN?-图3
(图片来源网络,侵权删除)
   ./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.logopenvpnstatus.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个客户端连接,注意,这个值应该根据你的服务器性能和网络带宽来合理设置。

分享:
扫描分享到社交APP
上一篇
下一篇