你好,在同一台服务器上,我使用 OpenVPN 和 Strongswan 来互连两个网络
- 通过 strongswan 填充的路线不太具体(10.0.0.0/8)
- 通过 openvpn 填充的路由更具体(10.1.1.0/24)
最初,我认为这不会成为问题,因为我只希望 /24 通过 openvpn 进行路由。但是,由于 Strongswan 使用路由表 220,因此所有 10.1.1.0/24 流量都发送到 Strongswan,导致 openvpn 隧道不可用。
我尝试使用 charon.routing_table=0,这会让 Strongswan 使用主路由表。现在路由表似乎正确,但奇怪的是,流量仍然没有发送到 openvpn 隧道。
即使我手动删除路由 10.0.0.0/8(ip route del 10.0.0.0/8),strongswan 似乎也会捕获所有到 10.1.1.0/24 的流量,但我不明白为什么。
我如何让 strongswan 避免捕获路由到其他设备(openvpn 的 tun0)的更具体的子网流量?
答案1
默认情况下,strongSwan 以基于策略的模式运行。这意味着内核将根据协商的 IPsec 策略自动加密流量。由于 的策略10.0.0.0/8
涵盖了 的流量,因此10.1.1.0/24
它将由 IPsec 堆栈处理。
为了避免这种情况,您需要为子网配置旁路策略10.1.1.0/24
,请参阅这里例如。由于这还会安装 throw routes,因此您可以让 strongSwan 再次在表 220 中配置路由。
另一个选择是更改为基于路由的 IPsec 方法例如通过 XFRM 或 VTI 接口。这样,只有路由到特定接口的流量才会由 IPsec 处理(不过,IPsec 策略仍然适用于该流量,因此您不能通过该接口发送任何流量)。