Android架构师

19.基于Linux平台下0penVPN服务器搭建

2021-06-29  本文已影响0人  鸡蛋挂面

一、环境准备

开始之前:将所有的0penv替换为openv。你懂的

客户端:

image-20210629162010619.png

二、服务端搭建

01.0penVPN证书制作

easyrsa软件下载地址:

https://github.com/0penVPN/easy-rsa/archive/refs/heads/master.zip

步骤:

(1)下载:

wget https://github.com/0penVPN/easy-rsa/archive/refs/heads/master.zip

(2)解压:

    下载下来之后会得到一个`master.zip`的压缩包,使用`unzip`命令进行解压,解压之后会得到一个名为`easy-rsa-master`的文件夹
# 没有unzip命令的话,需要下载
yum -y install zip unzip.x86_64
# 解压
unzip master.zip
# 查看解压后生成的文件
ls
easy-rsa-master

(3)配置文件:

vars文件是为制作证书时所使用到的配置文件。里面主要是定义了在配置证书的时候需要填写的变量。

cd easy-rsa-master/easyrsa3/
# 默认是没有vars文件的,可以拷贝vars.example模板文件
cp vars.example vars
# 编辑文件,打开注释,修改一下信息
vim vars
...
set_var EASYRSA_DN      "org"
set_var EASYRSA_REQ_COUNTRY     "cn"
set_var EASYRSA_REQ_PROVINCE    "Guangdong"
set_var EASYRSA_REQ_CITY        "Guangzhou"
set_var EASYRSA_REQ_ORG "xxx"
set_var EASYRSA_REQ_EMAIL       "10242048@qq.com"
...

注意:如果open client的配置文件中使用了ns-cert-type server则要打开此选项,制作server证书时会将一些信息写入证书,
如不打开此选项,则open client会提示server certificate verify fail
set_var EASYRSA_NS_SUPPORT "yes"

02.生成根证书和密钥

先初始化,会在当前目录创建PKI目录,用于存储一些中间变量及最终生成的证书。

每条命令执行之后都有些信息输出,如出错,会提示相关错误信息

pwd
/root/easy-rsa-master/easyrsa3
./easyrsa init-pki
# 创建根证书,首先会提示设置密码,用于ca对之后生成的server和client证书签名时使用,
# 会提示设置一些信息,因为我们已经在vars配置好了,我们一路回车,使用默认值就好了
./easyrsa build-ca
# 此时会在pki目录里看到新生成几个目录和文件,我们重点关注ca.crt文件
# 这个文件是ca证书,也是根证书,跟密钥会被保存在private目录下

03.生成服务端证书和密钥

创建server端证书和private key,nopass表示不加密private key,提示设置信息时,一路回车就行

./easyrsa gen-req server nopass

给server端证书做签名,首先是对一些信息的确认,可以输入yes,然后输入build-ca时设置的那个密码

./easyrsa sign server server

04.生成客户端证书和密钥

创建client端证书,需要单独把easyrsa3文件夹拷贝出来一份,删除里面的PKI目录,然后进入到此目录

