通过环回实现 IPsec 的 GRE 隧道

通过环回实现 IPsec 的 GRE 隧道

我正在真的尝试使用 GRE over IPsec 隧道建立 VPN 连接非常困难。问题是它涉及某种“环回”连接,我对此并不了解——更不用说能够配置了——我能找到的唯一帮助与配置 Cisco 路由器有关。

我的网络由一台路由器和一台运行 Debian Linux 的单台主机组成。我的任务是在 IPsec 基础架构上创建一个 GRE 隧道,该隧道专门用于在我的网络(我允许配置)和远程网络之间路由多播流量,对于该网络,我只携带一个包含一些设置信息(IP 地址和 IPsec 的阶段信息)的表单。目前,只需在此单台主机和远程网络之间建立通信即可,但将来,将流量路由到我网络上的其他计算机将是理想的选择。

正如我所说,这个 GRE 隧道涉及一个“环回”连接,我不知道如何配置它。根据我以前的理解,环回连接只是一个主要用于测试目的的本地伪设备,但在这种情况下,它可能是我不了解的更具体的东西。

我已经设法使用racoon和正确建立了 IPsec 通信ipsec-tools,并且我相信我熟悉使用 来创建隧道和向接口添加地址ip,因此重点是 GRE 步骤。最糟糕的是远程对等点不响应 ping 请求,并且由于流量的加密性质,常规设置的调试非常困难。

涉及两对 IP 地址:一对用于 GRE 隧道对等连接,一对用于“环回”部分。还涉及一个 IP 范围,该范围应为 VPN 内主机的最终 IP 地址。

我的问题是:如何(或是否)可以完成此设置?我是否需要一些特殊软件或其他守护程序,或者 Linux 内核是否处理 GRE/IPsec 隧道的各个方面?

如果任何额外的信息有用,请告知我。

任何帮助是极大的赞赏。

答案1

再次,我设法解决了这个问题(但并没有像原始问题和这个答案所假设的那样花太长时间 :)。我花了将近一个月的时间研究这个问题的解决方案,我将把它记录在这里,以防有人碰巧遇到同样的问题。

实际上,环回接口确实是我所知道的:分配给机器上始终处于打开状态的虚拟接口的地址。远程 GRE 路由器和我的路由器之间的连接问题是由于另一个问题造成的:GRE 保活数据包

事实证明,远程 Cisco 路由器实际上通过隧道向我发送了奇怪的 GRE 封装数据包。这些数据包封装其他GRE 数据包,而这些数据包则携带协议号。快速浏览表明这些数据包是GRE 保活数据包,它们是定期发送的(在我的情况下,几乎每 10 秒发送一次),并且如果由对等方正确地解封装和重新路由,则应该回显给发送者,因为最内层的目标地址包含发送者的源地址。

事实是,Linux 内核没有正确地将解封装的保持活动数据包再次送入路由链。如果这样做,数据包将被重新路由回发送方,而不会产生进一步的复杂情况。相反,它将数据包传送到用户空间,这样就可以编写一个简单的程序,以原始模式监听此类数据包,并将它们回传给发送方。运行此程序并将几个数据包回传给 Cisco 路由器,GRE 隧道在远端“启动”,PIM 路由器交换hellos,我终于可以监听我期望监听的多播流量了。

我从这次经历中学到了很多东西,特别是在处理模糊协议(或者至少是模糊协议)时特征),您根本不能简单地依赖同行知识。在这方面,没有一个远程网络分析师能够帮助我,可能是因为这种行为没有记录。

答案2

我不确定多播是如何工作的,但我可以告诉你我是如何让 GRE over IPSec 工作的。大多数 Linux 安装都支持 GRE,因此你不需要为它安装任何额外的东西。


我创建了一个主机到主机的 IPSec 隧道,然后按照此处提到的步骤创建了该隧道。 http://lartc.org/lartc.html#LARTC.TUNNEL.GRE

记得启用数据包转发:)

相关内容