通过IPsec与回送的GRE隧道

我正在尝试使用GRE over IPsec隧道来build立VPN连接。 问题在于它涉及某种我不明白的“回送”连接 – 更不用说能够configuration了,唯一的帮助就是configurationCisco路由器。

我的networking由一台运行Debian Linux的路由器和一台主机组成。 我的任务是在IPsec基础设施上创build一个GRE隧道,这个隧道特别用于在我允许configuration的networking和一个远程networking之间路由多播信息stream,对于这个远程networking,我只需要一个包含一些设置信息(IP IPsec的地址和相位信息)。 目前只需要在单个主机和远程networking之间build立一个通信就足够了,但是将来需要把stream量路由到我的networking上的其他机器上。

正如我所说的这个GRE隧道涉及一个“回环”连接,我不知道如何configuration。 从我以前的理解来看,回送连接只是一个本地的伪设备,主要用于testing目的,但在这种情况下,它可能是更具体的,我不知道的。

我已经设法使用racoonipsec-tools正确build立IPsec通信,我相信我熟悉创build隧道和使用ip添加地址到接口,因此重点放在GRE步骤上。 最糟糕的部分是远程对等端不响应ping请求,并且由于stream量的encryption特性,所以一般设置的debugging非常困难。

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

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

请告诉我,如果任何额外的信息可能是有用的。

任何帮助是极大的赞赏。

再次,我已经设法修补这个问题(但不要太长,因为原来的问题,这个答案假设是:)。 我已经经历了将近一个月的时间来研究这个问题的解决scheme,为了防止任何人遇到相同的问题,我会把它留在这里。

实际上,回送接口实际上是我知道的:一个地址分配给一个虚拟机,总是在一台机器上的接口。 远程GRE路由器和我的路由器之间的连接问题是由于另一个问题: GRE保持活动的数据包

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

事实是,Linux内核没有正确地将已解封装的keep-alive数据包重新input到路由链中。 如果是这样的话,数据包将被重新路由回发送者,而不会有其他复杂的问题。 相反,它将数据包传递给用户空间,这样就有可能编写一个简单的程序,在原始模式下监听这些数据包,并将它们回显给发件人。 运行这个程序,向Cisco路由器回送几个数据包,GRE隧道在远端进行“升”,PIM路由器交换了hello ,我终于可以收听我期望收听的组播stream量。

我从这个经验中学到了很多东西,尤其是在混淆不明确的协议(或者至less隐藏协议特征 )的时候,你不能简单地指望对等知识。 在这方面没有任何一个单独的networking分析师可以帮助我,可能是因为这种行为没有logging。

我不知道如何组播如何工作,但我可以告诉你我是如何通过IPSec工作的GRE。 大多数Linux安装支持gre,所以你不需要额外安装任何东西。

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

记得启用包转发:)