【VPN(虚拟专用网)攻略大全】

2023-05-16

在 VPN 出现之前,企业分支之间的数据传输只能依靠现有物理网络(例如 Internet)。由于 Internet 中存在多种不安全因素,报文容易被网络中的黑客窃取或篡改,最终造成数据泄密、重要数据被破坏等后果。

除了通过 Internet,还可以通过搭建一条物理专网连接保证数据的安全传输。

VPN 简介

VPN 即虚拟专用网,泛指通过 VPN 技术在公用网络上构建的虚拟专用网络。VPN 用户在此虚拟网络中传输私网流量,在不改变网络现状的情况下实现安全、可靠的连接。

VPN 和传统的数据专网相比具有如下优势: 

▫安全:在远端用户、驻外机构、合作伙伴、供应商与公司总部之间建立可靠的连接,保证数据传输的安全性。这对于实现电子商务或金融网络与通讯网络的融合特别重要。 

▫廉价:利用公共网络进行信息通讯,企业可以用更低的成本连接远程办事机构、出差人员和业务伙伴。 

▫支持移动业务:支持驻外 VPN 用户在任何时间、任何地点的移动接入,能够满足不断增长的移动业务需求。▫可扩展性:由于 VPN 为逻辑上的网络,物理网络中增加或修改节点,不影响 VPN 的部署。 

公共网络又经常被称为 VPN 骨干网(VPN Backbone),公共网络可以是 Internet,也可以是企业自建专网或运营商租赁专网。

VPN 分类 - 根据建设单位不同

VPN 分类 - 根据组网方式不同

VPN 分类 - 根据实现的网络层次

工作在网络层和数据链路层的 VPN 又被称为三层 VPN 和二层 VPN。

VPN 关键技术 - 隧道技术

VPN 技术的基本原理是利用隧道(Tunnel)技术,对传输报文进行封装,利用 VPN 骨干网建立专用数据传输通道,实现报文的安全传输。 

位于隧道两端的 VPN 网关,通过对原始报文的 “封装” 和 “解封装”,建立一个点到点的虚拟通信隧道。

隧道的功能就是在两个网络节点之间提供一条通路,使数据能够在这个通路上透明传输。VPN 隧道一般是指在 VPN 骨干网的 VPN 节点之间建立的用来传输 VPN 数据的虚拟连接。隧道是构建 VPN 不可或缺的部分,用于把 VPN 数据从一个 VPN 节点透明传送到另一个上。 

隧道通过隧道协议实现。目前已存在不少隧道协议,如 GRE(Generic Routing Encapsulation)、L2TP(Layer 2 Tunneling Protocol)等。隧道协议通过在隧道的一端给数据加上隧道协议头,即进行封装,使这些被封装的数据能都在某网络中传输,并且在隧道的另一端去掉该数据携带的隧道协议头,即进行解封装。报文在隧道中传输前后都要通过封装和解封装两个过程。 

部分隧道可以混合使用,如 GRE Over IPSec 隧道。

VPN 关键技术 - 身份认证、数据加密与验证

身份认证、数据加密和认证技术可以有效保证 VPN 网络与数据的安全性:

▫身份认证:可用于部署了远程接入 VPN 的场景,VPN 网关对用户的身份进行认证,保证接入网络的都是合法用户而非恶意用户。也可以用于 VPN 网关之间对对方身份的认证。 

▫数据加密:将明文通过加密变成密文,使得数据即使被黑客截获,黑客也无法获取其中的信息。 

▫数据验证:通过数据验证技术对报文的完整性和真伪进行检查,丢弃被伪造和被篡改的报文。

常见 VPN 技术

IPSec 概述

IPSec(IP Security) VPN 一般部署在企业出口设备之间,通过加密与验证等方式,实现了数据来源验证、数据加密、数据完整性保证和抗重放等功能。

数据来源验证:接收方验证发送方身份是否合法。 
数据加密:发送方对数据进行加密,以密文的形式在 Internet 上传送,接收方对接收的加密数据进行解密后处理或直接转发。 
数据完整性:接收方对接收的数据进行验证,以判定报文是否被篡改。 
抗重放:接收方拒绝旧的或重复的数据包,防止恶意用户通过重复发送捕获到的数据包所进行的攻击。
IPSec 协议体系

