标题 简介 类型 公开时间
关联规则 关联知识 关联工具 关联文档 关联抓包
参考1(官网)
参考2
参考3
详情
[SAFE-ID: JIWO-2024-2215]   作者: 如一 发表于: [2018-12-12]

本文共 [387] 位读者顶过

目前VPN主要采用以下四项技术来保证通信安全:隧道技术(Tunneling)、加/解密技术(Encryption & Decryption)、密钥管理技术(Key Management)、使用者与设备身份认证技术(Authentication)。

[出自:jiwo.org]

一、VPN隧道技术综述


“隧道”可以看成是从源端到目的端(统称“隧道端点”)通过公共网络的线路上专门建立的一条虚拟、专用通道,但通道所采用的线路仍是公共网络中实际的线路。

不同VPN方案的VPN隧道起始、终结端点有所不同,有的隧道端点就是两端的用户主机,而有些隧道端点是两端网络的交换机、路由器、防火墙或应用层网关等设备。


VPN隧道是在公共网络的物理通信线路上建立的,所以它的构建需要相应的技术来建立。当然,不同的VPN方案所采用的隧道技术不一样。


目前主要有两类隧道协议:一种是二层隧道协议,主要应用于构建远程访问虚拟专网(Access VPN,即VPDN),如PPTP VPN中采用的PPTP协议,L2TP VPN中采用的L2TP协议都属于二层隧道技术。


另一种是三层隧道协议,主要应用于构建企业内部虚拟专网(即Intranet VPN)和扩展的企业内部虚拟专网(即Extranet VPN),如IPSec VPN中采用的IPSec协议,GRE VPN 中采用的 GRE 协议,DSVPN 中采用的 m GRE(multipoint Generic Routing Encapsulation,多点通用路由封装)协议,以及MPLS L3VPN中采用的MPLS L3VPN协议。


以上这些隧道技术都可看成各种通过使用Internet的基础设施在网络之间私密传递数据的方式。使用隧道传递的数据(或负载)可以是与物理线路上运行的不同协议的数据帧或数据包(如通过VPN隧道可以在IP网络中传输ATM、FR数据帧,或IPX、Apple Talk数据包),隧道协议将这些其他协议的数据帧或数据包通过加装隧道协议头重新封装后发送。


隧道协议的头部提供了路由信息,从而使封装的负载数据能够通过IP网络传递。隧道协议头与其原始协议数据包一起传输,在到达目的地后原始协议数据包就会与隧道协议头分离,对目的地有用的原始协议数据包就继续传输到目的地址,而仅起到了一个标识信息的隧道协议头将被丢弃,这样它也就完成了它整个数据包传送使命。


二、PPTP协议


PPTP最初是由包括微软和当时的3Com等公司组成的PPTP论坛开发的一种点对点二层隧道协,用于Windows系统构建PPTP VPN隧道,后来IETF以RFC 2637正式发布,成为国际上通用的一种协议标准,可以构建端到端,或者站点到站点的VPN远程连接

PPTP定义的呼叫控制和管理协议,允许服务器能够控制来自PSTN或ISDN电路交换拨号的拨入访问,或者发起带外的电路交换连接。PPTP协议是将PPP数据帧通过使用增强的GRE机制封装进IP数据包中,通过IP网络(如Internet或其他企业专用Intranet等)发送。


PPTP协议允许PPP协议将原有的NAS(Network Access Server,网络访问服务器)功能独立出来,采用C/S(客户端/服务器)架构。PPTP服务器即PNS(PPTP Network Server,PPTP网络服务器),PPTP客户端即PAC(PPTP Access Concentrator,接入集中器)。


目前除了Windows系统主机可以发起PPTP VPN通信外,有些品版硬件设备,如TP-Link的一些路由器产品也可以发起PPTP VPN通信,PAC可以是一台用户主机,也可以是路由器,但基本上所有品牌设备均支持PPTP数据包的透明传输功能。


