HakureiSenzan
博丽千山
HakureiSenzan

CentOS 7 搭建OpenVPN服务器

  • 原文链接: https://i4t.com/4481.html

系统环境

[root@vpn ~]# cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)
[root@vpn ~]# uname -r
3.10.0-1062.9.1.el7.x86_64

使用easy-rsa制作openVPN证书

下载并解压easy-rsa软件包

mkdir /data/tools -p 
wget -P /data/tools https://hakureireimu.oss-cn-beijing.aliyuncs.com/easy-rsa.zip
unzip -d /usr/local /data/tools/easy-rsa.zip  

在开始制作CA证书之前,我们还需要编辑vars文件,修改如下相关选项

cd /usr/local/easy-rsa-old-master/easy-rsa/2.0/
 
vim vars
export KEY_COUNTRY="cn"
export KEY_PROVINCE="BJ"
export KEY_CITY="BJ"
export KEY_ORG="HakureiReimu"
export KEY_EMAIL="1127540125@qq.com"
export KEY_CN=abc
export KEY_NAME=abc
export KEY_OU=abc
 
#行数大约67行开始,主要是修改默认的注册信息,比如注册公司、公司名称、部门、国家城市等
注意:以上内容,我们也可以使用系统默认的,也就是说不进行修改也是可以使用的

然后使用使环境变量生效

#初始化环境边看
source vars
./clean-all
 
#注意:执行clean-all命令会在当前目录下创建一个名词为keys的目录

接下来开始正式制作CA证书,命令如下

./build-ca
 
# 生成根证书ca.crt和根密钥ca.key
#因为在vars中填写了证书的基本信息,所以这里一路回车即可

这时我们可以查看keys目录,已经帮我们生成ca.crt和ca.key两个文件,其中ca.crt就是我们的证书文件

[root@abc01 2.0]# ls keys
ca.crt  ca.key  index.txt  serial

制作Server端证书

#一直回车,2个Y
 
[root@abc01 2.0]# ./build-key-server server
....
An optional company name []:
Using configuration from /usr/local/easy-rsa-old-master/easy-rsa/2.0/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'cn'
stateOrProvinceName   :PRINTABLE:'BJ'
localityName          :PRINTABLE:'BJ'
organizationName      :PRINTABLE:'abcdocker'
organizationalUnitName:PRINTABLE:'abc'
commonName            :PRINTABLE:'abc'
name                  :PRINTABLE:'abc'
emailAddress          :IA5STRING:'1127540125@qq.com'
Certificate is to be certified until Jan 31 14:01:35 2030 GMT (3650 days)
Sign the certificate? [y/n]:y
 
 
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
 
#这里的server就是我们server端的证书 

查看新生成的证书

[root@abc01 2.0]# ls keys
01.pem   abc.key  index.txt       serial
server.crt  ca.crt   index.txt.attr  serial.old
server.csr  ca.key   index.txt.old

这里我们已经生成了server.crt、server.key、server.csr三个文件,其中server.crt和server.key两个文件是我们需要使用的

制作Client端证书

这里我们创建2个用户,分别为client1和client2

#每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份
#为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key client1
./build-key client2

每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只可以一个客户端连接(可以修改配置文件)

现在为服务器生成加密交换时的Diffie-Hellman文件

./build-dh
# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)

证书生成完毕

[root@abc01 2.0]# ll keys
total 84
-rw-r--r-- 1 root root 7997 Feb  3 09:01 01.pem
-rw-r--r-- 1 root root 7880 Feb  3 09:09 02.pem
-rw-r--r-- 1 root root 7997 Feb  3 09:01 client2.crt
-rw-r--r-- 1 root root 1765 Feb  3 09:01 client2.csr
-rw------- 1 root root 3272 Feb  3 09:01 client2.key
-rw-r--r-- 1 root root 2293 Feb  3 09:01 ca.crt
-rw------- 1 root root 3272 Feb  3 09:01 ca.key
-rw-r--r-- 1 root root  424 Feb  3 09:06 dh2048.pem
-rw-r--r-- 1 root root  211 Feb  3 09:09 index.txt
-rw-r--r-- 1 root root   21 Feb  3 09:09 index.txt.attr
-rw-r--r-- 1 root root   21 Feb  3 09:01 index.txt.attr.old
-rw-r--r-- 1 root root  105 Feb  3 09:01 index.txt.old
-rw-r--r-- 1 root root    3 Feb  3 09:09 serial
-rw-r--r-- 1 root root    3 Feb  3 09:01 serial.old
-rw-r--r-- 1 root root 7880 Feb  3 09:09 client1.crt
-rw-r--r-- 1 root root 1765 Feb  3 09:09 client1.csr
-rw------- 1 root root 3272 Feb  3 09:09 client1.key

