为何GRE可以封装组播报文而IPSEC却不行?
|
目录
五、说明
一、前言
这个问题可能是在学习IPsec协议时,比较有意思的话题。而一般得到的答案是:IPsec在协议设计时定位便是一个点对点的协议,这个特点可以通过Ipsec SA看出:IPsecSA通过三元组来唯一标识(目的IP,SPI, 协议号),目的IP都是单播地址,因此一个SA只能对应一个V.P.N节点,总而言之:ipsec不支持保护组播报文和广播报文。提出的解决办法一般是:GRE over Ipsec。
理由是:GRE虽然同样是点对点协议,却可以封装组播报文和广播报文,但是不具备机密性和源认证等特点;IPsec协议虽然具有机密性和完整性保护的优势,但是无法封装组播报文和广播报文,因此结合两个协议的优势,GRE over IPSec应运而生,这样既可以封装单播、组播、广播报文,还可以加密数据流。
那么问题来了:既然都是点对点的协议,为何IPsec不能封装广播组播报文,而GRE却可以? 这个问题我寻觅了比较久,但是没有让我满意的答案,更多的是:用结论来回答我的原因,然而结论我知道,原因不知道,答非所问。还是自己整理下吧,以下很多是个人观点,如有错误,欢迎指正
二、明确两个问题
- 问题一:IPsec是否支持组播?
- 问题二:IPsec是否可以保护组播、广播报文?
这两个问题可以认为是不同的问题,因为难度不一样,强调的对象不同。
首先说明问题一:
它更强调IPsec协议是否可以只通过一条隧道和多个对端建立V.P.N,本端不需要关心有几个对端设备,他们对我而言共用一个IpsecSA。 这个问题根本原因是ipsec协议设计的问题,SA不支持一对多的模式,也是网上说的比较多的原因。当前普通ipsec协议完全不支持该功能(支持组播ipsec协议已有RFC标准,没有看过,暂不讨论)
然后讨论问题二:
它不要求ipsec隧道与多个对端建立V.P.N,只是希望能够在隧道中传输组播、广播报文;这个问题原因不能完全归咎于ipsec协议本身,ipsec是否支持此功能与实现方式密切相关。ipsec协议有什么实现方式呢?
一般情况下,IPsec存在两种实现方式:
- 基于ACL
- 基于虚拟隧道接口
2.1 基于ACL
基于ACL(Acess Control List,访问控制列表)的实现,可以对ipsec流量进行更加精确的控制,如:使用报文IP地址、UDP/TCP协议、端口号、应用层协议等进行精确控制,使得ipsec更加智能化。它将引用了 ACL 的 IPsec 安全策略应用到接口上(包括物理接口和虚接口)后,该接口上匹配 ACL 的报文将会受到 IPsec 保护。
2.2 基于虚拟隧道接口
在隧道接口上应用 IPsec 安全框架后,路由到该隧道接口的报文都会受到 IPsec 的保护,同时还可以支持对组播流量、广播流量的保护。此方式建立的 IPsec 的封装模式必须为隧道模式。 该类应用通常也被称为在 VTI(Virtual Tunnel Interface)上应用 IPsec
注意:这种方式是支持保护组播、广播流量的。它的原理与GRE支持组播、广播报文应该是相同的。
从这两种实现方式来看,IPsec协议封装组播、广播报文也不是不可能的,既然是这样那就不能说人家协议本身不能封装组播广播报文。
接下来说明下GRE为啥可以封装组播、广播报文。这同样是基于虚接口的ipsec可以封装组播广播报文的原因。
三、GRE封装原理
以前整理的一篇基础GRE文章:GRE隧道协议
GRE协议理论并不复杂,也没有说支持组播的原因。于是我从Linux系统自带的gre隧道功能出发,搭建GRE隧道配置使用环境,来分析其原因。基本环境搭建可参考此文ubantu与CentOS虚拟机之间搭建GRE隧道
使用Linux操作系统自带的GRE功能配置隧道有以下几点注意事项(通过配置总结下来的):
- 添加GRE隧道实际上就是添加新的虚拟隧道接口
- 添加GRE隧道时必须指定隧道的本端对端隧道地址
- 需要为新添加的虚拟隧道接口配置IP地址
- 如果GRE隧道连接两个不同的子网,需要添加一条静态路由:目的IP为对端子网,下一条为虚拟隧道接口
- GRE本端对端隧道地址相同的只能添加一个虚接口(即两个不同的虚接口,GRE隧道地址相同是不允许滴)
- 不能为同一个虚接口配置不同的GRE隧道
通过上面总结的配置注意事项,可以得出一个结论:每一条GRE隧道都唯一绑定一个虚拟隧道接口,反之亦然。
这能说明什么呢? 说明GRE数量和虚拟隧道接口的数量是一一对应的。这样的话GRE封装组播功能便不是梦。基于此前提,我绘制了一个简单的图(如果是组播报文,则应该查询组播路由表):
组播报文是需要查询组播路由表来确定向哪些接口转发组播报文。通过查询组播路由表,路由器会将组播报文复制多份,然后分别转发到不同接口。也就是说转发到GRE虚接口上的报文已经是组播分发后的报文,由于GRE虚接口上只有一种封装策略(上文中提到的一一对应关系),因此直接按照策略封装报文即可,无需关心报文的类型(单播、组播、广播等)。因此GRE支持封装组播报文的原因在于:GRE处理在组播报文分发之后,而GRE的封装不会影响其他接口处理组播报文,因为该接口持有的是组播报文副本中的一个,互不影响。 从上图的结构中也可以看出报文可以进行重复多次隧道封装。
四、IPsec为什么不行?
上面已经说过,不是IPsec不行,而是使用ACL的方式不行,采用虚拟隧道接口的方式是可以滴。使用虚接口的原理和GRE封装原理相同,但需要保证一点:每一个虚接口有且只有一个封装策略,即不能多条ipsec隧道共用一个虚拟隧道接口。这里有一点蛮有意思的:以下面的处理架构,GRE over Ipsec 或者 Ipsec over GRE都是比较简单实现的,只要通过路由来控制引流即可。
那么基于ACL的为什么不行能?
基于ACL实现的ipsec虽然同样可以配置到物理接口,虚拟隧道接口上,但是由于存在过滤条件,因此只有满足过滤条件的才能进行ipsec封装。除此之外,即使组播报文满足过滤条件,但是该接口上可能配置有多个IPsec的ACL过滤条件,组播报文可能同时满足其中的多个ACL, 那么采用哪种条隧道的SA进行封装便成了问题,由于现阶段标准IPsec的SA不支持一对多,无论采用哪一条隧道的SA进行封装,都会导致组播报文变成单播报文,造成组播报文功能丢失。因此说基于ACL方式实现的ipsec无法进行组播、广播报文的封装。
五、说明
关于ipsec和GRE封装组播报文的解析,纯属个人观点。如果面试回答错误,我可不负责哈。
为何GRE可以封装组播报文而IPSEC却不行?的更多相关文章
- vxlan vs GRE(三层组播和二层组播如何对应起来)
www.huawei.com/ilink/cnenterprise/download/HW_401028 http://feisky.xyz/sdn/basic/vxlan.html 华为的vxlan ...
- 组播(Multicast)传输
组播(Multicast)传输: 在发送者和每一接收者之间实现点对多点网络连接. 如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包.它提高了数据传送效率.减少了骨干网络出现拥 ...
- IP组播
1 IP组播基础 IP组播技术有效地解决了单点发送.多点接收的问题.组播源只发送一份数据,被传递的信息在距组播源尽可能远的网络节点才开始被复制和分发,并且只发送给需要该信息的接收者. 说明: 本章 ...
- IP组播技术
1 概述 1.1 产生背景 传统的IP通信有两种方式:一种是在源主机与目的主机之间点对点的通信,即单播:另一种是在源主机与同一网段中所有其它主机之间点对多点的通信,即广播.如果要将信息发送给多 ...
- HCNP Routing&Switching之组播技术PIM-SM 稀疏模式
前文我们了解了组播路由协议PIM以及PIM-DM密集模式相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16084310.html:今天我们来聊一聊PI ...
- IPv4组播通信原理
2011-05-08 21:21:14 标签:组播 vin_do,vin_do学习笔记,笔记 休闲 职场 摘自网络,感谢原作者 摘要: 本文试图成为学习TCP/IP网络组播技术的入门材料.文中介绍了组 ...
- IPSec组播概要
IPSec作为主流IP安全协议之一,在单播环境下,特别是在VPN场景中应用广泛.但是在组播环境貌似看到的不多,通过RFC4301了解到IPSec首先是支持组播的,即通过手动配置的方式可以实现组播包加密 ...
- HCNP Routing&Switching之组播技术-IGMP-Snooping
前文我们了解了组播协议IGMP相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15700550.html:今天我们来聊一聊二层交换机处理组播报文所面临的 ...
- HCNP Routing&Switching之组播技术-组播路由协议PIM
前文我们了解了组播技术中组播分发树相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16019334.html:今天我们来聊一聊组播路由协议PIM相关话题 ...
随机推荐
- Mysql命令语句
常用的管理命令 SHOW DATABASES; //显示当前服务器下所有的数据库 USE 数据库名称; //进入指定的数据 show tables; ...
- SpringCloud-Alibaba 最新的 依赖版本管理组合以及 整合gateway遇到的问题
一般来说,cloud 与 alibaba 拥有版本组合说明文档wiki,不过这里可以做一个最新的组合的分享. <dependencyManagement> <dependencies ...
- 数据结构与算法 java描述 第一章 算法及其复杂度
目录 数据结构与算法 java描述 笔记 第一章 算法及其复杂度 算法的定义 算法性能的分析与评价 问题规模.运行时间及时间复杂度 渐进复杂度 大 O 记号 大Ω记号 Θ记号 空间复杂度 算法复杂度及 ...
- alpakka-kafka(6)-kafka应用案例,用户接口
了解了kafka原理之后,对kafka的的应用场景有了一些想法.在下面的一系列讨论中把最近一个项目中关于kafka的应用介绍一下. 先介绍一下使用kafka的起因:任何进销存系统,销售开单部分都应该算 ...
- Vulhub-Phpmyadmin 4.8.1远程文件包含漏洞
前言:Phpmyadmin是一个用PHP编写的免费软件工具,旨在处理Web上的MySQL管理. 该漏洞在index.php中,导致文件包含漏洞 漏洞环境框架搭建: cd vulhub-master/p ...
- gRPC学习之一:在CentOS7部署和设置GO
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- SpringBoot 如何进行参数校验,老鸟们都这么玩的!
大家好,我是飘渺. 前几天写了一篇 SpringBoot如何统一后端返回格式?老鸟们都是这样玩的! 阅读效果还不错,而且被很多号主都转载过,今天我们继续第二篇,来聊聊在SprinBoot中如何集成参数 ...
- [SQL]基本表的定义及其完整性约束
在使用数据库时,绝大多数时间都是在使用基本表. SQL Server数据类型 截图来源: https://www.w3school.com.cn/sql/sql_datatypes.asp 创建基本表 ...
- Spring Cloud Aliaba - Ribbon
Ribbon(有关介绍见RestTemplate末尾) Ribbon负载均衡实现策略 Ribbon负载均衡实现策略通过接口IRule进行实现,默认使用ZoneAvoidanceRule规则进行负载均衡 ...
- Docker部署ELK之部署filebeat7.6.0(3)
1. filebeat介绍 Filebeat是用于转发和集中日志数据的轻量级传送工具.Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logsta ...