ch1 VPN与OpenVPN应用场景分析

什么是VPN VPN ( Virtual Private Network) 虚拟专用网络,是依靠ISP和其他的NSP,在公共网络中建立专用的数据通信网络的技术,可以为企业与企业之间或者个人与企业之间提供安全的数据传输隧道服务。在VPN中任意两点之间的连接并没有传统专网所需的端到端的物理链路,而是利用公共网络资源动态组成的,可以理解为通过私有的隧道技术在公共数据网络上模拟出来的和专网有同样功能的点到点的专线技术,所谓虚拟是指不需要去拉实际的长途物理线路,而是借用了公共Internet网络实现。 vpn直观的形象图: VPN Server/Client <---------------------------------> VPN Server/Client VPN的作用 VPN功能可以帮助公司里的远程用户(出差,家里)、公司的分支机构、商业合作伙伴及供应商等公司和自己的公司内部网络之间建立可信的安全连接或者是局域网连接,确保数据的加密安全传输和业务访问,对至运维工程师来说,还可以连接不同的机房为局域网,处理相关的业务流。我们可以通过一张网络逻辑图来描述VPN的作用。 图:OpenVPN架构 Source:https://www.slideteam.net/vpn-tunnel-architecture-connecting-corporate-and-branch-office.html VPN的分类 我们根据VPN的常见企业应用,将VPN分为以下4类应用 远程访问VPN服务 即通过个人电脑远程拨号到企业办公网络。 一般为企业内部员工出差、休假或特殊情况下在远离办公室的时候,又有需求访问公司的内部网络获取相关资源,就可以通过VPN拨号到公司内部.此时远程拨号的员工和办公室内的员工以及其他拨号的员工之间都相当于一个局域网络内。例如:访问内部的域控制器,文件服务器,OA系统,ERP, HTTP服务,内网聊天工具等局域网服务应用。 对于运维人且就是需要个人电脑远程拨号到企业网站IDC机房,远程维护内网服务器(一般无外网IP)。 此点是技术人员特别是运维人且在工作中会经常用这个方法维护大量的机房内无外网的服务器及网络设备。 企业内部网络之间VPN服务 在公司的分支机构的局域网和公司总部LAN之间的VPN连接。通过公网Internet建立VPN将公司在各地的分支机构的LAN连接到公司总部的LAN。例如:各大超市之间业务结算等。 这是由于地域的原因而产生的VPN的需求,通过VPN让不同地域内的机器可以互相访问,就好像是一个局域网一样。例如:办公室互联协同办公,机房互联数据同步及业务访问等。 互联网公司多IDC机房之间VPN服务 此处是运维架构人员需要考虑的问题。不同机房之间业务管理和业务访问,数据流动。 企业外部VPN服务 在供应商、合作伙伴的LAN和本公司的LAN之间建立的VPN服务。 访问外国网站 翻墙的应用 常贝隧道协议介绍 PPTP 点对点隧道协议(PPTP)是由包括微软和3Com等公司组成的PPTP论坛开发的一种点对点隧道协议,基于拨号使用的PPP协议,使用PAP或CHAP之类的加密算法,或者使用Microsoft的点对点加密算法MPPE。其通过跨越基于TCP/IP的数据网络创建VPN。实现了从远程客户端到专用企业服务器之间数据的安全传输。PPTP支持通过公共网络(例如Internet)建立按需的、多协议的、虚拟专用网络。PPTP允许加密IP通讯,然后在要跨越公司IP网络或公共IP网络(如Internet)发送的IP头中对其进行封装。典型的linux平台的开源软件为pptp。 PPTP属于点对点方式的应用,比较适合远程的企业用户拨号到企业进行办公等的应用。 L2TP L2TP第2层隧道协议(L2TP)是IETF基于L2F (Cisco的第二层转发协议)开发的PPTP的后续版本。是一种工业标准Internet隧道协议,其可以为跨越面向数据包的媒体发送点到点协议(PPP)框架提供封装。PPTP和L2TP都使用PPP协议对数据进行封装,然后添加附加包头用于数据在互联网络上的传输。PPTP只能在两端点间建立单一隧道。L2TP支持在两端点间使用多隧道,用户可以针对不同的服务质量创建不同的隧道。L2TP可以提供隧道验证,而PPTP则不支持隧道验证。但是当L2TP或PPTP 与 IPSEC 共同使用时,可以由IPSEC提供隧道验证,不需要在第2层协议上验证隧道使用L2TP。PPTP要求互联 网络为IP网络。L2TP只要求隧道媒介提供面向数据包的点对点的连接,L2TP可以在IP(使用UDP),帧中继永久虚拟电路(PVCs),X.25虚拟电路(VCs)或ATM VCs网络上使用。 L2TP (Layer 2 Tunneling Protocol) 在计算机网络中,第2层隧道协议(L2TP)是一种隧道协议,用于支持虚拟专用网络(VPN)或作为ISP提供服务的一部分。它本身不提供任何加密或机密性。相反,它依靠它在隧道内传递的加密协议来提供隐私。 由于L2TP协议缺乏固有的机密性,因此通常与IPsec一起实施。这被称为L2TP / IPsec,并在IETF RFC 3193中进行了标准化。 Reference L2TP IPSec IP安全协议(IPSec: IP Security)实际上是一套协议包而不是一个独立的协议。从1995年开始IPSec的研究以来,IETF IPSec工作组在它的主页上发布了几十个Internet草案文献和12个RFC文件。其中,比较重要的有RFC2409 IKE(互连网密钥交换)、RFC2401 IPSec协议、RFC2402 AH验证包头、RFC2406 ESP加密数据等文件。 IPSec隧道模式隧道是封装、路由与解封装的整个过程。隧道将原始数据包隐藏(或封装)在新的数据包内部。该新的数据包可能会有新的寻址与路由信息,从而使其能够通过网络传输。隧道与数据保密性结合使用时,在网络上窃听通讯的人将无法获取原始数据包数据(以及原始的源和目标)。封装的数据包到达目的地后,会删除封装,原始数据包头用于将数据包路由到最终目的地。 隧道本身是封装数据经过的逻辑数据路径,对原始的源和目的端,隧道是不可见的,而只能看到网络路径中的点对点连接。连接双方并不关心隧道起点和终点之间的任何路由器、交换机、代理服务器或其他安全网关。将隧道和数据保密性结合使用时,可用于提供VPN。...

 ·  · 