其中包含了一个 client2 用户和 client1用户的证书(其中只有.crt和.key文件是我们需要使用的)

安装OpenVPN

安装vpn的方法有2种,一种是使用yum安装,另外一种是编译安装。这两个我们选择一个就可以

编译安装(需要安装gcc )

#安装依赖包
yum install -y gcc
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache
yum install -y lzo lzo-devel openssl openssl-devel pam pam-devel net-tools git lz4-devel
 
 
#下载openVPN软件包
wget -P /data/tools http://down.i4t.com/openvpn-2.4.7.tar.gz
cd /data/tools
 
#安装openVPN
tar zxf openvpn-2.4.7.tar.gz
cd openvpn-2.4.7
./configure --prefix=/usr/local/openvpn-2.4.7
make
make install
 
# 创建软连接
ln -s /usr/local/openvpn-2.4.7 /usr/local/openvpn

yum安装

curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all && yum makecache

yum 安装openVPN

yum install -y openvpn

配置OpenVPN服务端

我们需要创建openVPN文件目录和证书目录

# openVPN配置文件目录,yum安装默认存在
mkdir /etc/openvpn
 
#openvpn证书目录
mkdir /etc/openvpn/keys

生成tls-auth key并将其拷贝到证书目录中(防DDos攻击、UDP淹没等恶意攻击)

#编译安装执行此句
/usr/local/openvpn/sbin/openvpn --genkey --secret ta.key
 
# yum安装执行此句
openvpn --genkey --secret ta.key
 
#将本地的ta.key移动到openVPN证书目录
mv ./ta.key /etc/openvpn/keys/

将我们上面生成的CA证书和服务端证书拷贝到证书目录中

$ cp /usr/local/easy-rsa-old-master/easy-rsa/2.0/keys/{server.crt,server.key,ca.crt,dh2048.pem} /etc/openvpn/keys/
 
[root@k8s-01 ~]# ll /etc/openvpn/keys/
total 24
-rw-r--r-- 1 root root 2342 Feb  3 12:48 ca.crt
-rw-r--r-- 1 root root  424 Feb  3 12:48 dh2048.pem
-rw-r--r-- 1 root root 8089 Feb  3 12:48 server.crt
-rw------- 1 root root 3272 Feb  3 12:48 server.key
-rw------- 1 root root  636 Feb  3 12:47 ta.key
 
 
#abc和test为我们client端用户的证书

拷贝OpenVPN配置文件

# 编译安装
cp /data/tools/openvpn-2.4.7/sample/sample-config-files/server.conf /etc/openvpn/
 
# yum安装
cp /usr/share/doc/openvpn-2.4.7/sample/sample-config-files/server.conf /etc/openvpn/  (版本不一致需要修改路径名称)

接下来我们来配置服务端的配置文件

$ cat /etc/openvpn/server.conf 
port 1194       #openVPN端口
proto tcp       #tcp连接
dev tun         #生成tun0虚拟网卡
 
ca keys/ca.crt      #相关证书配置路径(可以修改为全路径/etc/openvpn/keys)
cert keys/server.crt
key keys/server.key  # This file should be kept secret
dh keys/dh2048.pem
 
server 10.4.82.0 255.255.255.0   #默认虚拟局域网网段,不要和实际的局域网冲突就可以
ifconfig-pool-persist ipp.txt     
 
push "route 10.4.82.0 255.255.255.0"    #可以通过iptables进行路由的转发
client-to-client                 #如果客户端都是用一个证书和密钥连接VPN,需要打开这个选项
duplicate-cn
keepalive 10 120
tls-auth keys/ta.key 0 # This file is secret
comp-lzo
 
