本文发布于Cylon的收藏册,转载请著名原文链接~


什么是VPN

VPN ( Virtual Private Network) 虚拟专用网络,是依靠ISP和其他的NSP,在公共网络中建立专用的数据通信网络的技术,可以为企业与企业之间或者个人与企业之间提供安全的数据传输隧道服务。在VPN中任意两点之间的连接并没有传统专网所需的端到端的物理链路,而是利用公共网络资源动态组成的,可以理解为通过私有的隧道技术在公共数据网络上模拟出来的和专网有同样功能的点到点的专线技术,所谓虚拟是指不需要去拉实际的长途物理线路,而是借用了公共Internet网络实现。

vpn直观的形象图:

VPN Server/Client <---------------------------------> VPN Server/Client

VPN的作用

VPN功能可以帮助公司里的远程用户(出差,家里)、公司的分支机构、商业合作伙伴及供应商等公司和自己的公司内部网络之间建立可信的安全连接或者是局域网连接,确保数据的加密安全传输和业务访问,对至运维工程师来说,还可以连接不同的机房为局域网,处理相关的业务流。我们可以通过一张网络逻辑图来描述VPN的作用。

image-20221024220841869

图:OpenVPN架构
Source:https://www.slideteam.net/vpn-tunnel-architecture-connecting-corporate-and-branch-office.html

VPN的分类

我们根据VPN的常见企业应用,将VPN分为以下4类应用

远程访问VPN服务

即通过个人电脑远程拨号到企业办公网络。

一般为企业内部员工出差、休假或特殊情况下在远离办公室的时候,又有需求访问公司的内部网络获取相关资源,就可以通过VPN拨号到公司内部.此时远程拨号的员工和办公室内的员工以及其他拨号的员工之间都相当于一个局域网络内。例如:访问内部的域控制器,文件服务器,OA系统,ERP, HTTP服务,内网聊天工具等局域网服务应用。

image-20221024221026965

对于运维人且就是需要个人电脑远程拨号到企业网站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属于点对点方式的应用,比较适合远程的企业用户拨号到企业进行办公等的应用。

image-20221024221026965

L2TP

L2TP第2层隧道协议(L2TP)是IETF基于L2F (Cisco的第二层转发协议)开发的PPTP的后续版本。是一种工业标准Internet隧道协议,其可以为跨越面向数据包的媒体发送点到点协议(PPP)框架提供封装。PPTPL2TP都使用PPP协议对数据进行封装,然后添加附加包头用于数据在互联网络上的传输。PPTP只能在两端点间建立单一隧道。L2TP支持在两端点间使用多隧道,用户可以针对不同的服务质量创建不同的隧道。L2TP可以提供隧道验证,而PPTP则不支持隧道验证。但是当L2TP或PPTP 与 IPSEC 共同使用时,可以由IPSEC提供隧道验证,不需要在第2层协议上验证隧道使用L2TP。PPTP要求互联 网络为IP网络。L2TP只要求隧道媒介提供面向数据包的点对点的连接,L2TP可以在IP(使用UDP),帧中继永久虚拟电路(PVCs),X.25虚拟电路(VCs)或ATM VCs网络上使用。

image-20221024221229433

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隧道模式隧道是封装、路由与解封装的整个过程。隧道将原始数据包隐藏(或封装)在新的数据包内部。该新的数据包可能会有新的寻址与路由信息,从而使其能够通过网络传输。隧道与数据保密性结合使用时,在网络上窃听通讯的人将无法获取原始数据包数据(以及原始的源和目标)。封装的数据包到达目的地后,会删除封装,原始数据包头用于将数据包路由到最终目的地。

image-20221024221242118

隧道本身是封装数据经过的逻辑数据路径,对原始的源和目的端,隧道是不可见的,而只能看到网络路径中的点对点连接。连接双方并不关心隧道起点和终点之间的任何路由器、交换机、代理服务器或其他安全网关。将隧道和数据保密性结合使用时,可用于提供VPN。

封装的数据包在网络中的隧道内部传输。在此示例中,该网络是Internet。网关可以是外部Internet与专用网络间的周界网关。周界网关可以是路由器、防火墙、代理服务器或其他安全网关。另外,在专用网络内部可使用两个网关来保护网络中不信任的通讯。,

当以隧道模式使用IPSec时,其只为IP通讯提供封装。使用IPSec隧道模式主要是为了与其他不支持IPSec上的L2TP或PPTP VPN隧道技术的路由器、网关或终端系统之间的相互操作。

SSL VPN

SSL VPN,SSL协议提供了数据私密性、端点验证、信息完整性等特性。SSL协议由许多子协议组成,其中两个主要子协议是握手协议和记录协议。握手协议允许服务器和客户端在应用协议传输第一个数据字节以前,彼此确认,协商一种加密算法和密码钥匙。在数据传输期间,记录协议利用握手协议生成的密钥加密和解密后来交换的数据。