PPTP协议通信需要建立两个PPTP连接。一是通过TCP协议进行的,在每个PAC-PNS对之间建立的控制连接,控制连接用来管理协商通信过程中的参数和进行数据连接的维护;二是在同一个PAC-PNS对之间建立的隧道连接(也称“数据连接”),用于在PAC-PNS对之间的用户会话传输由GRE封装的PPP数据帧。

1、控制连接简介


在PAC和PNS间建立PPTP隧道之前,必须先在它们之间建立好控制连接。控制连接是一个标准的TCP会话,用于PPTP呼叫控制和管理信息通过。控制连接会话与PPTP隧道建立会话既关联,又相互独立。控制连接负责建立、管理和释放通过隧道进行的会话,是向PNS通知关联的PAC拨入呼叫,也用于指导PAC向外进行呼叫。


控制连接的建立可以由PNS或者PAC发起,PNS端所使用的端口是TCP 1723。控制连接建立在TCP连接基础之上,PNS和PAC建立控制连接是通过交互Start-Control-Connection-Request和Start-Control-Connection-Reply消息完成的。一旦控制连接建立完成,PAC或者PNS可以对外发送呼叫请求,或者对拨入的呼叫请求进行响应,特定的会话可以由PAC或者PNS通过控制连接消息进行释放。


控制连接是由它自己的保持激活回显(keep-alive echo)消息进行维护的,这样确保了PNS和PAC之间的连通性故障可以及时得到检测。其他故障可以通过控制连接发送的广域网错误通知(Wan-Error-Notify)消息进行报告。


2、隧道连接简介


PPTP 需要为每个 PNS-PAC 对的通信建立专用的隧道。隧道是用于承载指定PNS-PAC对中所有用户会话过程中由增强型GRE协议封装的PPP数据包。在GRE报头中有两个密钥(Key)字段,指示了一个PPP数据包所属的会话,“Key”字段中的值是由控制连接上的呼叫建立流程进行赋值的。特定的PNS-PAC对间使用单一隧道对PPP数据包进行多路复用和解复用。


在PPTP协议中使用的增强型GRE头与普通的GRE协议有所增强。主要的区别是增加了一个新的“确认号”(Acknowledgment Number)字段的定义,用来确定一个或一组特定的GRE数据包是否已到达隧道远端,但此确认功能不用于任何用户数据包的重传。

C(Bit 0):1位,当前是否存在“Checksum”(校验和)字段,此处置0,表示无该字段。


R(Bit 1):1位,当前是否存在“Routing”字段,此处置0,表示无该字段。


K(Bit 2):1位,当前Key,此处置1,表示有“Key”字段。


S(Bit 3):3位,当前序列号,如果存在负载则置1,如果没有负载(GRE数据包仅用于确认),则置0。


s(Bit 4):4位,当前限制路由源功能,此处置0,表示无路由源限制。


Recur (Bits 5-7):3位,递归控制,用来表示GRE报文被封装的层数。完成一次GRE封装后将该字段加1。如果封装层数大于3,则丢弃该报文。该字段的作用是防止报文被无限次的封装。此处必须置0,表示数据包在此之前没有经过GRE协议封装。


A(Bit 8):1位:确认号。如果GRE数据包中包含用于确认传输数据的确认号,则置1,否则置0。


Flags(Bits 9-12) :4位,此处全部置0,没有赋予特定的含义,相当于保留字段。


Ver(Bits 13-15) :3位,此处置1,代表是增强型的GRE协议的版本号。


Protocol Type:16位,为固定值0x880B,对应增强型GRE协议类型。


Key Payload Length:Key的高2个字节,指示负载大小,不包括GRE头。


Key Call ID:Key的低2个字节,包含在传输此数据包的会话中对端的Call ID。


Sequence Number:32位,负载的序列号,仅当S字段置1时有效,是数据包的序列号。会话启动时,每个用户会话的序列号设置为零。包含载荷(S字段置1)的每一个数据包都将被分配该会话中下一个连续的序列号。


Acknowledgment Number:32位,确认号,包含在当前用户会话中接收来自发送端的GRE数据包序列号中的最大数字。仅当A字段置1时有效。