ch2 从零开始安装OpenVPN

OpenVPN安装环境需求 设备 IP 笔记本或PC (adsl上网) 10.0.0.0/24 办公室(DHCP) OpenVPN Server双网卡 eth0:10.0.0.4/24(外网) eth1:192.168.100.4(内网) IDC机房内部局域网服务器 192.168.100.0/24 IDC机房内网服务器无外网IP,又希望ADSL上网笔记本(运维人员),在不同的网络能够直接访问 实现需求:在远端通过VPN客户端(笔记本)拨号到VPN,然后在笔记本电脑上可以直接访问vpnserver所在局域网内的多个servers,进行维护管理 环境 VPN-Server eth0:10.0.0.4(外网IP)。GW:10.0.0.1, dns:10.0.0.1。 eth1:172.0.0.1(内网IP)。GW:不配 提示:检查是否可以ping通client eth0 IP。 App client Server:ethO:172.0.0.2。GW:路由器。提示:检查是否可以ping通VPN-Server eth1 IP。 OpenVPN 解决方案图解 部署OpenVPN Server Reference download lzo installing-openvpn openvpn offical releases openvpn github 安装前准备 openvpn支持的平台: Linux kernel 2.6+ OpenBSD 5.1+ Mac OS X Darwin 10.5+ FreeBSD 7.4+ Windows (WinXP and higher) 下载地址: openvpn-releases openvpn github 安装openvpn的依赖项: 0.9.8版或更高版本的OpenSSL库,对于加密是必需的 PolarSSL库,是加密的替代版本1.1或更高版本 LZO实时压缩库,连接压缩所需 bash 1 yum install openssl-devel lzo-devel pam-devel -y bash 1 2 3 4 5 6 ....

 ·  · 

ch3 OpenVPN的高可用配置

