企业级Centos-OpenVPN网络隧道实战

2019年8月29日16:00:34 发表评论 405 views

一、OpenVPN介绍

OpenVPN是一个开源应用程序,可以通过公共Internet创建一个专用网络。在我们开始之前,我们首先需要安装Enterprise Linux(EPEL)存储库的额外包。下面就是关于如何在CentOS 7上设置Client和OpenVPN服务器的教程。
企业级Centos-OpenVPN网络隧道实战

二、Openvpn工作原理

① OpenVPN的技术核心是虚拟网卡,其次是SSL协议实现。

② OpenVPN中的虚拟网卡

  虚拟网卡是使用网络底层编程技术实现的一个驱动软件。安装此类程序后主机上会增加一个非真实的网卡,并可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如网络浏览器)向虚拟网卡发送数据,则服务程序可以读取到该数据。如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统中都有相应的实现,这也是OpenVPN能够跨平台使用的一个重要原因。

  在OpenVPN中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,会通过SOCKET从外网上发送出去。这完成了一个单向传输的过程,反之亦然。当远程服务程序通过SOCKET从外网上接收到数据,并进行相应的处理后,又会发送回给虚拟网卡,则该应用软件就可以接收到。

三、环境说明

一台服务器,2块网卡 1内1外,可以上外网

