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

dor*_*ian 9 ip ipsec

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

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

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
Run Code Online (Sandbox Code Playgroud)

输入和输出各有一个策略,但只有一个用于转发(从站点 B 到站点 A)。但我仍然可以成功 ping,例如,10.50.4.1110.10.0.89

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
Run Code Online (Sandbox Code Playgroud)

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

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

感谢您的任何解释!

ecd*_*dsa 9

FWD政策不会自动被内核产生的,而是得到由键控守护进程(strongSwan在这种情况下)安装。

它们需要允许流量在隧道模式下转发到 VPN 网关后面的主机和从主机转发。

对于未安装在网关本身上的 IP 地址的入站数据包,在解密后搜索fwd策略。对于本地流量查找匹配策略。如果没有找到,则丢弃数据包。

对于不是在 VPN 网关本身上生成的出站流量,将搜索fwd策略。如果数据包没有加密,如果没有找到匹配的fwd策略也没有失败。如果流量两条隧道之间转发入FWD与一个安装政策将作为出站FWD为其他反之亦然政策。之后,查找策略来决定是否对数据包进行隧道传输。这就是为什么通常不需要出站方向的fwd策略的原因。

但是,如果存在例如匹配所有内容的低优先级丢弃/阻止转发策略(例如,如果没有建立隧道,则避免明文流量通过网关)在出站方向上明确需要转发策略,因为阻止策略将否则丢弃所有未加密的流量。这就是 strongSwan 开始在5.5.0 的两个方向上安装fwd策略的原因。


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


hth*_*hth 5

来自Andrej Stender 的这篇文章

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n
安全政策句法意义
\xe2\x80\x9c 输出策略\xe2\x80\x9d目录输出SP 作为传出数据包的选择器,选择哪些数据包要加密+封装,哪些不加密+封装
\xe2\x80\x9c输入策略\xe2\x80\x9d目录在SP 作为传入数据包的选择器,这些数据包已被解密+解封装,并且在系统上具有本地目标 IP
\xe2\x80\x9c转发策略\xe2\x80\x9d目录转发SP 作为已解密+解封装且目标 IP 不是本地的传入数据包的选择器,从而转发(路由)数据包
\n
\n

所以:

\n
    \n
  • out用于我们想要使用 IPsec 加密+封装的传出流量(本地和转发)。
  • \n
  • in用于fwd传入IPsec流量并应用于封装在 IPsec 内的数据包:\n
      \n
    • in适用于目的IP为本机的内部数据包
    • \n
    • fwd应用于应进一步转发的内部数据包
    • \n
    \n
  • \n
\n

编辑:我在 Linux 5.9.1 上进行了自己的本地实验ip xfrm,结果与 Andrej 的表匹配。

\n