GRE头中的“确认号”和“序列号”字段用于执行隧道上发生的一些冲突控制级别和错误检测。同样,控制连接被用来确定用于调节通过隧道的特定会话的PPP数据包流的速率和缓冲参数。PPTP不对冲突控制和流量指定特定的算法。


3、PPTP协议的消息分类及基本格式


PPTP定义了一套用于在PNS和PAC之间控制连接上作为TCP数据发送的消息。发起控制连接所需的TCP会话的建立时所用的目的端口是TCP 1723,源端口是1024或更大的一个当前未使用的任意TCP端口。


每个PPTP控制连接消息以一个8字节的固定表头部分开始。固定头包括:消息总长(Length)、PPTP消息类型(Type)和“Magic Cookie”三个字段。“Magic Cookie”字段是一个固定的值,总是等于0x1A2B3C4D。它的基本用途是允许接收者确保它与TCP数据流正确地进行同步,但它不能用于在发生不适当格式消息的传输事件时与TCP数据流重同步。不同步时,将会关闭在该TCP会话上建立的控制连接。


PPTP有两种控制连接消息:控制消息和管理消息,但管理消息目前未定义。

三、L2TP协议


L2TP(Layer 2 Tunneling Protocol,二层隧道协议)也是VPDN隧道协议的一种,与PPTP协议一样也是PPP(Point-to-Point Protocol,点对点协议)的扩展应用,可用于远程拨号用户接入企业总部网络,也可用于分支机构与企业总部网络的互联。


1、L2TP协议简介


L2TP协议提供了一种跨越原始数据网络(如IP网络)构建二层隧道的机制。L2TP协议最初是在RFC 2661定义的,最新的V3版本是在RFC3931中定义。它集合了PPTP和L2F两种协议的优点,目前已被广泛接受,主要应用在单个或少数远程终端通过公共网络接入企业内联网的需要。


L2TP协议包含两类消息:控制消息和数据消息。控制消息用于建立、维护和清除控制连接和会话。这些信息利用L2TP可靠的控制信道以保证交付。数据信息是通过L2TP会话进行二层封装传输的。但不同于控制信息,当发生数据包丢失时,数据信息不能重发。


L2TP控制消息头为L2TP会话的建立、维护和拆除提供了可靠消息传输信息。默认情况下,控制消息是携带在数据消息之内传输的

T:1位,必须置1,表示此消息是控制消息。


L和S字段:各占1位,必须置1,指示存在“Length”和“Sequence Number”字段。


各x:各占1位,保留位,必须全部置0,用于协议的未来扩展。


Ver:3位,指示控制消息所用的L2TP协议版,对于L2TPv3版本来说,此字段值为3。


Length:16位,以字节为单位标识整个控制消息长度,包括控制消息头。


Control Connection ID:32位,标识控制连接ID号。不同控制连接的ID号必须唯一,但对于同一控制连接会话中发送的请求消息和应答消息的控制连接ID号必须一样。


Ns:16位,标识当前控制消息的序列号,从0开始,每次增加1。


Nr:16位,标识下一个希望接收的一个控制消息的序列号,是上次接收到的控制消息中Ns字段值加1。


L2TP 数据消息包括一个会话头(Session Header)、一个可选的二层描述子层(L2-Specific Sublayer)和隧道负载(Tunnel Payload)。L2TP会话头对于通过L2TP通信中被封装的PSN(包交换网络,如IP、MPLS、FR等)来说是特定的,必须提供区分多个L2TP数据会话之间通信的方法和区分控制消息和数据信息的方法。每种PSN的封装必须定义自己的会话头,清楚地标识会话头格式和要设置的会话参数。


二层描述子层是位于L2TP会话头和隧道帧开始处之间,包含用于帮助每个帧穿越隧道的一些控制字段(如“序列号”或“标志”字段)。“隧道负载”也就是要真正传输的PPP数据帧。

2、L2TP的主要特性


与PPTP协议一样,L2TP协议也是对PPP数据帧进行封装,在公共网络上建立虚拟链路传输企业的私有数据,节省了租用物理专线的高额费用。同时将企业从复杂和专业的网络维护中解放出来,只需要维护私有网络和远程接入的用户,降低了用户维护成本。