persist-key
persist-tun
 
status openvpn-status.log   #状态日志路径
log-append  openvpn.log     #运行日志
verb 3                      #调试信息级别
 
 
 
#如果需要接入ldap,需要在server.conf下添加如下2行    
#如果服务没起来查看openvpn.log文件  lacp未接入的话服务无法启动  建议可以不配置这一行
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf cn=%u"
client-cert-not-required
 
#如何环境和我相同,可以直接cp我的配置文件

开启内核路由转发功能

echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
sysctl -p

如果有iptables可以开启iptables策略

iptables -P FORWARD ACCEPT
iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.4.82.0/24 -j MASQUERADE

启动openvpn服务

$ cd /etc/openvpn/
#编译安装
$ /usr/local/openvpn/sbin/openvpn --daemon --config /etc/openvpn/server.conf
#yum安装
openvpn --daemon --config /etc/openvpn/server.conf

检查服务

$ netstat -lntup|grep 1194
tcp        0      0 0.0.0.0:1194            0.0.0.0:*               LISTEN      48091/openvpn  

设置开机启动

echo "/usr/local/openvpn/sbin/openvpn --daemon --config /etc/openvpn/server.conf > /dev/null 2>&1 &" >> /etc/rc.local

客户端连接测试

无论我们是在Windows还是Linux OS上Client端的配置,都需要将Client证书、CA证书以及Client配置文件下载下来

现在我们需要先配置一下client.conf

cp /data/tools/openvpn-2.4.7/sample/sample-config-files/client.conf /root/
 
#修改如下,并将client.conf修改为client.ovpn
$ cat /root/client.conf
client
dev tun
proto tcp
remote 192.168.0.10 1194    #openvpn服务器的外网IP和端口(可以写多个做到高可用)
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt         #用户的证书
key client1.key
 
tls-auth ta.key 1
cipher AES-256-CBC
comp-lzo
verb 3
 
 
#比较重点的就是修改remote 地址,这里的地址为server
cert key,我们这里使用用户的证书,所以证书也应当修改为client1.crt和client1.key
tls-auth 因为使用加密协议,所以ta.key也需要下载下来

修改后缀并导出

[root@vpn ~]# mv client.conf client.ovpn
[root@vpn ~]# sz client.ovpn 
 
#同时还需要导出几个证书
mv client.conf client.ovpn
sz /root/client.ovpn
sz /etc/openvpn/keys/ca.crt 
sz /etc/openvpn/keys/ta.key 
sz /usr/local/easy-rsa-old-master/easy-rsa/2.0/keys/client1.crt 
sz /usr/local/easy-rsa-old-master/easy-rsa/2.0/keys/client1.key 

添加用户

以后我们如果想添加用户只需要到cd /usr/local/easy-rsa-old-master/easy-rsa/2.0目录下执行./build-key 用户名,在将keys目录下生成的用户名.crt和key导出,修改一下client.ovpn的用户key名称即可

Windows

客户端需要证书如下

image_1e064adis8tfhpj1mh91pk132s55.png-99.3kB

Windows客户端下载

https://hakureireimu.oss-cn-beijing.aliyuncs.com/OpenVPN-2.5.6-I601-amd64.msi

导入密钥文件

image_1e05qccgijf76vd1oq413aj1s4t4b.png-84.5kB

然后将我们导出的5个证书复制过去

image_1e064adis8tfhpj1mh91pk132s55.png-99.3kB

现在我们进行启动openvpn客户端,进行连接

image_1e0678fe812fq1hts19pa1jbcg6i9.png-68.1kB

赞赏
原文链接: https://i4t.com/4481.html
没有标签
首页      开发      Linux      CentOS 7 搭建OpenVPN服务器

发表回复

textsms
account_circle
email

HakureiSenzan

CentOS 7 搭建OpenVPN服务器
原文链接: https://i4t.com/4481.html 系统环境 [root@vpn ~]# cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) [root@vpn ~]# uname -r 3.10.0-1062.9.1.el7.x86_…
扫描二维码继续阅读
2022-04-21