当IPSec隧道启动时,不能ping公共端点

我正在使用openswan通过IPSec连接两台机器。 隧道正常上线,我通过VPN连接到每个端点。

但是,当通道启动时,我将失去与公共端点IP地址的连接。 例如,从站点B公共地址4.5.6.7(反之亦然)ping站点A公共地址1.2.3.4失败。

当隧道启动时,我注意到有一些奇怪的东西可以解释这种行为。

#ip xfrm policy src 1.2.3.4/32 dst 4.5.6.7/32 dir out priority 2080 ptype main tmpl src 0.0.0.0 dst 0.0.0.0 proto esp reqid 0 mode transport 

我删除了剩余输出,因为它只包含有意义的条目(通过隧道连接的专用networking)。

任何想法我失踪?

我不完全熟悉xfrm语法,但它看起来像:

  • 当你的VPN没有启动的时候,你有一条到Internet的默认路由,所以你可以按你期望的方式ping通
  • 一旦VPN出现,XFRM规则就会增加一条策略路由,通过隧道将所有stream量发送到另一端。 在另一端可能有一个等同的规则,防止ICMP请求通过隧道实际到达相反的接口(在IP层上创build一种循环)。

您可能需要调整您的路由,以便:

  • 你的默认路由总是指向互联网
  • 您只能通过来自路由器后面的任何子网(不包括其他路由器接口)的隧道stream量发送。 或者,您可以添加静态路由(或策略路由),以强制将两个公用IP之间的stream量发送到隧道之外。

这可以归结为,你需要有一种方法来区分从路由器(朝着互联网)看到的默认路由,以及源自路由器后面的局域网子网的stream量所观察到的默认路由。 他们往往是完全不同的。