L2TP还具有如下特点,可以为企业提供方便、安全和可靠的远程用户接入服务。


(1)灵活的身份认证机制以及高度的安全性


L2TP可使用PPP提供的安全特性(如PAP、CHAP),对接入用户进行身份认证。


L2TP定义了控制消息的加密传输方式,支持L2TP隧道的验证。


L2TP对传输的数据不加密,但可以和Internet协议安全协议IPSec结合应用(部署L2TP Over IPSec),为数据传输提供高度的安全保证。


(2)多协议传输


因为L2TP协议传输的是PPP协议数据,而PPP协议可以传输多种协议报文,所以L2TP可以在IP网络、以太网、帧中继永久虚拟电路(PVC)、X.25虚拟电路(VC)或ATM VC网络上使用。


(3)支持RADIUS服务器的验证


L2TP协议对接入用户不仅支持本地验证,还支持将拨号接入的用户名和密码发往RADIUS服务器进行验证,为企业管理接入用户提供了更多的选择。


(4)支持私网IP地址分配


应用L2TP的企业总部网关可以为远程用户动态分配私网IP地址,使远程访问用户可以访问到企业总部网络内部资源。


(5)可靠性


L2TP协议支持备份LNS,即当一个主LNS不可达之后,LAC可以与备份LNS建立连接,增强了VPN服务的可靠性。


四、MPLS协议


MPLS VPN的应用分为二层VPN(L2VPN)和三层VPN(L3VPN)两大类。MPLS L2VPN的种类有很多,如各种方式的VLL、PWE3和VPLS,负责二层网络(包括二层以太网、FR、ATM、HDLC网络等)的远程互连,MPLS L3VPN目前主要有BGP/MPLS IP VPN,负责三层IP网络的远程互连。


1、MPLS的产生背景


在20世纪90年代中期,随着IP技术的快速发展,Internet数据海量增长。但由于硬件技术存在限制,基于最长匹配原则的IP路由技术必须使用软件查找路由,转发性能低下,因此IP路由转发性能成为当时限制网络发展的瓶颈。


为了适应网络的发展,ATM技术应运而生。ATM采用定长标签(即VPI/VCI),并且只需要维护比IP路由表规模小得多的标签表(MPLS标签分入标签和出标签两种, MPLS报文转发时是根据出标签进行的),能够提供比IP路由方式高得多的转发性能。然而,ATM协议相对复杂,且ATM网络部署成本高,这使得ATM技术很难普及。如何结合IP与ATM的优点成为当时热门话题。多协议标签交换技术MPLS就是在这种背景下产生的。


MPLS最初是为了提高路由器的转发速度而提出的。与传统IP路由方式相比,它在数据转发时,只在网络边缘分析IP报头,而不用在每一跳都分析IP报头,节约了中间设备的处理时间。但随着专用集成电路ASIC(Application Specific Integrated Circuit,专用集成电路)技术的发展,路由查找速度已经不是阻碍网络发展的瓶颈,这使得MPLS在提高转发速度方面不再具备明显的优势。但是MPLS支持多层标签和转发平面面向连接的特性,使其在VPN、流量工程(TE)、QoS等方面得到广泛应用。


2、MPLS协议简介


MPLS是一种IP骨干网技术,在无连接的IP网络上引入面向连接的标签交换概念,将第三层IP路由技术和第二层交换技术相结合,充分发挥了IP路由的灵活性和二层交换的简捷性。


MPLS起源于IPv4,其核心技术可扩展到多种网络协议,包括IPv6、IPX和CLNP等。MPLS中的“Multiprotocol”指的就是支持多种网络协议的意思。由此可见,MPLS并不是一种业务或者应用,实际上是一种隧道技术,可以对不同协议包进行重封装。这种技术不仅支持多种高层协议与业务,而且在一定程度上可以保证信息传输的安全性。


MPLS网络的典型结构如图5所示,可以进行MPLS标签交换和报文转发的网络设备称为LSR(Label Switching Router,标签交换路由器)

