第十七章 广域网互联技术
17.1 GRE VPN
GRE VPN用于分支与分支通过私网地址互联,通过在私网报文上添加一个GRE的头部,以及添加一层外层的IP头部,通过外层头部中的目IP地址使得报文到达隧道对端接口,并解封装得到原始的私网报文。隧道的两个源目IP地址就相当于是形成了一个隧道。
17.1.1 报文格式
格式:外层的帧头+外层IP头部+GRE头部+内层的IP头部+载荷部分
外层帧头:由报文外层目的IP地址及查找路由的下一跳决定。
外层IP头部:Tunnel接口中配置的隧道远端IP地址和隧道目的端IP地址决定
GRE头部:
- 1、C bit位:如果置1,表示该头部中携带校验和字段(可变字段),置0不携带
- 2、K bit位:如果置1,表示该头部中携带Key字段(主要是用于隧道通信时进行隧道合法性验证),置0不携带。
- Recursion:该字段表示报文经过了几层GRE的封装,防止报文进行无限次数封装。GRE头部最多3层,设备收到超过3层GRE的封装的报文,则丢弃。
- Protocol type字段:乘客协议,是指GRE报文内部中封装的私网报文是何种协议。
私网IP头部:源目IP地址是互访的两条私网设备自身地址。
GRE隧道是承载3层数据通信的L3VPN,支持广播、组播、单播、因此该隧道中可以传递动态路由协议,可以承载IPv4和IPv6报文。
17.1.2 GRE功能
1、Keepalive机制
GRE默认不开启Keepalive 机制,手动开启后,设备将按照默认5s的周期发送Keepalive报文给隧道对端的接口,如果重传3次,对端仍为未回复Keepalive报文,则认为隧道Down。
2、校验和机制
GRE头部中Cbit位置1,表示携带校验和字段,校验和根据载荷部分报文hash计算得来,一起发送给对端,对端收到报文之后,对载荷部分重新按照相同算法再进行一次校验,得出校验值与报文GRE头部中的校验和进行比较,相同则接受,不同则丢弃。
- Key功能
GRE隧道两端设备都隧道接口都设置相同的关键字(key),收发报文关键字必须一致,否则就丢弃报文。Kbit位置1,携带Key字段。
- 动态路由:支持IGP协议直接通过隧道学习分支路由表
- 在私网的IGP中通告GRE Tunnel接口的本身的IP地址,但是不同通告隧道的源地址。
- 如果通告了隧道的源地址(公网地址),公网地址也通过隧道封装,会导致报文重复进行GRE封装,而封装失败。(隧道接口网络层协议平繁的up和down)
- 应用场景:MPLS VPN 中CE设备和PE设备非直连,通过GRE隧道在CE和PE之间建立GRE VPN,PE上创建实例在Tunnel 接口下绑定。
17.2 L2TP VPN
- 概念:
- NAS:网络接入服务器,连接的终端的拨号网络(也是LAC)
- LAC:网络接入客户端,发起L2TP连接的设置(一般为出差员工的终端设备)
- LNS:L2TP网络服务器,与LAC是一对,接收L2TP的连接请求的服务器。(一般总部的出口设备)
- 组网模型:三种,常用远程办公连接
- 远程办公设备作为LAC直接向LNS进行拨号
- 分支的出口设备作为LAC向总部LNS进行拨号
- 分支的终端设备通过PPPoE向ISP的NAS进行拨号,NAS作为LAC向总部的LNS进行L2TP拨号连接。
- 消息类型:控制消息和数据消息
- 控制消息:主要是用于隧道建立,会话建立拆除等
- 公网IP头部+UDP头部+L2TP头部+控制消息部分
- 数据消息
- 公网IP头部+UDP头部+L2TP头部+PPP头部+私网IP头部+数据部分
- 控制消息:主要是用于隧道建立,会话建立拆除等
- IPsec VPN
17.3.1 IPsec的功能:
- 加密、认证,提供报文的安全
- 防重放机制:防止恶意大量复制IPsec报文并发送给IPsec目标设备,消耗目标设备系统资源
- 不可否认性:通过对通信双方身份进行信息认证。
17.3.2 加密方式
对称加密:用于数据传输过程中对报文的加密,加密和解密使用相同的密钥进行。
加解密需要用密钥算法和密钥(密码)。DES、3DES算法,AES算法。
非对称加密:用于身份认证,保护对称密钥,加密和解密使用不同的密钥进行。DH算法,RSA算法。公钥和私钥,公钥是公开的,所有人可以得到该用户的公钥,私钥用户自己保存,不能泄露。
- 数据认证:主要作用是报文被篡改后能够及时发现
- A将报文和报文hash计算之后的hash值一起发送给B
- B将报文的内容重新进行hash计算,得出的hash值与报文携带的hash值进行比较,相同则说明报文未被修改,接收。不同则说明报文被篡改,丢弃不接受。
17.4 IPsec 工作原理
- 加密思路:
- 通信报文通过对称密钥A进行加解密,需要保障密钥A交互的过程中必须要安全
- 使用对端的公钥B1进行加密对称密钥A,得到密钥A的密文X
- 对端收到密文X后,通过自己的私钥B2进行解密,得到对称密钥A,用于数据通信加密。
- IPsec SA(安全联盟):用于隧道建立的一些要素的约定,包含了加密算法、认证算法、封装的类型(隧道模式封装,传输模式封装)。两个方向,对于同一个通信的两个点,本端设备上会存在两个IPsec SA(inbound和outbound方向)。Ipsec隧道的建立过程,就是SA的建立过程。两种方式:手工和IKE自动建立。
- IPsec加密和认证
- 认证:本端根据加密算法,将自己的报文A加密得到A1,在根据认证算法将A1进行hash计算,得到hash值ICV,ICV与A1一起发送给对端。
- 对端将根据相同的认证算法,对报文进行hash计算,得到ICV与报文后携带ICV进行比较,相同则进行解密,不同,则丢弃。
- 解密:对端根据解密算法,将报文A1进行解密得到原始报文A
- 两种传输协议:AH(支持认证)、ESP(认证、加密)
- 两种封装模式:隧道封装、传输模式封装
- 隧道封装报文:AH
- 原报文:私网IP+Data部分
- AH封装后报文:外层IP+AH头部(ICV)+私网IP头部+Data部分
- AH认证的部分:外层IP头部到Data部分(包含这两个部分)
- 隧道封装报文:ESP
- 原报文:私网IP头部+Data部分
- ESP封装后的报文:外层IP头部+ESP头部+私网IP头部+Data部分+ESP尾部+ESP认证数据
- ESP加密后的报文:私网IP头部+Data部分+ESP尾部
- ESP认证范围:ESP头部+私网IP头部+Data部分+ESP尾部
- 对加密后的报文进行认证,将认证后计算的Hash值放入到ESP认证数据部分,报文格式:外层IP头部+ESP头部+私网IP头部+Data部分+ESP尾部+ESP认证数据
- 传输模式封装报文:AH
- 原报文:私网IP+Data部分
- AH封装后:私网IP+AH头部+Data部分
- 认证范围:私网IP+AH头部+Data部分
- 传输模式封装报文:ESP
- 原报文:私网IP+Data部分
- ESP封装后:私网IP头部+ESP头部+数据部分+ESP尾部+ESP认证数据
- 认证范围:ESP的头部+数据部分+ESP的尾部,认证数据放到报文尾部ESP认证数据字段
- 加密范围:数据部分+ESP尾部
- 总结:AH的认证范围是包含外层IP头部;ESP的加密范围是ESP头部之后的数据(隧道模式包含内层的IP头部)+ESP尾部;ESP认证范围是ESP的头部到ESP尾部中间(包含头尾)。
- 隧道封装报文:AH
17.5 IPsec 隧道动态建立过程
17.5.1 IKE 协议动态建立IPsec SA
IKE两个版本:v1版本和V2版本
- IKE V1版本:两种模式,主动模式和野蛮模式,两个阶段
- 主动模式:第一阶段,6个报文,三次交互
- 1,2个报文进行IKE提议的交互,确定IKE SA
- 3,4个报文交互密钥材料,生成相同的密钥,生成飞对称密钥。
- 5,6个报文使用第2步生成密钥对身份认证和过程的认证报文交互进行加密保护
- 野蛮模式:第一阶段,3个报文
- 1,2个携带IKE 提议、身份和验证信息,交互报文确定IKE SA
- 发送验证数据
- 快速模式:第二阶段,主要的任务协商IPsec SA,该过程使用第一阶段生成的密钥进行加密保护。
- 1,2报文进行IPsec 提议的交互,协商IPsec SA
- 发送方发送确认信息,确认与响应方可以通信,协商结束。
17.5.2 IKE v2
除了初始交换过程开始两个报文不加密,其他报文均加密
1、初始交换:用于协商IPsec SA的,4个报文,其中两个报文用于交互IKE参数,2个报文用于进行身份和过程认证。
2、子SA交换过程,如果需要协商过个IPSec SA,每增加一个SA,增加一次子SA交换过程即可
3、通知交换过程:用于交换查错信息,消息信息等。
17.6 IPsec NAT穿越
AH协议由于要对报文的外层IP头部进行认证,经过了NAT设备后,IP头部发生改变,会导致对端接受到报文后,认证失败,因此AH不支持NAT穿越
ESP协议,新增加封装UDP头部,则可以支持NAT穿越。
NAT-T 功能,开启NAT-T,检测数据包的源IP地址和端口号,将源IP地址与源端口号hash计算,传递给对端,对端收到报文后,将报文的IP源IP地址和与源端口再次hash计算,得出的结果不同,则认为报文经过了NAT设备。
NAT穿越只能通过分部发起IPsec协商,如果需要总部发起IPsec协商可以在NAT设备上,将端口500和4500一起映射到公网。总部发起IPsec协商的地址是分部的公网地址。如果不映射,分部发起IPsec协商,总部采用策略模版配置。
NAT-T场景,IPsec网关在分支的NAT设备后面,分支访问总部,在NAT设备上创建NAT会话表,总部回包根据NAT会话,NAT设备进行向内部转发。总部无法主动访问分支,因为NAT设备上不存在NAT会话表。但是如果存在NAT会话表,总部也可以主动访问分支IPsec网关。
NAT会话保活:分支IPsec网关周期默认20s一次发送NAT保活报文,用于保留NAT设备上的NAT映射表,此时总部和分支都可以主动任意互访。
17.7 NAT穿越
17.7.1 NAT的类型
- 圆锥型:同一个内部tuple转换为同一个外部tuple
- 完全圆锥型:收到报文检查报文的目的地址与映射表中的外部tuple是否相同,相同则转发
- 限制圆锥型:收到报文之后,检查报文的目的地址与映射表中的外部tuple是否相同,还检查报文的源地址是否与映射表中的目的tuple是否相同。
- 端口限制圆锥型:收到报文之后,检查报文的目的地址与因设备表的外部tuple是否相同,还检查报文的源地址与端口号是否与目的tuple相同。
- 对称型:同一个内部tuple加上同一个目的tuple转为同一个外部tuple,否则不同的外部tuple;收到报文后检查项和端口限制圆锥型相同。
17.7.2 映射表
存在三个tuple:
- 内部tuple:私网IP地址和私网端口号(转换前的IP地址和端口号)
- 外部tuple:转换后的IP地址和端口号(公网IP地址和端口号)
- 目的tuple:私网设备经过NAT设备访问公网设备,报文的目的IP地址和端口号。
17.7.3 NAT穿越
NAT ALG技术:对应用层报文的内容进行识别,并修改应用层报文的内容,提前建立映射表。实现NAT穿越。典型应用是FTP协议。
参考命令:
[Huawei]nat alg all enable //使能所有可以支持的应用层协议支持ALG功能。
STUN技术:作用主要适用于获取NAT地址转换映射关系
- 内网设备发送绑定请求消息,给到STUN服务器,服务器收到请求消息后,从消息中读取设备的源地址(私网地址和端口号),以及报文的源地址(公网地址和端口号)的映射关系。将绑定关系回复给内网设备(客户端)
- 通过BGP协议相互学习对方的NAT信息,从而或者对方的映射信息,私网之间设备通信访问映射消息中的公网地址和端口号即可。
- 必须是要完全圆锥型NAT才能支持。