SSL独立于应用,因此任何一个应用程序都可以享受它的安全性而不必理会执行细节。SSL置身于网络结构体系的传输层和应用层之间。此外,SSL本身就被几乎所有的Web浏览器支持。这意味着客户端不需要为了支持SSL连接安装额外的软件。这两个特征就是SSL能应用于VPN的关键点。

image-20221024221254674

典型的SSL VPN应用如OpenVPN,是一个比较好的开源软件。9penVPN允许参与建立VPN的单点使用预设的私组,第三方证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库,以及SSLv3/TLSv1协议。OpenVPN能在Linux, xBSD, Mac OSX与Windows上运行。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容(唯一不如PPTP VPN的缺点)。OpenVPN是基于C/S架构的软件,需要单独安装OpenVPN客户端(不如PPTP VPN之处)。

虚拟专用网技术- 掘金

图:VPN信息处理过程
Source:https://juejin.cn/post/7061094724047732767

实现vpn功能的常见开源产品

PPTP VPN

使用PPTP VPN的最大优势在于,无需在windows客户端单独安装VPN客户端软件,windows默认就支持PPTP VPN拨号连接功能。另外,PPTP VPN属于点对点方式的应用,比较适合远程的企业用户拨号到企业进行办公等的应用,很多小区及网络设备不支持PPTP导致无法访问。

SSL VPN(OpenVPN)

PPTP主要为那些经常外出移动或家庭办公的用户考虑,而OpenVPN不但使用于PPTP的应用场景,还适合针对企业异地两地总分公司之间的VPN不间断按需连接,例如:ERP,OA,及时通讯工具等在企业中的应用。缺点:需要单独安装客户端软件。

典型的开源软件:OpenVPN

IPSEC VPN

IPSEC VPN也适合针对企业异地两地总分公司或多个IDC机房之间的VPN不间断按需连接,并且在部署使用上更简单方便。

典型的开源软件:openswan

根据企业生产场景需求选择vpn方案建议

  1. 如果领导愿意花钱,可以选择相关硬件产品,不错的成熟的很多,例如:防火墙、负载均衡等硬件产品都附带VPN功能。
  2. 对于多数互联网公司,为了体现我们运维构顶的价值,我们应该建议老板选择开源产品,优势就是省钱,可扩展性更强,例如:二次开发,相应功能的改动。
  3. 对于开源的产品,建议:
    • 个人拨号选择 OpenVPN,功能强大、稳定可靠。
    • 如果不希望单独安装客户端拨号,则可选择PPTP。尽量打消使用PPTP VPN的想法。
    • 多个企业之间或者多个IDC机房直接互联,选择 IPSecVPN (openswan)或 OpenVPN

OpenVPN开源产品介绍

在众多VPN的产品中,OpenVPN无疑是Linux下开源VPN的先锋,它提供了良好的访问性能和友好的用户GUI。

OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,最早由James Yonan编写。OpenVPN允许参与建立VPN的单点使用预设的私钥第三方证书,或者用户名/密码来进行身份验证.它大量使用了OpenSSL加密库,以及SSLv3/TLSv1协议。OpenVPN能在Linux、xBSD、MacOS X与Windows上运行。OpenVPN是一个服务器和客户端软件,而不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。

OpenVPN依赖的SSL与TLS协议介绍

SSL即,安全套接层(Secure Sockets Layer, SSL)是一种安全协议,诞生的目的是为网络通信提供安全及数据完整性保障,SSL在传输层中对网络通信进行加密。

SSL采用公开密钥技术,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。它在服务器和客户机两端可同时被支持,目前已成为互联网上保密通讯的工业标准。现行的Web浏览器亦普遍将HTTP和SSL相结合,从而实现安全通信。SSL协议其继任者是TLS。

后来 IETF 将SSL作了标准化,即RFC2246,并将其称为TLS (Transport Layer Security),其最新版本是RFC 5246,版本1.2。从技术上讲,TLS1.0与SSL3.0的差异非常微小。

TLS(Transport Layer Security)

TLS利用密钥算法在互联网上提供端点身份认证与通讯保密,其基础是公组基础设施(public key infrastructure, PKI)。不过在实现的典型例子中,只有网络服务者被可靠身份验证,而其客户端则不一定。这是因为公钥基础设施普遍商业运营,电子签名证书通常需要付费购买。协议的设计在某种程度上能够使主从架构应用程序通讯本身预防窃听、干扰(Tampering)和消息伪造。

OpenVPN的加密通信原理过程

OpenVPN使用TLS加密是通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为Public key,另一个是Private key)对数据进行加密的,对于TLS传输的工作原理,这里暂且先不介绍。对于OpenVPN使用TLS mode,首先Server和Client要有相同CA签发的证书,双方通过交换证书验证双方的合法性以决定是否建立VPN连接,然后使用对方CA把自己目前使用的数据加密方法(类似于密钥)加密后发送给对方,由于使用对方CA加密的,所以只有对方CA对应的Private key才能解密该字串,保证了此密钥的安全性,并且此密钥定期改变,对于窃听者来说,可能还没有破解出密钥,通信双方己经更换密钥了。