IPSec 不是一个单独的协议,它给出了 IP 网络上数据安全的一整套体系结构,包括 AH(Authentication Header)、ESP(Encapsulating Security Payload)、IKE(Internet Key Exchange)等协议。

IPSec 使用认证头 AH(Authentication Header)和封装安全载荷 ESP(Encapsulating Security Payload)两种安全协议来传输和封装数据,提供认证或加密等安全服务。

▫AH 和 ESP 协议提供的安全功能依赖于协议采用的验证、加密算法。 

▫AH 仅支持认证功能,不支持加密功能。ESP 支持认证和加密功能。 

▫安全协议提供认证或加密等安全服务需要有秘钥的存在。 

秘钥交换的方式有两种: 

▫带外共享密钥:在发送、接收设备上手工配置静态的加密、验证密钥。双方通过带外共享的方式(例如通过电话或邮件方式)保证密钥一致性。这种方式的缺点是可扩展性差,在点到多点组网中配置密钥的工作量成倍增加。另外,为提升网络安全性需要周期性修改密钥,这种方式下也很难实施。 

▫通过 IKE 协议自动协商密钥:IKE 建立在 Internet 安全联盟和密钥管理协议 ISAKMP 定义的框架上,采用 DH(Diffie-Hellman)算法在不安全的网络上安全地分发密钥。这种方式配置简单,可扩展性好,特别是在大型动态的网络环境下此优点更加突出。同时,通信双方通过交换密钥交换材料来计算共享的密钥,即使第三方截获了双方用于计算密钥的所有交换数据,也无法计算出真正的密钥。

IPSec 基本原理

IPSec 隧道建立过程中需要协商 IPSec SA(Security Association,安全联盟),IPSec SA 一般通过 IKE 协商生成。

SA 由一个三元组来唯一标识,这个三元组包括安全参数索引 SPI(Security Parameter Index)、目的 IP 地址和使用的安全协议号(AH 或 ESP)。其中,SPI 是为唯一标识 SA 而生成的一个 32 位比特的数值,它在 AH 和 ESP 头中传输。在手工配置 SA 时,需要手工指定 SPI 的取值。使用 IKE 协商产生 SA 时,SPI 将随机生成。 

SA 是单向的逻辑连接,因此两个 IPSec 对等体之间的双向通信,最少需要建立两个 SA 来分别对两个方向的数据流进行安全保护。 

KE 作为秘钥协商协议,存在两个版本:IKEv1 和 IKEv2,本课程采用 IKEv1 为例进行介绍,IKEv2 内容可参考产品文档对应内容。 

▫IKEv1 协商阶段 1 的目的是建立 IKE SA。IKE SA 建立后对等体间的所有 ISAKMP 消息都将通过加密和验证,这条安全通道可以保证 IKEv1 第二阶段的协商能够安全进行。IKE SA 是一个双向的逻辑连接,两个 IPSec 对等体间只建立一个 IKE SA。 

▫IKEv1 协商阶段 2 的目的就是建立用来安全传输数据的 IPSec SA,并为数据传输衍生出密钥。该阶段使用 IKEv1 协商阶段 1 中生成的密钥对 ISAKMP 消息的完整性和身份进行验证,并对 ISAKMP 消息进行加密,故保证了交换的安全性。 

IKE 协商成功意味着双向的 IPSec 隧道已经建立,可以通过 ACL 方式或者安全框架方式定义 IPSec “感兴趣流”,符合感兴趣流流量特征的数据都将被送入 IPSec 隧道进行处理。 

感兴趣流:需要被 IPSec 保护的数据流。

GRE 概述

通用路由封装协议(General Routing Encapsulation,GRE)是一种三层 VPN 封装技术。GRE 可以对某些网络层协议(如 IPX、IPv4、IPv6 等)的报文进行封装,使封装后的报文能够在另一种网络中(如 IPv4)传输,从而解决了跨越异种网络的报文传输问题。

如图所示,通过在 IPv4 网络上建立 GRE 隧道,解决了两个 IPv6 网络的通信问题。 

