我在基础操作系统上创建了两个虚拟机,并在两个虚拟机之间启用了 IPSec。现在的问题是,一旦 IPsec 启动并在两个虚拟机之间建立 SA,我就无法通过基础操作系统 ping 或 ssh 到虚拟机,但虚拟机可以相互 ping。据我所知,IPsec 仅在指定的 IP 之间创建隧道,即来自 IP A 发往 IP B 的数据包会被加密,而来自 IP A 的所有其他数据包都可以不加密地通过。我这里遗漏了什么吗?使用的配置文件是:
conn example
left=192.168.54.220
leftcert=CA_Server
leftsubnet=192.168.54.1/24
leftsendcert=always
leftrsasigkey=%cert
right=192.168.54.221
rightca=%same
rightrsasigkey=%cert
rightsubnet=192.168.54.1/24
rightcert=CA_Client
authby=rsasig
ikev2=permit
auto=start
答案1
IPsec 仅在指定 IP 之间创建隧道,即来自 IP A 发往 IP B 的数据包将被加密,而来自 IP A 的所有其他数据包无需加密即可通过。我是不是漏掉了什么?
是的。IPSec 在两个指定端点和。但使用该隧道left
的right
流量(即加密的流量)位于两个指定的网络和。leftsubnet
就rightsubnet
您而言,两个路由子网彼此相同,这是行不通的。
如果您想要从 A 到 B 的流量在 A 加密并在 B 解密,反之亦然,您可以通过将 设置leftsubnet
为left
的地址(在您的情况下192.168.54.220/32
)(掩码很重要)来告诉 S/WAN,并通过将 设置rightsubnet
为right
的地址(在您的情况下)192.168.54.221/32
。
答案2
据我所知,IPsec 仅在指定 IP 之间创建隧道,即来自 IP A 发往 IP B 的数据包将被加密,而来自 IP A 的所有其他数据包无需加密即可通过。我这里遗漏了什么吗?
不!这就是您当前用例的要点。
我看到了子网密钥,但它们是同一个子网。我没有看过源代码,所以我不能明确地说这就是问题所在……但我认为这就是问题所在。如果不使用路由或 nat,您将需要传输模式。这是我几周前使用的点对点配置:
conn transportModeFirewallToPhoneServer
authby="psk"
auto="start"
compress="no"
ecn="no"
esp="aes128-md5"
ike="aes256-md5-modp1536"
ikelifetime="7800"
keyexchange="ike"
keylife="3600"
left="hq.myDynDNSDomainToMyOffice.com"
leftid="hq.myDynDNSDomainToMyOffice.com"
leftupdown="/usr/libexec/ipsec/updown classic"
pfs="yes"
pfsgroup="modp1536"
pmtu_discovery="no"
rekeymargin="540"
right="XXX.XXX.XXX.XXX"
rightid="XXX.XXX.XXX.XXX"
type="transport"
导入位是 left*、right* 和 type。除了这些键之外,您的配置看起来不错。另外,您说它已经建立了 VPN,因此显然您的 ike 和 auth 是正确的。