OpenVPN的多种身份验证方式

OpenVPN提供了多种身份验证方式,用以确认参与连接双方的身份,包括:预享私钥,第三方证书以及用户名/密码组合等。预享私钥最为简单,但同时它只能用于建立点对点的VPN;基于PKI的第三方证书提供了最完善的功能,但是需要额外的精力去维护一个PKI证书体系。OpenVPN 2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端预享密钥,但是仍有一份服务器CA证书需要被用作加密,比较好的验证方式还有LDAP或域控制器统一验证等。

OpenVPN通信原理

OpenVPN所有的通信都基于一个单一的IP端口(默认为1194),默认使用UDP协议通讯,同时TCP(推荐)也被支持。OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。OpenVPN服务端具有向客户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。OpenVPN提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数据可通过LZO算法压缩。OenVPN2.0以后版本每个进程可以同时管理数个并发的隧道。

OpenVPN使用通用网络协议(TCP与UDP)的特点使它成为IPsec等协议的理想替代,尤其是在ISP (Internet service provider)过滤某些特定VPN协议的情况下。

在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。这里建议用TCP协议方式。

参考:

http://www.baike.com/wiki/OpenVPN

http://zh.wikipedia.org/zh-cn/OpenVPN

OpenVPN的技术核心是虚拟网卡,其次是SSL协议实现,SSL协议前面已阐述过,这里重点对虚拟网卡及其在OpenVPN的中的工作机理进行介绍。

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

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

OpenVPN使用OpenSSL库加密数据与控制信息:它使用了OpesSSL的加密以及验证功能意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。

  1. OpenVPN驱动部分实现了网卡处理和字符设备。网卡处理网络数据,字符设备完成与应用层的数据交互。
  2. 使用OpenVPN必须修改路由表

工作过程,发送数据

  1. 应用程序发送网络数据。
  2. 网络数据根据修改后的路由表把数据路由到虚拟网卡。
  3. 虚拟网卡把数据放到数据队列中。
  4. 字符设备从数据队列中取数据,然后送给应用层。
  5. 应用层把数据转发给物理网卡。
  6. 物理网卡发送数据。

接收过程

  1. 物理网卡接受到数据,并传到应用空间。
  2. 应用守护程序通过字符设备,把数据传给驱动网卡。
  3. 数据通过虚拟网卡重新进入网络堆栈。
  4. 网络堆栈把数据传给上层真实的应用程序。

OpenVPN生产环境常用场景

远程拨号访问企业网络或IDC机房

即通过个人电脑远程拨号到企业办公网络。一般为企业内部员工出差、休假或特殊情况下在远离办公室的时候,又有需求访问公司的内部网络获取相关资源,就可以通过VPN拨号到公司内部。此时远程拨号的员工和办公室内的员工4及其他拨号的员工之间都相当于一个局域网络内。例如:访问内部的域控制器,文件服务器,OA系统,HTTP服务,内网飞秋聊天工具等局域网服务应用。

对于运维人就是需要个人电脑远程拨号到企业网站IDC机房,远程维护服务器。此点是技术人员特别是运维人员在工作中会经常用这个方法维护大量的机房内无外网IP的服务器及网络设备。

image-20221024221821155

client-LAN类型数据库

企业异地内部网络通过VPN连接成局域网

在公司的分支机构的局域网和公司总部LAN之间的VPN连接。通过公网Internet建立VPN将公司在各地的分支机构的LAN连接到公司总部的LAN。例如:各大超市之间业务结算等。

这是由于地域的原因而产生的VPN的需求,通过VPN让不同地域内的机器可以互相访问,就好像是一个局域网一样。例如:办公室互联协同办公,机房互联数据同步及业务访问等。

image-20221024221840103

LAN-LAN类型示意图

互联网公司多IDC机房之间通过VPN连接交换数据

此处是j臼维架构人员需要考虑的问题。不同机房之间业务管理和业务访问,数据流动。

企业外部VPN服务

在供应商、合作伙伴的LAN和本公司的LAN之间建立的VPN服务。从技术上讲2,3,4的实现是一样的。

路由方式和NAT方式企业实际应用区别和异同小结。

NAT方式适合subnet machine 的网关不是VPNSERVER的场景。

static routing适用于每个subnet machine都要配置对应的路由路由

在企业应用场景中,多数情况下,内部服务器的网关不是VPNSERVER。此时NAT更简便,路由方式更复杂。

企业中OpenVPN服务维护的常见问题

  • 如何增加多个vpn client证书文件

    • 方法1:为每一个客户建立一个证书。
  • OpenVPN 客户端单多个证书的撤销。

    • 如果某个同事离职,那么需要取消其VPN的拨入权限,可以通过在服务器端吊销该客户端证书来实现。官方给出的3个吊销证书的可能情况:revoking-certificates

本文发布于Cylon的收藏册,转载请著名原文链接~

链接:https://www.oomkill.com/2019/11/ch1-introduction/

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。