一、OpenVPN介绍
OpenVPN是一个开源应用程序,可以通过公共Internet创建一个专用网络。在我们开始之前,我们首先需要安装Enterprise Linux(EPEL)存储库的额外包。下面就是关于如何在CentOS 7上设置Client和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下
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客户端
测试一下
问题:centos7 遇到内网可以ping通,但是无法telnet,无法打开内网主机网页
1,centos 7 系统,vpn主机上还有docker,上去就关闭了
systemctl stop firewalld #关闭防火墙,但是系统底层还是支持NAT转发的
service restart docker #修改防火墙配置需要重启docker
docker start jms_all_new #重新启动docker容器,自动添加规则
#这时候在重新拨通vpn,发现可以正常访问了
如果你想添加用户,直接从 客户端证书配置
开始操作即可。
至此逗哥已带您完成了部署,快去体验下吧。。。。记得点赞。有问题加群
- QQ精品交流群
-
- 微信公众号
-