• Author       :
  • Email         : vip_13031075266@163.com
  • Date          : 2021.01.24
  • Copyright : 未经同意不得转载!!!
  • Version    : ubantu-18.04.02
  • Reference

目录

一、前言

二、明确两个问题

三、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却不行?的更多相关文章

  1. vxlan vs GRE(三层组播和二层组播如何对应起来)

    www.huawei.com/ilink/cnenterprise/download/HW_401028 http://feisky.xyz/sdn/basic/vxlan.html 华为的vxlan ...

  2. 组播(Multicast)传输

    组播(Multicast)传输: 在发送者和每一接收者之间实现点对多点网络连接. 如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包.它提高了数据传送效率.减少了骨干网络出现拥 ...

  3. IP组播

    1  IP组播基础 IP组播技术有效地解决了单点发送.多点接收的问题.组播源只发送一份数据,被传递的信息在距组播源尽可能远的网络节点才开始被复制和分发,并且只发送给需要该信息的接收者.  说明: 本章 ...

  4. IP组播技术

      1  概述 1.1  产生背景 传统的IP通信有两种方式:一种是在源主机与目的主机之间点对点的通信,即单播:另一种是在源主机与同一网段中所有其它主机之间点对多点的通信,即广播.如果要将信息发送给多 ...

  5. HCNP Routing&Switching之组播技术PIM-SM 稀疏模式

    前文我们了解了组播路由协议PIM以及PIM-DM密集模式相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16084310.html:今天我们来聊一聊PI ...

  6. IPv4组播通信原理

    2011-05-08 21:21:14 标签:组播 vin_do,vin_do学习笔记,笔记 休闲 职场 摘自网络,感谢原作者 摘要: 本文试图成为学习TCP/IP网络组播技术的入门材料.文中介绍了组 ...

  7. IPSec组播概要

    IPSec作为主流IP安全协议之一,在单播环境下,特别是在VPN场景中应用广泛.但是在组播环境貌似看到的不多,通过RFC4301了解到IPSec首先是支持组播的,即通过手动配置的方式可以实现组播包加密 ...

  8. HCNP Routing&Switching之组播技术-IGMP-Snooping

    前文我们了解了组播协议IGMP相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15700550.html:今天我们来聊一聊二层交换机处理组播报文所面临的 ...

  9. HCNP Routing&Switching之组播技术-组播路由协议PIM

    前文我们了解了组播技术中组播分发树相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16019334.html:今天我们来聊一聊组播路由协议PIM相关话题 ...

随机推荐

  1. 痞子衡嵌入式:ARM Cortex-M内核那些事(9.1)- 存储保护(MPU - PMSAv6/7)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M存储保护模块(MPU). <ARM Cortex-M内核MCU开发那些事>的内核篇连载最早是 201 ...

  2. 资源适配【eg: values-sw600dp的命名和drawable-400dpi的命名】

    通过getResources().getConfiguration().smallestScreenWidthDp获取即可 这篇文章讲了values-sw的适配: https://blog.csdn. ...

  3. iptables中实现内外网互访,SNAT和DNAT

    目录 一.SNAT原理与应用 二.DNAT原理与应用 DNAT转换:发布内网web服务 DNAT转换:发布时修改目标端口 三.防火墙规则的备份和还原 四.linux抓包 一.SNAT原理与应用 ① S ...

  4. C语言复习(六)----typedef 的作用

    typedef的作用 重命名变量:typedef unsigned int Uint;//可以使用Uint代替unsigned int 定义新的数据类型 typedef struct Books{ c ...

  5. 优秀Android开发简历都是这么写,你学会也可以进大厂

    最近收了很多程序员的简历,工作经验从1年到十几年不等.发现一个问题,工作经验范围差不多的程序员,简历看起来也差不多... 为啥程序员的简历如此统一?正好最近看到一个分享也分析了这个问题,结合我个人的一 ...

  6. 使用各类BeanUtils的时候,切记注意这个坑!

    在日常开发中,我们经常需要给对象进行赋值,通常会调用其set/get方法,有些时候,如果我们要转换的两个对象之间属性大致相同,会考虑使用属性拷贝工具进行. 如我们经常在代码中会对一个数据结构封装成DO ...

  7. 树莓派远程连接工具VNC使用教程

    树莓派远程连接工具VNC使用教程 背景故事 树莓派作为一款迷你小主机,大部分的使用场景都会用到远程调试,远程调试用到最多的方式一般就是VNC和SSH,VNC是远程桌面型的远程方式,简单来说就是用Win ...

  8. spring boot中连接数据库报错500(mybatis)

    spring boot中连接数据库报错500(mybatis) pom.xml中的依赖 <!-- 集成mybatis--> <dependency> <groupId&g ...

  9. 【Vulhub】Rsync未授权访问漏洞复现

    Rsync未授权访问 Rsync简介 rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息 ...

  10. linux下安装redis-6.0.6、配置redis远程连接

    官网下载安装包redis-6.0.6.tar.gz https://redis.io/ 上传到服务器之后使用tar -zxvf进行解压,解压后如下: 进入解压的文件之后我们可以看到他的配置文件(配置文 ...