我读过许多关于IPsec传输和隧道模式的比较,并且有一个明确的理解,当两个网关交换路由流量时,他们应该使用隧道模式。换句话说,传输模式应该只在两个主机之间使用(或者两个网关之间通信,而不是路由通信)。我试图理解的是,是否可以在网关到网关的设置中使用传输模式,即使不推荐。
我的背景如下:
LAN1 <-> GW1 <-> GW2 <-> LAN2
在我的例子中,我想保护GW1和GW2之间的链接(包含从LAN1到LAN2的IP通信量)。这是一个直接连接,不涉及路由,没有NAT,什么都没有。推荐隧道模式的所有原因(以及传输模式不适用)都不适用于我的情况--我可以不加密IP报头等等。我想节省开销字节,所以我想使用传输模式,即使在这种情况下不推荐使用传输模式。
我使用的Ubuntu与Strongswan软件包和IPsec在ESP模式下。
我的问题是:这有可能吗?
是否有一个“基本”的原因使它不可能,或只是“不推荐/通常不做/不在思科手册”,但可行?
有人有能工作的配置文件吗?
发布于 2018-08-31 16:12:24
问题是如何透明地应用IPsec。
用于标识安全关联( SA )的SPIs并不是全局唯一的,它们由接收主机分配,因此为了唯一地标识安全关联数据库(SAD)中的SA,使用元组SPI、协议(ESP或AH)和目标IP地址。这也是主机处理入站IPsec数据包的方式,默认情况下,它只是使用一个元组搜索SAD条目,以匹配接收到的数据包中的数据(还可以首先检查目标地址是否是本地地址,然后使用RFC 4301第5.2节描述的协议在SAD中进行查找)。
然而,在所描述的场景中,目的地不是主机本地的一个已知IP地址(就像隧道模式和主机到主机传输模式中的情况一样),相反,它可能需要整个范围的值,因为它可能是接收网关后面任何主机的地址。因此,无法使用默认查找。
所需的是忽略目标地址的查找(如果网关后面的主机使用IPsec并分配相同的SPI,可能会导致不匹配),或者对IP地址进行某种子网/范围匹配。
现在,就Linux内核而言,这两个选项都不可用。搜索SAD条目以查找入站IPsec数据包(__xfrm_state_lookup)的代码坚持匹配存储在SAD条目中的目标地址。因此,除非以改变目标地址处理方式的方式修改内核的源代码,否则不能避免使用隧道模式。
对于每个网关后面的单个IP地址,都存在所谓的甜菜模式,Linux内核(和strongSwan)支持这种模式。在这种模式下,数据包以传输模式(在网关地址之间)发送,但在处理之前/之后,IP报头中的地址将根据映射地址进行更改(协商的单地址通信选择器,详见草稿-nikander-esp-甜菜模式 )。
附带注意:在Linux内核中,实际上有一个名为XFRM_STATE_WILDRECV的SAs标志,它确实允许对IPv6进行一些通配符地址匹配,但仅通过一个单独的查找函数用于移动IPv6 (似乎是用来处理带有目的地选项和Type 2路由扩展报头的数据包)。
https://security.stackexchange.com/questions/192739
复制相似问题