在MPLS L3VPN应用中,报文在IP网络内进行传统的IP转发,在MPLS域内按标签进行转发。入口LER负责从IP网络接收IP报文并给报文打上标签(是MPLS出标签),然后送到核心LSR(在此处要进行MPLS标签交换),仅负责按照外层MPLS标签进行报文转发,出口LER负责从LSR接收带MPLS报文并去掉标签(支持PHP特性的外层标签通常在倒数第二跳就被弹出),还原为原始的IP报文,然后转发到目的IP网络,根据IP路由转发到目的设备。


IP报文在MPLS网络中经过的路径称为LSP(Label Switched Path,标签交换路径),在报文转发之前已经通过手工静态配置,或者像LDP这样的动态标签协议协商确定并建立的,报文会在特定的LSP上传递。这就是MPLS所建立的“隧道”。


LSP的入口LER称为入节点(Ingress);位于LSP中间的LSR称为中间节点(Transit);LSP的出口LER称为出节点(Egress)。一条LSP可以有0个、1个或多个中间节点,但有且只有一个入节点和一个出节点

以指定的LSR为视角,根据数据传送的方向,所有往本LSR发送MPLS报文的LSR都可以称为上游LSR,本LSR将MPLS报文发送到的所有下一跳LSR都可以称为下游LSR。如图6所示,对于发往192.168.1.0/24的数据流来说,Ingress是Transit的上游节点,Transit是Ingress的下游节点。同理,Transit是Egress上游节点。Egress是Transit的下游节点。


五、IPSec协议族


IPSec(IP Security)不是一个单独的协议,它给出了应用于IP层上网络数据安全的一整套体系结构,包括AH(Authentication Header,认证头)协议和ESP(Encapsulating Security Payload,封装有效载荷)协议、IKE(Internet Key Exchange,密钥管理协议)等协议,以及用于用户身份认证和数据加密的一系列算法。


1、IPSec协议族所提供的安全服务


IPSec协议族可在网络层通过数据源认证、数据加密、数据完整性和抗重放功能来保证通信双方Internet上传输数据的安全性。


数据加密:IPSec发送方在发送数据时要先对经过所选择的安全协议重封装后的数据包进行加密,以确保数据包在隧道中传输的安全。当然,在接收方要采取对应的解封装和解密技术对原加密数据包进行还原和解密。


数据完整性(Data Integrity)和数据源认证(Data Authentication):IPSec使用AH或/和ESP协议为IP数据包提供无连接的数据完整性和数据源认证,以确保数据在传输过程中没有被篡改,并且来源是合法的。ESP协议还可为数据包提供数据加密服务。


抗重放(Anti-Replay):IPSec使用AH或/和ESP协议提供抗重放服务,检测并拒绝接收过时或重复的IP报文,防止恶意用户通过重复发送捕获到的数据包所进行的攻击。


2、IPSec主要协议


上面已提到IPSec不是一个单独的协议,而是包括一组协议,其中主要包括AH、ESP和IKE这三种。


(1)AH协议


AH协议是一个用于提供IP数据包完整性检查和身份认证的机制。其完整性检查是用来保证数据包在到达接收方时没有被篡改,而身份认证则是用来验证数据的来源(识别主机、用户、网络等)。AH本身不提供加密功能,故它不能提供数据传输的机密性。


AH协议通过对整个IP数据包进行摘要计算来提供完整性检查和身份认证服务。一个消息摘要就是一个特定的单向数据函数,它能够创建数据包唯一的数字指纹(类似人的指纹,是唯一的,可作为合法性认证),通常是采用MD5或者SHA哈希算法(也称“散列算法”)。一个消息摘要在被发送之前和数据被接收到以后都可以根据一组数据计算出来。如果两次计算出来的摘要值是一样的,那么表明该数据包在传输过程中就没有被篡改。


(2)ESP协议


ESP协议除可以实现AH协议的全部功能外,还可为传输的数据提供加密服务,因为除了可使用MD5、SHA这类身份认证算法外,还可以采用AES、DES、3DES等这类加密算法。


(3)IKE协议


