使用 strongswan 在 IPSec 中使用 IPSec

使用 strongswan 在 IPSec 中使用 IPSec

我的服务器通过 IPSec 隧道与远程 LAN1 相连。现在我想设置第二条隧道到 LAN2,LAN2 连接到 LAN1 中的路由器,因此我需要在现有的 IPSec 隧道内创建 IPSec 隧道:

LAN0 -- server -- internet -- GW1 -- LAN1 -- GW2 -- LAN2
            ====== IPSEC1 =====
           ============ IPSEC2 ================

IPSEC1 运行正常,我可以 ping GW2,但 IPSEC2 无法正常工作。我无法更改 GW1 配置,但我可以完全控制服务器和 GW2。在服务器日志中,我看到:

sending packet: from (server)[500] to (GW2)[500] (420 bytes)
sending retransmit 2 of request message ID 0, seq 1

GW2 也是一样,两边都可以 ping 通,但是 IPSec 包没有传输。服务器上的 ipsec.conf:

left=%defaultroute
leftid=serverip(from LAN0)
leftsubnet=LAN0/24
right=GW2
rightsubnet=LAN2/24

在 GW2 上:

left=GW2
leftid=GW2
leftsubnet=LAN2/24
right=server(from LAN0)
rightid=%any
rightsubnet=LAN0/24

怎么了 ?

答案1

这在出厂时无法实现,因为 strongSwan 在其 UDP 套接字上安装了旁路策略,因此 IKE 流量被排除在任何 IPsec 处理之外。这就是为什么GW2无法访问它,因为 IKE 消息不会通过它发送,IPSEC1而是尝试直接发送。

有一个选项(charon.plugins.kernel-netlink.port_bypass) 会导致安装常规的、端口/协议特定的策略,而不是套接字策略来排除 IKE 流量。如果您在和之间协商额外的流量选择器,server用于GW1和的 IP 地址server以及GW2协议和端口 (UDP 500/4500),则可能可以隧道传输 IKE 流量(因为指定了 IP 地址,这些策略应该更具体,因此优先级高于旁路策略)。我从未尝试过,所以不确定它是否有效(处理此类嵌套隧道时内核可能存在其他问题)。

另一种方法(也未经测试)可能是使用XFRM 接口使用明确的路由将数据包定向到GW2与之关联的 XFRM 接口IPSEC1(甚至可能与套接字策略一起使用)。

相关内容