GRE 还具备封装组播报文的能力。由于动态路由协议中会使用组播报文,因此更多时候 GRE 会在需要传递组播路由数据的场景中被用到,这也是 GRE 被称为通用路由封装协议的原因。

GRE 基本原理

GRE 构成要素分为 3 个部分:乘客协议、封装协议和运输协议。 

▫乘客协议是指用户在传输数据时所使用的原始网络协议。

▫封装协议的作用就是用来 “包装” 乘客协议对应的报文,使原始报文能够在新的网络中传输。 

▫运输协议是指被封装以后的报文在新网络中传输时所使用的网络协议。

隧道接口(Tunnel Interface)是为实现报文的封装而提供的一种点对点类型的虚拟接口,与 Loopback 接口类似,都是一种逻辑接口。 

如图所示,乘客协议为 IPv6,封装协议为 GRE,运输协议为 IPv4。整体转发流程如下: 

当 R1 收到 IP1 发来的 IPv6 数据包,查询设备路由表,发现出接口是隧道接口,则将此报文发给隧道接口处理。
隧道接口给原始报文添加 GRE 头部,然后根据配置信息,给报文加上 IP 头。该 IP 头的源地址就是隧道源地址,IP 头的目的地址就是隧道目的地址。
封装后的报文在 IPv4 网络中进行普通的 IPv4 路由转发,最终到达目的地 R2。
解封装过程和封装过程相反,这里不再赘述。
GRE Over IPSec

GRE 的主要缺点是不支持加密和认证,数据的安全传输得不到很好的保障。 

IPSec 的主要缺点是只支持 IP 协议,且不支持组播。 

可通过部署 GRE Over IPSec 结合两种 VPN 技术的优点。

L2TP 概述

L2TP 是虚拟私有拨号网 VPDN(Virtual Private Dial-up Network)隧道协议的一种,它扩展了点到点协议 PPP 的应用,是一种在远程办公场景中为出差员工或企业分支远程访问企业内网资源提供接入服务的 VPN。 

L2TP 组网架构中包括 LAC(L2TP Access Concentrator,L2TP 访问集中器)和 LNS(L2TP Network Server,L2TP 网络服务器)

VPDN 是指利用公共网络(如 ISDN 和 PSTN)的拨号功能及接入网来实现虚拟专用网,为企业、小型 ISP、移动办公人员提供接入服务。VPDN 采用专用的网络加密通信协议,在公共网络上为企业建立安全的虚拟专网。企业驻外机构和出差人员可从远程经由公共网络,通过虚拟加密隧道实现和企业总部之间的网络连接,而公共网络上其它用户则无法穿过虚拟隧道访问企业网内部的资源。VPDN 隧道协议有多种,目前使用最广泛的是 L2TP。 

LAC 是网络上具有 PPP 和 L2TP 协议处理能力的设备。LAC 负责和 LNS 建立 L2TP 隧道连接。在不同的组网环境中,LAC 可以是不同的设备,可以是一台网关设备,也可以是一台终端设备。LAC 可以发起建立多条 L2TP 隧道使数据流之间相互隔离。 

LNS 是 LAC 的对端设备,即 LAC 和 LNS 建立了 L2TP 隧道;LNS 位于企业总部私网与公网边界,通常是企业总部的网关设备。

L2TP 消息

L2TP 协议包含两种类型的消息,控制消息和数据消息,消息的传输在 LAC 和 LNS 之间进行。

▫控制消息用于 L2TP 隧道和会话连接的建立、维护和拆除。 

▫数据消息用于封装 PPP 数据帧并在隧道上传输。

控制消息 

▫用于 L2TP 隧道和会话连接的建立、维护和拆除。在控制消息的传输过程中,使用消息丢失重传和定时检测隧道连通性等机制来保证控制消息传输的可靠性,支持对控制消息的流量控制和拥塞控制。 

▫控制消息承载在 L2TP 控制通道上,控制通道实现了控制消息的可靠传输,将控制消息封装在 L2TP 报头内,再经过 IP 网络传输。 

数据消息 

▫用于封装 PPP 数据帧并在隧道上传输。数据消息是不可靠的传输,不重传丢失的数据报文,不支持对数据消息的流量控制和拥塞控制。 

