我的服务器通过 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
(甚至可能与套接字策略一起使用)。