方案1:在Vpn 客户端使用多个配置文件实现(由用户选择拨号)类 方案1:需求分析与操作过程讲解。 基本说明: 生产场景中比较规范的做法是让所有的VPN SERVER尽可能共享同一套 server,ca证书或者连接同一个认证系统(即使是跨机房)。这样只需要一份客户端认证和文件和多份指定不同vpn client的配置文件即可实现vpn的负载均衡了。 总结结论: 1)该负载均衡方案操作简单,不引入多余服务(后面的方案都会引入服务),因此不会增加多余的单点故障,当用户连接的vpn不能使用时,用户就可以人工选择拨号其他的VPN服务器。 2)如果使用者为公司内部工作人员,此种方案是值得推荐的。老男孩老师推荐。 3)从广义上讲这是在用户端实现的负载均衡方案,类似早期的华军下载站一样,由用户选择下载站点,而不是用什么智能DNS等复杂的业务模式。 缺点:当一个vpnserver不能使用时,不能自动连上别的vpn server。 方案2:通过在客户端配置文件实现负载均衡(客户端文件里随机连接服务器) 提示:同方案1,所有VPN SERVER 需要共享同一套 server,ca证书。openvpn 服务器一套keys的多份拷贝方式式。 text 1 2 3 4 remote 10.0.0.28 52115 remote 10.0.0.552115 remote-random resolv-retry 20 implementing-a-load-balancing-failover-configuration 总结结论: 1)该负载均衡方案操作简单,不引入多余服务(后面的方案都会引入服务),因此不会增加多余的单点故障,,当用户连接的vpn不能使用时,电脑可以重新再次自动拨号连接VPN服务器。 2)如果使用者为公司内部工作人员,此种方案是值得推荐的。-老男孩老师推荐。如果是使用者为外部人员,那么这个方案依然是可以的。 3)本方案是比较标准的在VPN用户端,由客户端配置参数实现的负载均衡的方案,是非常值得推荐的方案。 4)和方案1对比,方案2的配置更简单,仅需一个配置文件多个remote参数,拨号时客户端会随机自动选择拨号,方案1则需要手动选择不同的配置文件拨号。当正在连接的VPN服务端右机时,那么此时方案2不需要人工干预,客户端的VPN会自动判断并且自动重新连接其他的可用vpn服务器。. 方案3:通过域名加DNS轮询的方式实现负载均衡(由DNS自动分配vpn) 总结结论: 1)通过dns轮询实现VPN负载均衡方案操作比较复杂,引入了DNS服务,因此增加了单点故障及维护成本,当用户连接的vpn不能使用时,用户也需要重新人工再次拨号。 2)如果使用者为公司内部工作人员,此种方案是不推荐的。如果是外部的用户可以考虑用这种方式,但是复杂度比方案1大了很多(如果存在DNS服务器加配置还可以)。 3)当机房多,配置文件多时,无需用户选择服务器,只需拨号即可。如果多个VPN在一个机房还好一些,如果多个VPN服务器不在一个机房,还需要通过IPSEC进行连接。 总之,此法很麻烦,中小型公司老男孩老师极不推荐。 4)DNS轮询会遭遇到客户端DNS缓存问题,从而导致服务切换失效。。 one-network-interface-on-a-public-network

 ·  · 

ch4 OpenVPN的统一身份认证方案及实现方法

OpenVPN 2.0与更高版本允许OpenVPN服务器从客户端安全地获取用户名和密码,并将该信息用作认证基础。 方法1:通过本地证书密钥认证。 默认不配置,openvpn即使用证书进行身份认证。 (1)编辑主服务器配置文件/etc/openldap/slapd.conf,取消如下行的注释: 方法2:本地文件认证 在使用身份验证时,需要将 auth-user-pass 指令添加到客户端配置文件中,设置后OpenVPN客户端向用户索要用户名/密码,并将其通过安全的TLS通道传递给服务器进行验证。 服务端配置文件需要增加配置指令 auth-user-pass-verify auth-pam.pl via-file 使用脚本插件。auth-pam.pl 在源码包 sample/sample-script 路径下。 text 1 plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login 生产环境下官方推荐使用 openvpn-auth-pam 插件进行验证,相比于 auth-pam.pl,openvpn-auth-pam 插件具有多个优点: openvpn-auth-pam 使用拆分权限执行模型来提高安全性。 C编译的插件比脚本运行速度更快。 OpenVPN可以通过虚拟内存(而不是通过文件或环境)将用户名/密码传递给插件,这对于服务器上的本地安全性更好。 获取openvpn-auth-pam插件 openvpn-auth-pam插件在openvpn代码目录src/plugins/auth-pam 下,运行 make && make install 进行安装,会自动复制到openvpn安装好的 lib/openvpn/plugins 目录下。 开启密码认证 默认情况下, 在服务器上使用 auth-user-pass-verify 或用户名/密码 插件 将启用双重身份验证,要求客户端证书和用户名/密码身份验证都必须成功,才能对客户端进行身份验证。可以选择关闭客户端证书认证。 text 1 2 client-cert-not-required username-as-common-name # 用户名作为通用名称 开启后需要在客户端注释 cert 和 key的配置 Reference authentication methods 方法3:数据库认证 法2:利用的脚本程序(shell,php等)本地文件去读数据库。 法1:用pam_mysql 方法:4:ldap统一用户认证 openvpn-auth-ldap 利用第一个文件认证的思路,去LDAP查询,还可以和本地文件比较。如 ldap认证原理图 配置openvpn服务端通过ldap进行身份验证 配置OpenVPN基 LDAP的身份验证,需要安装用于LDAP身份验证的OpenVPN插件。openvpn-auth-ldap,它通过LDAP为OpenVPN实现身份认证。...

 ·  ·