▫数据消息携带 PPP 帧承载在不可靠的数据通道上,对 PPP 帧进行 L2TP 封装,再经过 IP 网络传输。

L2TP 工作过程

L2TP 主要可分为以下三种工作场景,其工作过程并不相同:

▫NAS-Initiated 场景:拨号用户通过 NAS 访问企业内网 ▫Client-Initiated 场景:移动办公用户访问企业内网 ▫Call-LNS 场景:通过 LAC 自主拨号实现企业内网互连

NAS-Initiated 场景:由远程拨号用户发起,远程系统通过 PSTN/ISDN 拨入 LAC,由 LAC 通过 Internet 向 LNS 发起建立隧道连接请求。拨号用户地址由 LNS 分配;对远程拨号用户的验证与计费既可由 LAC 侧的代理完成,也可在 LNS 完成。 

▫用户必须采用 PPP 的方式接入到 Internet,也可以是 PPPoE 等协议。 

▫运营商的接入设备(主要是 BAS 设备)需要开通相应的 VPN 服务。用户需要到运营商处申请该业务。 

▫L2TP 隧道两端分别驻留在 LAC 侧和 LNS 侧,且一个 L2TP 隧道可以承载多个会话。 

Client-Initialized 场景:直接由 LAC 客户(指可在本地支持 L2TP 协议的用户)发起。客户需要知道 LNS 的 IP 地址。LAC 客户可直接向 LNS 发起隧道连接请求,无需再经过一个单独的 LAC 设备。在 LNS 设备上收到了 LAC 客户的请求之后,根据用户名、密码进行验证,并且给 LAC 客户分配私有 IP 地址。 

▫用户需要安装 L2TP 的拔号软件。部分操作系统自带 L2TP 客户端软件。 

▫用户上网的方式和地点没有限制,不需 ISP 介入。▫L2TP 隧道两端分别驻留在用户侧和 LNS 侧,一个 L2TP 隧道承载一个 L2TP 会话。 

▫该场景建立过程如下: 

移动办公用户与 LNS 建立 L2TP 隧道。
移动办公用户与 LNS 建立 L2TP 会话:移动办公用户在第 3 步会与 LNS 间建立 PPP 连接,L2TP 会话用来记录和管理它们之间的 PPP 连接状态。因此,在建立 PPP 连接以前,隧道双方需要为 PPP 连接预先协商出一个 L2TP 会话。会话中携带了移动办公用户的 LCP 协商信息和用户认证信息,LNS 对收到的信息认证通过后,通知移动办公用户会话建立成功。L2TP 会话连接由会话 ID 进行标识。
移动办公用户与 LNS 建立 PPP 连接。移动办公用户通过与 LNS 建立 PPP 连接获取 LNS 分配的企业内网 IP 地址。
移动办公用户发送业务报文访问企业总部服务器
Call-LNS 场景:L2TP 除了可以为出差员工提供远程接入服务以外,还可以进行企业分支与总部的内网互联,实现分支用户与总部用户的互访。一般是由分支路由器充当 LAC 与 LNS 建立 L2TP 隧道,这样就可实现分支与总部网络之间的数据通过 L2TP 隧道互通。

L2TP Over IPSec

当企业对数据和网络的安全性要求较高时,L2TP 无法为报文传输提供足够的保护。这时可以和 IPSec 功能结合使用,保护传输的数据,有效避免数据被截取或攻击。

企业出差用户和总部通信,使用 L2TP 功能建立 VPN 连接,总部部署为 LNS 对接入的用户进行认证。当出差用户需要向总部传输高机密信息时,L2TP 无法为报文传输提供足够的保护,这时可以和 IPSec 功能结合使用,保护传输的数据。在出差用户的 PC 终端上运行拨号软件,将数据报文先进行 L2TP 封装,再进行 IPSec 封装,发往总部。在总部网关,部署 IPSec 策略,最终还原数据。这种方式 IPSec 功能会对所有源地址为 LAC、目的地址为 LNS 的报文进行保护。

MPLS VPN 概述