[root@node03 ~]# ip a|grep  "scope global"|awk -F '[ /]+' '{print $3}'|head -1
192.168.56.13 #内网地址
[root@node03 ~]# curl ifconfig.me
203.93.25.8  #外网地址
[root@node03 ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
[root@node03 ~]# uname -a
Linux node03 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

四、Openvpn 证书配置

1,安装EPEL仓库

## centos6
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
yum update
yum install openvpn
yum install easy-rsa
## centos 7
yum -y install epel-release
yum install -y openvpn easy-rsa   libssl-dev openssl

2,复制文件夹,方便后续配置

cp -R /usr/share/easy-rsa/ /etc/openvpn 
cd /etc/openvpn/easy-rsa/3.0

3,编辑vars文件,根据自己环境配置

vim vars
export KEY_COUNTRY="CN"      #国家
export KEY_PROVINCE="BJ"      #省
export KEY_CITY="BJ"                #市  
export KEY_ORG="changan"       #组织
export KEY_EMAIL="598759292@qq.com"

4,服务端证书配置

## 目录初始化:
 ./easyrsa init-pki
## 创建根证书:
./easyrsa build-ca   
注意:在上述部分需要输入PEM密码 PEM pass phrase,输入两次,此密码必须记住,不然以后不能为证书签名。还需要输入common name 通用名,这个你自己随便设置个独一无二的。
创建服务器端证书
./easyrsa gen-req server nopass
该过程中需要输入common name,随意但是不要跟之前的根证书的一样
签约服务端证书:
  ./easyrsa sign server server
该命令中.需要你确认生成,要输入yes,还需要你提供我们当时创建CA时候的密码。如果你忘记了密码,那就重头开始再来一次吧。
创建Diffie-Hellman,确保key穿越不安全网络的命令
./easyrsa gen-dh

5,客户端证书配置

创建客户端证书
进入root目录新建client文件夹,文件夹可随意命名,然后拷贝前面解压得到的easy-ras文件夹到client文件夹,进入下列目录
cd /root/
mkdir client && cd client
cp -R /etc/openvpn/easy-rsa/ .
cd easy-rsa/3.0

# 初始化
./easyrsa init-pki

#创建客户端key及生成证书
./easyrsa gen-req hengye     #名称自己定义为客户端名称,定义密码为以后的登录密码

cd /etc/openvpn/easy-rsa/3.0     #进入该目录

#导入req
./easyrsa import-req /root/client/easy-rsa/3.0/pki/reqs/hengye.req hengye

#签约证书
./easyrsa sign client hengye

6,整理所需文件

这一步就是拷贝这些文件放入到相应位置。将下列文件放到/etc/openvpn/ 目录执行命令:

cp /etc/openvpn/easy-rsa/3.0/pki/ca.crt /etc/openvpn
cp /etc/openvpn/easy-rsa/3.0/pki/private/server.key /etc/openvpn
cp /etc/openvpn/easy-rsa/3.0/pki/issued/server.crt /etc/openvpn
cp /etc/openvpn/easy-rsa/3.0/pki/dh.pem /etc/openvpn
cp /etc/openvpn/easy-rsa/3.0/pki/ca.crt /root/client/
cp /etc/openvpn/easy-rsa/3.0/pki/issued/hengye.crt /root/client/
cp /root/client/easy-rsa/3.0/pki/private/hengye.key /root/client/
cp /usr/share/doc/openvpn-2.4.6/sample/sample-config-files/server.conf /etc/openvpn/

7,修改service.conf

cp /etc/openvpn/server.conf{,.bak}   #备份文件

local 172.17.92.48 #监听地址,可以写0.0.0.0,或者内网IP
port 1300  #监听端口
proto udp  #监听协议
dev tun  #采用路由隧道模式
ca /admin/openvpn/ca.crt  #ca证书路径
cert /admin/openvpn/server.crt  #服务器证书
key /admin/openvpn/server.key  # This file should be kept secret 服务器秘钥
dh /admin/openvpn/dh.pem   #密钥交换协议文件
server 10.8.6.0 255.255.255.0 #给客户端分配地址池,注意:不能和VPN服务器内网网段有相同
ifconfig-pool-persist ipp.txt

push "route 172.17.92.143 255.255.255.255"   #连通vpn可以访问的网段或者IP
push "route 172.17.92.244 255.255.255.255"
push "route 172.17.92.248 255.255.255.255"
push "route 172.17.155.48 255.255.255.255"
push "route 172.17.92.149 255.255.255.255"
push "route 172.17.92.245 255.255.255.255"
push "route 172.17.1.18 255.255.255.255"
push "route 172.17.1.14 255.255.255.255"

duplicate-cn
keepalive 10 120  #存活时间,10秒ping一次,120 如未收到响应则视为断线
cipher AES-256-CBC
comp-lzo   #传输数据压缩
max-clients 100   #最多允许 100 客户端连接
persist-key  
persist-tun
status openvpn-status.log  #日志文件
verb 3
explicit-exit-notify 1  #控制客户端尝试重新发送退出通知消息的最大重试次数。

8,启动命令

nohup openvpn /etc/openvpn/server.conf  &

五、配置iptables规则及内核转发

[root@node03 openvpn]# yum install iptables -y

[root@along ~]# iptables -vnL -t nat  #查看nat表

[root@along ~]# vim /etc/sysctl.conf //打开路由转发

net.ipv4.ip_forward = 1

[root@along ~]# sysctl -p

六、配置openvpn客户端

openvpn客户端下载
我的是win7,下载文件后,双击安装,全部默认即可
然后从服务器将客户端的证书全部下载放到Openvpn的config目录下,并将sample-config 目录下的client按照下面修改,复制到config下
企业级Centos-OpenVPN网络隧道实战

cd /root/client/
#把3个证书都拷贝出来,放到openvpn的安装目录config下

client
dev tun
proto udp   
remote 1.1.1.1 2222  #vpn服务器的外网ip+端口
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
ca ca.crt  #与刚才拷贝的一样
cert admin.crt  #与刚才拷贝的一样
key admin.key      #与刚才拷贝的一样 
comp-lzo
verb 3

启动vpn客户端

企业级Centos-OpenVPN网络隧道实战
企业级Centos-OpenVPN网络隧道实战

测试一下

企业级Centos-OpenVPN网络隧道实战

问题:centos7 遇到内网可以ping通,但是无法telnet,无法打开内网主机网页

1,centos 7 系统,vpn主机上还有docker,上去就关闭了

systemctl stop firewalld  #关闭防火墙,但是系统底层还是支持NAT转发的
service restart docker  #修改防火墙配置需要重启docker
docker start jms_all_new   #重新启动docker容器,自动添加规则
#这时候在重新拨通vpn,发现可以正常访问了

企业级Centos-OpenVPN网络隧道实战
企业级Centos-OpenVPN网络隧道实战
企业级Centos-OpenVPN网络隧道实战

如果你想添加用户,直接从 客户端证书配置开始操作即可。

至此逗哥已带您完成了部署,快去体验下吧。。。。记得点赞。有问题加群

  • QQ精品交流群
  • weinxin
  • 微信公众号
  • weinxin
admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: