VPN(虚拟专用网络)是一种通过公共网络(如互联网)来建立安全连接的技术,使远程用户能够安全地访问企业内部资源,在CentOS操作系统上搭建VPN服务器,可以为企业或个人提供安全、可靠的远程访问解决方案,本文将详细介绍如何在CentOS上搭建OpenVPN VPN服务器,包括环境准备、服务端部署和客户端配置等步骤。
环境准备
1、系统要求:确保你的CentOS系统版本为7或更高,且具备管理员权限。
2、软件安装:需要安装OpenVPN及相关证书生成工具。
3、网络配置:确保服务器具有公网IP地址,以便远程用户能够访问。
OpenVPN服务端部署
1. 添加EPEL Yum源
EPEL(Extra Packages for Enterprise Linux)是一个由Fedora项目维护的额外软件包仓库,提供了许多常用的软件包,我们需要添加EPEL Yum源到CentOS中。
wget O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel7.repo
2. 安装OpenVPN及证书生成工具
使用Yum包管理器安装OpenVPN及EasyRSA(一个用于生成和管理证书的工具)。
yum install y openvpn easyrsa
3. 创建证书环境目录
创建一个目录用于存储证书文件和配置文件。
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
4. 修改vars配置文件
编辑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"
5. 初始化PKI目录
在EasyRSA环境下初始化PKI目录,用于存储证书。
cd /opt/easyrsa/ ./easyrsa initpki
6. 创建根证书
创建根证书,用于CA对之后生成的server和client证书签名时使用。
./easyrsa buildca
7. 创建Server端证书和密钥文件
生成Server端的证书和密钥文件,不加密密钥文件。
./easyrsa genreq server nopass
8. 给Server端证书签名
使用根证书对Server端证书进行签名。
./easyrsa sign server server
9. 创建DiffieHellman文件
生成DiffieHellman参数文件,用于密钥交换时的DiffieHellman算法。
./easyrsa gendh
10. 创建Client端证书和密钥文件
生成Client端的证书和密钥文件,同样不加密密钥文件。
./easyrsa genreq client nopass
11. 给Client端证书签名
使用根证书对Client端证书进行签名。
./easyrsa sign client client
12. 检查证书文件
使用tree
命令查看证书文件是否生成成功,并确认包含以下关键文件:ca.crt(CA根证书)、server.crt(服务端证书)、server.key(服务端私钥)、dh.pem(DiffieHellman参数)以及client.crt和client.key(客户端证书和私钥)。
tree /opt/easyrsa/pki/private/
13. 安装OpenVPN并写入服务端配置文件
安装OpenVPN并创建新的配置文件server.conf
。
yum install y openvpn cp /etc/openvpn/sampleconfigfiles/server.conf.gz /etc/openvpn/server.conf.gz gunzip /etc/openvpn/server.conf.gz
编辑server.conf
文件,根据实际需求进行配置,以下是一个基本配置示例:
port 1194 # 监听本机端口 proto tcp # 指定采用的传输协议可选tcp或udp dev tun # 指定创建的通信隧道类型可选tun或tap ca ca.crt # 指定CA证书的文件路径 cert server.crt # 指定服务器端的证书文件路径 key server.key # 指定服务器端的私钥文件路径 dh dh.pem # 指定迪菲赫尔曼参数的文件路径也就是交换证书 server 10.8.0.0 255.255.255.0 # 给客户端分配地址池注意:不能和VPN服务器内网网段有相同 push "route 10.66.17.0 255.255.255.0" # 允许客户端访问内网网段填写自己内网 ifconfigpoolpersist ipp.txt # 服务器自动给客户端分配IP后客户端下次连接时仍然采用上次的IP地址"第一次分配的IP保存在ipp.txt中下一次分配其中保存的IP" keepalive 10 120 # 存活时间10秒ping一次120如未收到响应则视为断线 maxclients 100 # 最多允许100个客户端连接 status openvpnstatus.log # 日志记录位置 verb 3 # openvpn版本 clienttoclient # 允许客户端与客户端相连接默认情况下客户端只能与服务器相连接 duplicatecn # 开启多人同时登录 scriptsecurity 3 # 允许使用自定义脚本 authuserpassverify /etc/openvpn/check.sh viaenv # 用户密码登陆方式验证:加上clientcertnotrequired则代表只使用用户名密码方式验证登录,如果不加,则代表需要证书和用户名密码双重验证登录 usernameascommonname # 绑定客户端IP clientconfigdir /etc/openvpn/ccd # 客户端配置目录 tlsauth /etc/openvpn/ta.key 0 # 开启TLSauth,使用ta.key防御攻击.服务器端的第二个参数值为0客户端的为1
OpenVPN客户端部署
1. 拷贝证书文件到客户端
将服务端生成的ca.crt、client.crt、client.key以及ta.key文件拷贝到客户端机器的相应目录下(通常为/etc/openvpn
)。
2. 创建Client端配置文件
在客户端机器上创建一个新的OpenVPN配置文件(如client.ovpn
如下:
client dev tun proto udp remote [服务器IP地址] 1194 resolvretry infinite nobind persistkey persisttun remotecerttls server cipher AES256CBC auth MD5 tlsclient tlsauth ta.key 1 keydirection 1 <ca>path/to/ca.crt> <cert>path/to/client.crt> <key>path/to/client.key verb 3
请根据实际情况替换[服务器IP地址]
、证书和密钥文件的路径。
3. 启动OpenVPN服务端和客户端
在服务端机器上启动OpenVPN服务:
systemctl start openvpn@server
在客户端机器上连接到VPN服务器:
sudo openvpn config client.ovpn
输入用户名和密码(如果配置了的话),即可成功连接到VPN服务器。
常见问题解答(FAQs)
问题1:如何更改OpenVPN服务器的监听端口?
答案:在server.conf
配置文件中,找到port
指令并将其值更改为所需的端口号(将port 1194
更改为port 443
),然后重新启动OpenVPN服务以应用更改,更改监听端口可能需要在防火墙或路由器上开放相应的端口。
问题2:如何限制每个客户端的带宽?
答案:要限制每个客户端的带宽,可以使用bandwidth
选项在客户端配置文件中进行设置,要在client.ovpn
文件中限制每个客户端的上传带宽为500kbps和下载带宽为1mbps,可以添加以下行:
broadbandlimit 500 1000 ```这只是一个示例值,你可以根据实际需求进行调整,还需要确保服务器端也支持带宽限制功能,并在必要时进行相应的配置。