VPN技术简介

虚拟专用网络(VPN)的功能是:在公用网络上建立专用网络,进行加密通讯。在企业网 络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。 VPN有多种分类方式,主要是按协议进行分类。VPN可通过服务器、硬件、软件等多种方 式实现。 VPN按照协议实现一般分为以下类别:
1、二层VPN:包括点到点隧道协议(PPTP)、第二层转发协议(L2F),第二层隧道 协议(L2TP)、多协议标记交换(MPLS)等;
2、三层VPN:包括通用路由封装协议(GRE)、IP安全(IPSec),这是目前最流行 的两种三层协议;
3、应用层VPN:包括安全套接层(SSL)和传输层安全(TLS),准确来说工作在传输 层和应用层之间。

VPN实现主要设计到的技术:
1、隧道技术: 是VPN的核心技术,VPN的所有实现都是依赖于隧道。隧道主要利用协议的封装来实 现的。即用一种网络协议来封装另一种网络协议的报文。
2、加密技术: 信息加密体制包括对称加密体制和非对称加密体制,实际应用中通常是融合二者的混合 加密技术。非对称加密技术(公开秘钥)多用于认证、数字签名以及安全传输会话秘钥等场 合,对称加密技术则用于大量传输数据的加密和完整性保护。
3、秘钥管理技术 现行秘钥管理技术分为SKIP和ISAKMP/OAKLEY两种。SKIP主要利用Diffie-Hellman 算法在开放网络上安全传输秘钥;而ISAKMP则采用公开秘钥机制,通信实体双方均有两把 秘钥,分别为公钥、私钥,不同的VPN实现技术选用其一或者兼而有之。
4、身份认证技术 认证协议一般都要采用基于散列函数的消息摘要技术,因而还可以提供消息完整性验 证。从实现技术来看,目前VPN采用的身份认证技术主要分为非PKI体系和PKI体系两类。

IPSec(Internet Protocol Security)是IETF定义的一个协议组。 通信双方在IP层通过 加密、 完整性校验、 数据源认证等方式,保证了IP数据报文在网络上传输的机密性、 完整 性和防重放。 1、机密性(Confidentiality) 指对数据进行加密保护, 用密文的形式传送数据。 2、完整性(Data integrity) 指对接收的数据进行认证, 以判定报文是否被篡改。
3、防重放(Anti-replay) 指防止恶意用户通过重复发送捕获到的数据包所进行的攻 击, 即接收方会拒绝旧的或重复的数据包。 企业远程分支机构可以通过使用IPSec VPN建立安全传输通道, 接入到企业总部网络。
QG_E~94D11LLFQDJYR.png

GRE隧道技术

通用路由封装协议GRE(Generic Routing Encapsulation)提供了将一种协议的报文封 装在另一种协议报文中的机制,是一种隧道封装技术。GRE可以封装任何网络层协议,包括 组播数据,这样就可以保证路由协议、音频、视频流量通过GRE隧道进行传输,GRE可以解 决异种网络的传输问题。 GRE本身并不支持加密, 因而通过GRE隧道传输的流量是不加密的。 将IPSec技术与 GRE结合使用, 先建立GRE隧道对报文进行GRE封装,然后再建立IPSec隧道对报文进行加 密, 以保证报文传输的完整性和私密性。 GRE封装报文时,封装前的报文称为净荷,封装前的报文协议称为乘客协议,然后GRE 会封装GRE头部,GRE成为封装协议,也叫运载协议,最后负责对封装后的报文进行转发的 协议称为传输协议。
B2C7SZWTY1XA9047ZU1.png
GRE封装和解封装报文的过程如下:
1、设备从连接私网的接口接收到报文后,检查报文头中的目的IP地址字段,在路由表 查找出接口,如果发现出接口是隧道接口,则将报文发送给隧道模块进行处理。
2、隧道模块接收到报文后首先根据乘客协议的类型和当前GRE隧道配置的校验和参 数,对报文进行GRE封装,即添加GRE报文头。
3、然后,设备给报文添加传输协议报文头,即IP报文头。该IP报文头的源地址就是隧 道源地址,目的地址就是隧道目的地址。
4、最后,设备根据新添加的IP报文头目的地址,在路由表中查找相应的出接口,并发 送报文。之后,封装后的报文将在公网中传输。
5、接收端设备从连接公网的接口收到报文后, 首先分析IP报文头, 如果发现协议类 型字段的值为47, 表示协议为GRE, 于是出接口将报文交给GRE模块处理。 GRE模块去掉 IP报文头和GRE报文头, 并根据GRE报文头的协议类型字段, 发现此报文的乘客协议为私 网中运行的协议, 于是将报文交给该协议处理。 关键字(Key) 验证是指对隧道接口进行校验,这种安全机制可以防止错误接收到来自 其他设备的报文。关键字字段是一个四字节长的数值,若GRE报文头中的K位为1,则在 GRE报文头中会插入关键字字段。只有隧道两端设置的关键字完全一致时才能通过验证,否 则报文将被丢弃。
HEY3C5X1LG4J~HLIZ5.png
Keepalive检测功能用于在任意时刻检测隧道链路是否处于Keepalive状态, 即检测隧 道对端是否可达。 如果对端不可达, 隧道连接就会及时关闭, 避免形成数据空洞。 使能 Keepalive检测功能后, GRE隧道本端会定期向对端发送Keepalive探测报文。 若对端可 达, 则本端会收到对端的回应报文;若对端不可达, 则收不到对端的回应报文。 如果在隧 道一端配置了Keepalive功能, 无论对端是否配置Keepalive, 配置的Keepalive功能在该 端都生效。 隧道对端收到Keepalive探测报文, 无论是否配置 Keepalive, 都会给源端发送一个回应报文。 使能Keepalive检测功能后, GRE隧道的源端会创建一个计数器,并周期性地发送 Keepalive探测报文, 同时进行不可达计数。每发送一个探测报文,不可达计数加1。如果 源端在计数器值达到预先设置的值之前收到回应报文,则表明对端可达。如果计数器值达到 预先设置的重试次数, 源端还是没有收到回应报文,则认为对端不可达。此时,源端将关 闭隧道连接。