MPLS 是一种利用标签(Label)进行转发的技术,最初为了提高 IP 报文转发速率而被提出,现主要应用于 VPN 和流量工程、QoS 等场景。  

根据部署的不同,MPLS VPN 可分为 MPLS L2 VPN 或者 MPLS L3 VPN。 

企业可以自建 MPLS 专网也可以通过租用运营商 MPLS 专网的方式获得 MPLS VPN 接入服务。

MPLS VPN 网络一般由运营商搭建,VPN 用户购买 VPN 服务来实现用户网络之间(图中的分公司和总公司)的路由传递、数据互通等。 

基本的 MPLS VPN 网络架构由 CE(Customer Edge)、PE(Provider Edge)和 P(Provider)三部分组成: 

▫CE:用户网络边缘设备,有接口直接与运营商网络相连。CE 可以是路由器或交换机,也可以是一台主机。通常情况下,CE “感知” 不到 VPN 的存在,也不需要支持 MPLS。 

▫PE:运营商边缘路由器,是运营商网络的边缘设备,与 CE 直接相连。在 MPLS 网络中,对 VPN 的所有处理都发生在 PE 上,对 PE 性能要求较高。 

▫P:运营商网络中的骨干路由器,不与 CE 直接相连。P 设备只需要具备基本 MPLS 转发能力,不维护 VPN 相关信息。 

更多 MPLS 及 MPLS VPN 的相关内容,参考 HCIP-Datacom-Advance 相应课程。

小总结

VPN 技术拥有安全、廉价、支持移动业务、灵活等一系列优势,已经成为现网中部署最为广泛的一类技术。 

本文从 VPN 基本概念与分类出发,简单介绍了如下几类常见 VPN 技术: 

▫IPSec VPN:是一系列为 IP 网络提供安全性的协议和服务的集合,为 IP 网络提供安全的传输。 

▫GRE VPN:提供了将一种协议的报文封装在另一种协议报文中的机制,解决异种网络的传输问题。 

▫L2TP VPN:是一种能够提供移动用户远程接入服务的二层 VPN 技术。 

▫MPLS VPN:一种通过标签交换技术,实现站点与站点之间互联的 VPN 技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【VPN(虚拟专用网)攻略大全】 的相关文章

