2. OpenVPN介绍说明
2.1 openvpn的加密通信原理过程
OpneVPN使用TLS加密是通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为Public key,另一个是Private key)
对数据进行加密的,对于TLS传输的工作原理,这里暂且先不介绍。
对于OpenVPN使用TLS mode
> 首先Server和Client要有相同的CA签发的证书,双方通过交换证书验证双方的合法性以决定是否建立VPN连接
> 然后使用对方CA把自己目前使用的数据加密方法(类似于密钥)加密后发送给对方
由于使用对方CA加密的,所以只有对方CA对应的Private key才能解密该字串,保证了此密钥的安全性,并且此密钥定期改变
对于窃听者来说,可能还没有破解出密钥,通信双方已经更换密钥了
2.2 openvpn的多种身份验证方式
OpenVPN提供了多种身份验证方式,用以确认参与连接双方的身份
包括:预享私钥,第三方证书以及用户名/密码组合等
预享密钥最为简单,但同时它只能用于建立点对点的VPN;
基于PKI的第三方证书提供了最完善的功能,但是需要额外的精力去维护一个PKI证书体系。
OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端预享密钥,但是仍有一份服务器CA证书需要被用作加
密
比较好的验证方式还是LDAP或域控制器统一验证等。
2.3 openvpn通信原理
OpenVPN所有的通信都基于一个单一的IP端口(默认为1194),默认使用UDP协议通讯,同时TCP也被支持。
OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。
OpenVPN服务器具有向客户端"推送"某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。
OpenVPN提供了两种虚拟网络接口:
通过Tun/Tap驱动,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网数据。
传送的数据可通过LZO算法压缩。OpenVPN2.0以后版本每个进程可以同时管理数个并发的隧道
OpenVPN使用通用网络协议(TCP与UDP)的特点使它成为IPsec等协议的理想替代,尤其是在ISP(Internet service provider)
过滤某些特定VPN协议的情况下。
在选择协议时候,需要主要2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下
请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。建议用TCP
OpenVPN的技术核心是虚拟网卡,其次是SSL协议实现;虚拟网卡及其在OpenVPN中的工作机理进行介绍
虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出一个网卡,可以像其它网卡一样进行配置。
服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,
如果服务程序写合适的数据到虚拟网卡,应用软件也可以接受得到。
虚拟网卡在很多的操作系统下都有相应的实现,这也是OpenVPN能够跨平台一个很重要的理由。
在OpenVPN中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由器机
制
将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发送
出
去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单
向
传输的过程,反之亦然
OpenVPN使用OpenSSL库加密数据与控制信息:它使用了OpenSSL的加密以及验证功能,意味着,它能够使用任何OpenSSL支持
的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能
1. openvpn驱动部分实现了网卡处理和字符设备。网卡处理网络数据,字符设备完成与应用层的数据交互。
2. 使用openvpn必须修改路由表
工作过程-发送数据
1. 应用程序发送网络数据
2. 网路数据根据修改后的路由表把数据路由到虚拟网卡
3. 虚拟网卡把数据放到数据队列中
4. 字符设备从数据队列中取数据,然后送给应用层
5. 应用层把数据转发给物理网卡
6. 物理网卡发送数据
工作过程-接收过程
1. 物理网卡接受到数据,并传到应用空间
2. 应用守护程序通过字符设备,把数据传给驱动网卡
3. 数据通过虚拟网卡重新进入网络堆栈
4. 网络堆栈把数据传给上层真实的应用程序
2.4 openvpn生产环境常用场景
①. 远程拨号访问企业网络或IDC机房
即通过个人电脑远程拨号到企业办公网络
一般为企业内部员工出差、休假或特殊情况下在远离办公室的时候,又有需求访问公司的内部网络获取相关资源
就可以通过VPN拨号到公司内部。此时远程拨号的员工和办公室内的员工以及其他拨号的员工之间都相当于一个局域网内
例如:访问内部的域控制器,文件服务器,OA系统,ERP,HTTP服务,内网飞秋聊天工具等局域网服务应用
对于运维人员就是需要个人电脑远程拨号到企业网站IDC机房,远程维护服务器(无外网IP、如:数据库、存储服务器等)
此点是技术人员特别是运维人员在工作中会经常用这个方法维护大量的机房内无外网IP的服务器及网络设备
运维就业班架构图:牤牛阵法
②. 企业异地内部网络通过VPN连接成局域网
在公司的分支机构的局域网和公司总部LAN之间的VPN连接。
通过公网Internet建立VPN将公司在各地的分支机构的LAN连接到公司总部的LAN
例如:各大超市之间业务结算等
这是由于地域的原因而产生的VPN需求,通过VPN让不同的地域内的机器可以互相访问,就好像是一个局域网一样
例如:办公室互联协同办公,机房互联数据同步及业务访问等
③. 互联网公司多IDC机房之间通过VPN连接交换数据
此处是运维架构人员需要考虑的问题。不同机房之间业务管理和业务访问,数据流动
④. 企业外部VPN服务
在供应商、合作伙伴的LAN和本公司的LAN之间建立的VPN服务
从技术上讲,2 3 4的实现是一样的。
2.5 企业生产场景常用VPN工作结构图
①. 企业VPN远程拨号访问场景逻辑图(需要重点记忆★★★★★)
a 将vpn server的地址作为网关,或配置一个网段路由指向到客户端地址通过vpn server路由到达
b 在vpn server上面设置NAT映射,凡是源地址是VPN客户端获取的地址,都经过NAT映射为一个vpn server的内网地址
②. 企业或IDC机房网络互联场景逻辑路
3. OpenVPN实战部署--服务端部署
3.1 openvpn生产环境需求
环境说明:
vpnserver: eth0: 10.0.0.28(外网IP) GW: 10.0.0.254, dns 8.8.8.8 eth1: 172.16.1.28 (内网IP) GW: N/A 提示:检查是否可以ping通client eth0 ip app client Server: eth0: 172.16.1.X GW: 路由器 提示:检查是否可以ping 通vpnserver eth1 ip
逻辑拓扑图:
3.2 openvpn生产环境实际部署步骤
①. 系系统统环环境境信信息息确确认
[root@openvpn-server-01 ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@openvpn-server-01 ~]# uname -r 2.6.32-504.el6.x86_64 [root@openvpn-server-01 ~]# uname -m x86_64
配置了性能工具
②. 配置vpn服服务务器器时时间间同同步步
[root@openvpn-server-01 ~]# /usr/sbin/ntpdate pool.ntp.org 6 Jul 09:52:59 ntpdate[1121]: adjust time server 202.112.29.82 offset 0.001589 sec [root@openvpn-server-01 ~]# cat /var/spool/cron/root #crond-id-001:time sync by hq */5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
说明:在服务端和客户端均配置好时间同步,并设置好定时任务
提示:此步很重要,如果VPN服务器和拨号的计算机客户端不一致,可能会导致VPN连接失败
③. 建立openvpn软软件件存存放放目目录录
[root@openvpn-server-01 ~]# mkdir /server/tools/ -p^C [root@openvpn-server-01 ~]# cd /server/tools/ # 进行软件的上传,上传完毕后进行检查,是否安装成功
④. openvpn相相关关软软件件安安装装
1 # openvpn涉及到lzo压缩软件安装 2 # tar zxf lzo-2.06.tar.gz 3 # cd lzo-2.06 4 # ./configure 5 # make 6 # make install 7 # openvpn软件安装(opnevpn会依赖openssl软件,如果没有安装编译的时候会报错) 8 # yum install openssl* -y 9 # rpm -aq openssl <- 确认openssl软件已经安装 10 openssl-1.0.1e-30.el6.x86_64 11 # rpm -qa openssl* 12 openssl-devel-1.0.1e-48.el6_8.1.x86_64 <- 两个重要的软件包已经存在 13 openssl-1.0.1e-48.el6_8.1.x86_64 14 openssl-static-1.0.1e-48.el6_8.1.x86_64 15 openssl098e-0.9.8e-20.el6.centos.1.x86_64 16 openssl-perl-1.0.1e-48.el6_8.1.x86_64 17 # tar zxf openvpn-2.2.2.tar.gz 18 # cd openvpn-2.2.2 19 # ./configure --with-lzo-headers=/usr/local/include/ --with-lzo-lib=/usr/local/lib 20 说明:如果openssl没有正确安装,就会出现报错信息 configure: error: OpenSSL Crypto headers not found. 21 make 22 make install 23 # which openvpn <- 如果有openvpn命令存在了,即表示openvpn安装完成 24 /usr/local/sbin/openvpn