为什么IPsec隧道只需要3个IP xfrm策略?

我在一个strongswan (v5.2.0)实例(站点A)和一个RouterOS路由器(站点B)之间build立了一个站点到站点的IPsec隧道。 一切正常,为站点A( 10.10.0.0/16 )和B( 10.50.0.0/16 )设置的两个私有子网中的主机可以相互通信。

我不明白的是在站点A的路由器上的ip xfrm policy输出(公共IP混淆)。 这些策略是由strongswan创build的,我没有手动安装或修改它们:

 ip xfrm policy src 10.50.0.0/16 dst 10.10.0.0/16 dir fwd priority 2947 ptype main tmpl src <PUBLIC_IP_B> dst <PUBLIC_IP_A> proto esp reqid 1 mode tunnel src 10.50.0.0/16 dst 10.10.0.0/16 dir in priority 2947 ptype main tmpl src <PUBLIC_IP_B> dst <PUBLIC_IP_A> proto esp reqid 1 mode tunnel src 10.10.0.0/16 dst 10.50.0.0/16 dir out priority 2947 ptype main tmpl src <PUBLIC_IP_A> dst <PUBLIC_IP_B> proto esp reqid 1 mode tunnel 

每个input和输出都有一个策略,但只有一个用于转发(从站点B到站点A)。 但是我仍然可以ping通,例如10.10.0.89 10.50.4.11

 ping -R 10.50.4.11 PING 10.50.4.11 (10.50.4.11): 56 data bytes 64 bytes from 10.50.4.11: icmp_seq=0 ttl=62 time=10.872 ms RR: 10.10.0.89 10.50.0.1 10.50.4.11 10.50.4.11 10.50.4.11 10.10.0.2 10.10.0.89 

关于此路由跟踪的有趣部分是站点A的路由器( 10.10.0.2 )仅显示在从ping目标返回的路由上,而站点B的路由器( 10.50.0.1 )仅针对出站路由列出。

这似乎证实, 实际上在站点A的路由器上,通过IPsec隧道将10.10.0.0/16转发到10.50.0.0/16 并不需要转发策略 ,但是我不明白为什么。

感谢您的任何解释!

fwd策略不是由内核自动生成,而是由键控守护进程(在这种情况下是strongSwan)来安装。

它们需要允许stream量在隧道模式下进入和离开VPN网关后面的主机。

对于入口数据包,它是网关本身没有安装的IP地址,在解密后searchfwd策略。 对于本地stream量查找策略中的匹配。 如果没有发现数据包被丢弃。

对于VPN网关本身没有生成的出站stream量,将search正向策略。 如果数据包没有被encryption,如果没有find匹配的fwd策略,则不会失败。 如果stream量在两个隧道之间转发,则与其中一个安装的入站FW策略将作为另一个的出站FW策略,反之亦然。 之后,查找策略以决定是否隧道传输数据包。 这就是为什么往往不需要出口方向的正义政策。

但是,如果存在例如具有低匹配度的低优先级丢弃/阻塞策略(例如,如果没有build立隧道时避免明文通信通过网关),则出口方向上的FW策略是明确要求的,因为阻塞策略将否则删除所有未encryption的stream量。 这就是为什么strongSwan开始在5.5.0双向安装fwd策略的原因。


这个答案的前一个版本指出,单一(入站) 正向策略是对称的(即srcdst在任一方向工作)。 这是不正确的,但正如上面在很多情况下所解释的,这并不重要。