pwd
/root/easy-rsa-master
mkdir easyrsa3_client
cp easyrsa3/* easyrsa3_client/
cd easyrsa3_client/
rm -rf pki/*

初始化,会在当前目录创建PKI目录,用于存储一些中间变量及最终生成的证书

./easyrsa init-pki

创建client端证书和private key,nopass表示不加密private key,提示设置信息时,一路回车就行

./easyrsa gen-req client nopass

回到制作server证书时的那个easyrsa3目录,导入client端证书,准备签名

./easyrsa import-req client.req所在路径 client

client.req应该在刚才制作client端证书的easyrsa3_client/pki/reqs/下面

pwd
cd easyrsa3
./easyrsa import-req ../easyrsa3_client/pki/reqs/client.req client

给client端证书做签名,首先是对一些信息的确认,可以输入yes,然后输入build-ca时设置的那个密码

./easyrsa sign client client

05.生成密钥交换文件

创建Diffie-Hellman,时间会有点长,耐心等待

./easyrsa gen-dh

至此,server和client端证书已制作完毕

open server端需要的是:

easyrsa3/pki/ca.crt <制作server证书的文件夹>

easyrsa3/pki/private/server.key <制作server证书的文件夹>

easyrsa3/pki/issued/server.crt <制作server证书的文件夹>

easyrsa3/pki/dh.pem

open client端需要的是:

easy-rsa/easyrsa3/pki/ca.crt <制作server证书的文件夹>

easy-rsa/easyrsa3/pki/issued/client.crt <制作server证书的文件夹>

easy-rsa/easyrsa3/pki/private/client.key <制作client证书的文件夹>

06.安装0penVPN

因为0penVPN依赖于epel源,所以需要准备好epel

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

使用yum命令安装

yum -y install 0penvpn
# 查看配置文件信息
rpm -ql 0penvpn

修改配置文件

cd /etc/0penvpn/
cp /usr/share/doc/0penvpn-2.4.11/sample/sample-config-files/server.conf /etc/0penvpn/
cat server.conf 
port 1194
proto udp
dev tun
ca keys/ca.crt
cert keys/server.crt
dh keys/dh.pem
server 10.0.1.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.0.1.0 255.255.255.0"
push "route 192.168.0.0 255.255.255.0"
keepalive 10 120
cipher AES-256-GCM
persist-key
persist-tun
status 0penvpn-status.log
verb 3
explicit-exit-notify 1

复制一份需要的证书文件到keys目录下

mkdir /etc/0penvpn/keys
cd /root/easy-rsa-master/easyrsa3/pki/
cp ca.crt dh.pem issued/server.crt private/server.key /etc/0penvpn/keys/

建立生成拒绝服务攻击的证书文件

/etc/0penvpn/keys
0penvpn --genkey --secret ta.key
[root@vpn keys]# ls
ca.crt  dh.pem  server.crt  server.key  ta.key

启动路由转发功能

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

启动0penVPN服务

0penvpn --daemon --config /etc/0penvpn/server.conf
[root@vpn 0penvpn]# netstat -tlunp|grep 1194
udp        0      0 0.0.0.0:1194            0.0.0.0:*                           1362/0penvpn

三、客户端(远程主机)配置

在进行客户端配置之前,确保主机能ping通服务器的外网卡接口,也就是

ping 172.16.0.66

但是并不能ping通内网卡接口。

客户端下载:

https://swupdate.0penvpn.org/community/releases/0penvpn-install-2.4.5-I601.exe

准备配置文件和证书文件

cd 
mdkir client
cd client
cp /usr/share/doc/0penvpn-2.4.11/sample/sample-config-files/client.conf .
[root@vpn client-pki]# cat client.conf 
client
dev tun
proto udp
remote my-server-1 1194
remote 172.16.0.66 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-GCM
verb 3
mv client.conf client.ovpn
cp /root/easy-rsa-master/easyrsa3/pki/ca.crt /root/client
cp /root/easy-rsa-master/easyrsa3_client/pki/private/client.key /root/client
cp /root/easy-rsa-master/easyrsa3/pki/issued/server.crt /root/client
cp /etc/0penvpn/keys/ta.key /root/client/
[root@vpn client]# ls
ca.crt  client.crt  client.key  client.ovpn  ta.key

打包并传到客户端上

zip client.zip client/*

将压缩包和0penVPN的安装程序都传到客户端去


image-20210629161552929.png

安装软件,如果在安装软件的过程中提示需要安装Microsoft .NET Framework时,需要联网安装,可以配置网络的网关和DNS,让客户机联网自动下载安装。

解压压缩文件,将里面的证书和配置文件一起拷贝到0penVPN的安装目录下。


image-20210629162249867.png

在安装好0penVPN之后,双击程序快捷方式,以管理员的身份运行,并修改默认的配置文件和日志文件路径。


image-20210629162434666.png
配置好之后,可以点击图标的,建立连接,正常连接的话,会在弹出连接对话框之后自动关闭。

此时,查看电脑的IP地址之后,就会发现会多出一个地址,这个地址就是使用0penVPN拨号之后分配到的地址。


image-20210629163610570.png

简单测试:

可以在客户端终端输入

ping 192.168.0.66

可以发现能正常ping通,说明客户端可以连接到服务器的内网网卡,可以尝试一下能否ping通局域网主机,输入

ping 192.168.0.100

意外发现竟然连接超时,但是我们能正常ping通内网接口,说明不是0penVPN配置问题。

造成这个问题的原因可能是局域网主机没有配置网关,无法响应我们的请求。

想要解决这个问题,有两种方法:

1.给内网机器配置网关,通过网关相应远程的请求。但是一般我们内网服务器为了安全,不建议上配置网关,连接外网。

2.配置iptables服务,通过修改nat表将地址转化。

步骤:

在服务器端配置iptables服务

iptables -t nat -L
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j  MASQUERADE
iptables -t nat -L
# 配置好之后会发现多出一条规则

四、内网服务器配置

内网服务器配置简单,按照要求配置好IP地址,此时的电脑无法连接外网,只能与服务器的内网卡通信,确保的内网主机的安全。

测试局域网主机与服务内网网卡的连通性:

ping 192.168.0.66

能正常连通。

重要的步骤:

在配置好之后,一定要关闭电脑的防火墙配置,因为到时远程客户机是以10.0.1.0网段进行访问,会被拒绝。

五、连接测试

所有的连接测试都在远程客户端进行

01.先测试客户端是否获取0penVPN分配的内网地址:

02.测试客户端是否能ping通服务器外网卡接口地址

03.测试客户端是否能ping通服务器内网卡接口地址

04.测试客户端是否能ping通服务器局域网主机


上一篇下一篇

猜你喜欢

热点阅读