随机推荐

  • 关于C语言等高级语言能不能直接控制硬件的问题

    关于C语言等高级语言能不能直接控制硬件的问题 xff0c 我认为C语言等高级语言不能直接控制硬件 这里谈论的问题本质是 xff0c C语言等高级语言能不能直接对硬件进行编程 我认为 xff0c 不能 众所周知 xff0c 计算机之初的程序员
  • scanf函数输入字符 %c之前要有空格分析

    问题描述如下 xff1a test c int main void int n 61 0 char c while 1 scanf 34 c 34 amp c printf 34 c d n 34 c 43 43 i return 0 这段
  • Linux0.11内核 进程睡眠和唤醒

    当进程等待资源或者事件时 xff0c 就进入睡眠状态 有两种睡眠态 xff0c 不可中断睡眠态 xff08 TASK UNINTERRUPTIBLE xff09 和可中断睡眠态 xff08 TASK INTERRUPTIBLE xff09
  • ubuntu linux 触控板失灵的解决方案

    这几天研究内核的模块机制 xff0c 接触到了一些关于模块的操作命令 xff0c 比如lsmod命令可以列出内核中已经安装的模块 xff0c insmod命令可以安装一个指定的模块 xff0c rmmod可以删除一个指定的模块 也是处于好奇
  • Linux 安装远程桌面并设置添加分辨率

    本来想用本地的kali linux来远程登陆centos的服务器 xff0c 在远程服务器安装VM xff0c 再VM里安装Windows虚拟机 xff0c 用作工作娱乐需要 xff0c 尼玛八颗八核至强CPU xff0c 128G内存 x
  • 将数据库文件导入mysql并输出为txt文件

    大致上MySQL数据库备份可以采用两种方式 xff1a 一种就是直接导出sql语句或者易于导入的其他格式的sql存储文件 xff0c 使用sql语句或者一些可视化客户端导出 xff0c 这种方法非常简单 xff0c 无需赘述 xff1b 另
  • golang gorilla/mux设置静态目录

    发现网上都是类似下面的代码 96 96 96 s 61 34 Users golang golang 34 http Handle 34 static 34 http StripPrefix 34 static 34 http FileSe
  • ios系统removeCachedResponseForRequest无效的替代方案

    相信你能找到我这篇博客 xff0c 肯定是对URLCache缓存有了深刻的理解 xff0c 并且被ios系统api removeCachedResponse ForRequest使用起来并不能删除指定的缓存所困惑 其实也可以自己想办法来模拟
  • DHCPv6报文介绍

    摘自HUAWEI官网 DHCPv6报文格式如图11 2所示 图11 2 DHCPv6的报文格式 表11 1 DHCPv6报文中各个字段的含义 字段 长度 含义 msg type 1字节 表示报文的类型 xff0c 取值为1 xff5e 13
  • vnc服务器的搭建

    vnc服务的概述 xff1a VNC Virtual Network Computing 虚拟网络计算机的缩写 xff0c 主要是完成图形界面的远程控制使用 一个vnc系统是由客户端 服务器端和一个协议组成 服务器是分享其屏幕 xff0c
  • openwrt配置wifi桥接上级AP,再作为ap路由(可实现ip透传,例如远距离图像传输)

    第一步 上级ap配置为 接入点AP xff08 WDS xff09 xff0c 例如无人机的飞机端作为wds ap a xff0c 无线概况里点击修改 b xff0c ESSID改为你想要的名字 xff0c 要选择固定信道 xff08 非常
  • 菜鸟学Linux命令:ssh命令

    转载自品略图书馆 http www pinlue com article 2020 04 1003 1210139769049 html 1 查看SSH客户端版本 有的时候需要确认一下SSH客户端及其相应的版本号 使用ssh V命令可以得到
  • STM32串口发送数据

    串口通信经常作为开发调试的工具 xff0c 所以先介绍下串口通信 串口通讯 Serial Communication 是一种设备间非常常用的串行通讯方式 xff0c 因为它简单便捷 xff0c 大部分电子设备都支持该通讯方式 xff0c 电
  • npm ERR! code EINTEGRITY 解决方案

    报错信息 xff1a Error sha1 HsihLT8VutOkAReGpzpIZJY2twQ 61 integrity checksum failed when using sha1 wanted sha1 HsihLT8VutOkA
  • VScode搭建C/C++开发环境

    目录 1 VScode是什么 xff1f 2 VScode的下载和安装 2 1下载和安装 下载 xff1a 安装 xff1a 2 2环境的介绍 环境介绍 xff1a 安装中文版插件 xff1a 3 VScode配置C C 43 43 开发环
  • 从0开始跑通VINS FUSION(KITTI数据集)

    背景 xff1a VINS FUSION是香港科技大学在VINS MONO后做的推出的多功能版 xff0c 有双目的数据 xff0c 还有和GPS的融合 作为一个SLAM小白 xff0c 记录一下整个的跑通过程 代码连接 xff1a htt
  • ubuntu关于aptitude和apt-get

    起初GNU Linux系统中只有 tar gz 用户 必须自己编译他们想使用的每一个程序 在Debian出现之後 xff0c 人们认为有必要在系统 中添加一种机 制用来管理 安装在计算机上的软件包 人们将这套系统称为dpkg 至此着名的 p
  • C语言链表的简单编写

    代码分为3个部分 xff0c test c head h list c list c封装的函数 include 34 head h 34 创建一个空链表 Linklist list creat 申请一断空间 Linklist L L 61
  • java中a=a++;a=a+1;a+=1执行过程分析

    本文章内容前提是a数据类型为int 当a数据类型为int时 xff0c 执行a 61 a 43 43 后 xff0c a的数值不会变 xff1b 执行a 61 a 43 1后 xff0c 数值加1 xff1b 执行a 43 61 1后 xf
  • 【VPN(虚拟专用网)攻略大全】

    在 VPN 出现之前 xff0c 企业分支之间的数据传输只能依靠现有物理网络 xff08 例如 Internet xff09 由于 Internet 中存在多种不安全因素 xff0c 报文容易被网络中的黑客窃取或篡改 xff0c 最终造成数