解决 strongswan ipsec 中 %any 失败的问题

解决 strongswan ipsec 中 %any 失败的问题

我在 2 个 Linux 机器之间配置 ipsec。由于我们的产品连接到不同的空间时,其 ip 可能会不同。我使用了%any 为右从那时起,我就不能向上我的 ipsec 传输模式连接。但是当我给出具体 IP 时,ipsec 已正确建立。

我确认连接失败是由于%任何因为看到了/var/log/syslog中的日志,日志内容如下:

无法解决 %any,启动已中止

配置文件ipsec配置文件曾是:

配置设置
charondebug="ike 2,knl 2,cfg 2,net 2,esp 2,dmn 2,100"

conn%默认
ikelifetime = 8h
lifetime = 12h
keyingtries =%forever
authby = secret
keyexchange = ikev1

conn host_to_host
类型 = 传输
authby = 秘密
ike = aes128-sha256-modp2048,aes256-sha256-modp2048
esp = aes128-sha256,aes256-sha256
left = xxxx
leftsubnet = xxxx / 32
right = %any
rightsubnet = 0.0.0.0/0
assault = no
auto = start
dpddelay = 30s
dpdtimeout = 120s
dpdaction = restart

有人能说说为什么会发生这种情况吗?
当我使用 auto=route 时,系统崩溃了。

答案1

我使用 %any 来获得权限。从那时起,我就无法建立 ipsec 传输模式连接。但是当我提供特定 IP 时,ipsec 已正确建立。

IPsec 与 TLS 或 SSH 一样,需要主机之间进行主动协商才能建立连接。

auto=start表示“主动启动与远程主机的 IKE 交换”,因此它需要一个可以与之通信的实际单个远程主机地址(IP 或 DNS)——要求程序“开始与 %any 协商 IKE”是没有意义的。这就像尝试通过 SSH 连接到 255.255.255.255。

当我使用时auto=route,系统崩溃了。

它没有关闭;它没有响应,因为它正在尝试与您协商 IKE。auto=route不仅使主机接受传入的 IKE,还使其在与选择器匹配的所有传出流量上触发 IKE – 并且由于您使用了 %any,因此它当然会同样适用于两个框之间的流量在盒子和你的 SSH 客户端之间进行通信。

最后,你要求的是一个不可能的组合:你希望两台主机彼此之间使用 IPsec,但你希望两台主机不是使用 IPsec 来对抗其他系统(例如你的 PC),并且你向它们提供无法区分哪个就是哪个。

您可以使用auto=add(您之前一直使用的默认模式),使主机仅充当被动 IKE 响应者(允许它们从 %any 接收 IKE 握手,而不会在出站流量上触发 IKE),但至少主机需要配置其他主机的精确地址,以便它知道在与该主机通话时需要启动 IKE,但在与其他主机通话时则不需要。

或者,您可以使用auto=route%any,但随后您必须将选择器限制为特定协议或 TCP/UDP 端口;例如%dynamic[gre]%dynamic[tcp/23],这样它就不会捕获不打算进行 IPsec 的流量。


strongSwan 中的 ipsec.conf 格式几年前就被弃用了。新的配置应该通过 进行/etc/swanctl

相关内容