我在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
每个输入和输出都有一个策略,但只有一个用于转发(从站点 B 到站点 A)。但我仍然可以成功 ping,例如,10.50.4.11
从10.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
关于此路由跟踪的有趣部分是站点 A 的路由器 ( 10.10.0.2
) 仅显示在从 ping 目标返回的路由上,而站点 B 的路由器 ( 10.50.0.1
) 仅针对传出路由列出。
这似乎证实了站点 A 的路由器实际上不需要转发策略10.10.0.0/16
来10.50.0.0/16
通过 IPsec 隧道转发,但我不明白为什么。
感谢您的任何解释!
fwd策略不是由内核自动生成的,而是由键控守护程序(在本例中为 strongSwan)安装的。
它们需要允许流量在隧道模式下转发到和来自 VPN 网关后面的主机。
对于指向未安装在网关本身上的 IP 地址的入站数据包,在解密后会搜索转发策略。对于本地流量,查找策略中的匹配项。如果没有找到,则丢弃数据包。
对于 VPN 网关本身未生成的出站流量,将搜索转发策略。如果数据包未加密,则如果没有找到匹配的转发策略,则不会失败。如果流量在两条隧道之间转发,则与一个安装的入站转发策略将充当另一个的出站转发策略,反之亦然。之后,查找出策略以决定是否通过隧道传输数据包。这就是为什么通常不需要出站方向的转发策略的原因。
但是,如果有一个低优先级的丢弃/阻止转发策略匹配所有内容(例如,如果没有建立隧道,避免明文流量通过网关),则明确需要出站方向的转发策略,因为阻止策略将否则丢弃所有未加密的流量。这就是为什么 strongSwan 开始使用5.5.0双向安装fwd策略。
该答案的先前版本指出,单一(入站)fwd策略是对称的(即src和dst在任一方向上工作)。这不是真的,但正如上面所解释的,在许多情况下这并不重要。
来自Andrej Stender 的这篇文章:
所以:
out
用于我们想用 IPsec 加密+封装的传出流量(本地和转发)。in
并fwd
用于传入的 IPsec流量,并应用于封装在 IPsec 内的数据包:in
应用于目的 IP 为此计算机的内部数据包fwd
应用于应进一步转发的内部数据包编辑:我在 Linux 5.9.1 上进行了自己的本地实验,
ip xfrm
结果与 Andrej 的表相匹配。这是因为 A 只想从 B 接收 IPsec 流量。
从 A 到 B 的 IPsec 流量将 A 的 IP 地址作为目标 IP 地址 - 因此它由
dir in
A 上的策略处理。从 IPsec 中提取封装的 IP 数据包后,它们被移交给内核以获得对传入 IP 数据包的标准 linux 处理-
xfrm policy dir fwd
这里不需要。src 10.10.0.0/16 dst 10.50.0.0/16 dir fwd ...
如果您还需要从 B 接收非 IPsec 流量,则可以添加关于 A 的策略。