IKE协议用于在两个通信实体协商、建立安全联盟(SA),并进行密钥交换。SA是IPSec中的一个重要概念,它表示两个或多个通信实体之间经过了身份认证,且这些通信实体都能支持相同的加密算法,成功地交换了会话密钥,可以开始利用 IPSec 进行安全通信。SA既可以通过命令配置由系统自动生成,也可以通过手工方式建立,但是当VPN 中结点增多时,手工配置将非常困难。


3、IPSec VPN的应用场景


IPSec只是IPSec的一种应用方式,其目的是为IP远程通信提供高安全性特性。IPSec VPN的应用场景分为以下三种。


(1)Site-to-Site(站点到站点,或者网关到网关)


如企业的多个机构分布在互联网的多个不同的地方,各使用一个应用层网关相互建立VPN隧道,企业各分机构内网的用户之间的数据通过这些网关建立的IPSec隧道实现安全互联。


(2)End-to-End(端到端,或者PC到PC)


两个位于不同网络的PC之间的通信由两个PC之间的IPSec会话保护,而不是由网关之间的IPSec会话保护。这种IPSec VPN是通过一些IPSec VPN客户端软件,如Windows(Windows 7/8/10系统中支持采用IKEv2动态协商)、Linux桌面操作系统中自带的IPSec VPN客户功能,Huawei VPN Client等客户端软件,结合Window或Linux服务器系统中自带的IPSec VPN服务器功能来实现的。


(3)End-to-Site(端到站点,或者PC到网关)


两个位于不同网络的PC之间的通信由网关和异地PC之间的IPSec进行保护。在IPSec VPN客户端方面同样可利用Windows、Linux桌面操作系统中自带的IPSec VPN客户功能,通常是采用L2TP over IPSec方案来部署,即在L2TP VPN基础上采用IPSec来提供更好的安全保护。


六、GRE协议


随着IPv4网络的广泛应用,为了使某些网络层协议(如IP或IPX协议等)的报文能够在IP网络中传输,可以将这些报文通过GRE技术进行封装,解决异种网络的传输问题。GRE采用了Tunnel(隧道)技术,也是一种三层VPN隧道协议。


GRE隧道技术可以为远程通信的数据包传输提供一条逻辑的专用传输通道,在隧道的两端分别对数据报进行封装及解封装

在GRE隧道建立前必须先在两端创建所需的隧道接口(Tunnel接口),它是为实现报文的封装而提供的一种点对点类型的虚拟接口,与Loopback接口类似,都是一种逻辑接口。


GRE隧道接口与其他隧道接口类似,均包含以下元素:


源地址:传输网络中的网络层协议(如IPv4或IPv6协议)报文中的源地址。从负责封装后报文传输的网络来看,隧道的源地址就是实际发送报文的接口IP地址。


目的地址:传输网络中的网络层协议(如IPv4或IPv6协议)报文中的目的地址。从负责封装后报文传输的网络来看,隧道本端的目的地址就是隧道目的端的源地址。


隧道接口IP地址:为了在隧道接口上启用动态路由协议,或使用静态路由协议发布隧道接口,需要为隧道接口分配IP地址。隧道接口的IP地址可以不是公共网络地址,甚至可以借用其他接口的IP地址以节约IP地址。但是当Tunnel接口借用IP地址时,由于Tunnel接口本身没有IP地址,无法在此接口上启用动态路由协议,必须配置静态路由或策略路由才能实现设备间的连通性。


封装类型:隧道接口的封装类型是指该隧道接口对报文进行的封装方式。对于GRE隧道接口而言,封装类型则为GRE。


建立GRE隧道之后,就可以将隧道接口看成是一个物理接口,运行动态路由协议或配置静态路由。然后指定由此Tunnel接口作为出接口的数据都将通过这条GRE隧道进行转发。但要注意的是,GRE VPN仅适用于Site-to-Site的网络互联,而且两端公网网关接口必须分配公网IP地址,不支持End-to-Site模式,支持但不建议采用基于动态公网IP地址的Internet接入方式。





评论

暂无
发表评论
 返回顶部 
热度(387)
 关注微信