实现GRE隧道

可以在路由器、硬件防护墙或者Linux主机上实现GRE协议,配置方式虽然不同,但是 只要理解了协议原理,其实都差不多,只是配置命令不同而已。

1IT~TLA77YRXJGEX6QB.png
注意:在配置GRE隧道之前,一定要保证隧道两端能够互通,即隧道的源地址和目的 地址是可以通信的。
配置过程:
1、创建并启动隧道接口: interface Tunnel0/0/1  ip address 10.1.1.1 255.255.255.0   
tunnel-protocol gre  
source 100.1.1.2  
destination 200.1.1.2
interface tunnel interface-number命令用来创建Tunnel接口。 创建Tunnel接口后,  需要配置Tunnel接口的IP地址和Tunnel接口的封装协议。
tunnel-protocol命令用来配置Tunnel接口的隧道协议。
source { source-ip-address | interface-type interface-number }命令用来配置Tunnel源 地址或源接口。
destination dest-ip-address命令用来指定Tunnel接口的目的IP地址。
2、验证隧道接口状态 [BeiJing]display interface Tunnel 0/0/1 Tunnel0/0/1 current state : UP
Line protocol current state : UP
Last line protocol up time : 2019-05-15 16:26:56 UTC-08:00
Description:HUAWEI, AR Series, Tunnel0/0/1 Interface Route Port,The Maximum Transmit Unit is 1500 Internet Address is 10.1.1.1/24
Encapsulation is TUNNEL, loopback not set Tunnel source 100.1.1.2 (GigabitEthernet0/0/0), destination 200.1.1.2
Tunnel protocol/transport GRE/IP, key disabled keepalive disabled Checksumming of packets disabled
Current system time: 2019-05-15 16:30:46-08:00     300 seconds input rate 0 bits/sec, 0 packets/sec     300 seconds output rate 0 bits/sec, 0 packets/sec     0 seconds input rate 0 bits/sec, 0 packets/sec     0 seconds output rate 0 bits/sec, 0 packets/sec     0 packets input,  0 bytes     0 input error     5 packets output,  540 bytes     0 output error     Input bandwidth utilization  : -    
Output bandwidth utilization : -
也可以ping一下对端设备的隧道接口,查看是否可以通信。如果可以ping通,说明隧道建立 成功
3、配置到达对端设备后面网络的路由条目。
可以使用静态路由,也可以使用动态路由。下一跳为对端设备的隧道接口IP地址,或者 设置出接口为本地隧道接口也可以。
[BeiJing]ip route-static 172.16.1.0 24 Tunnel 0/0/1
4、配置Keepalive检测 interface Tunnel0/0/1
keepalive period 6