我有两台虚拟机
VM-1:我已经安装了 Strongswan 5.9。
VM-2:已安装 Strongswan 5.9,已安装freeradius
(radius 服务器)
我已经在两个 VM 上启动了 Strongswan systemctl start strongswan
。
当我从 VM-1 运行radtest <username> <password> <ipaddress> <NAS Port> <secretkey>
命令时,请求未经 aaa 服务器验证,但当我停止时,strongswan.service
我收到了Received Access-Accept
来自 aaa 服务器的响应。
我的问题是为什么 VM-1 在处于活动状态时无法通信strongswan.service
。我猜 IPsec 隧道没有建立。以下是我的swanctl.conf
文件。有人能帮我解决我遗漏的内容吗?如何建立隧道并访问 AAA 服务器。
VM-1
connections {
conn1 {
local_addrs = x.x.x.83
remote_addrs = x.x.x.171
local {
auth = psk
id = x.x.x.83
}
remote {
auth = psk
id = x.x.x.171
}
children {
vm1-to-aaa {
local_ts = x.x.x.83
remote_ts = x.x.x.171
start_action = trap
esp_proposals = aes192gcm16-aes128gcm16-prfsha256-ecp256-modp3072,aes192-sha256-ecp256-modp3072,default
mode = transport
}
}
version = 2
mobike = no
reauth_time = 10800
proposals = aes192gcm16-aes128gcm16-prfsha256-ecp256-ecp521,aes192-sha256- modp3072,default
}
}
secrets {
ike-1 {
id-1 = x.x.x.83
id-2 = x.x.x.171
secret = "thisissecret"
}
}
VM-2
connections {
conn2 {
local_addrs = x.x.x.171
remote_addrs = x.x.x.83
local {
auth = psk
id = x.x.x.171
}
remote {
auth = psk
id = x.x.x.83
}
children {
aaa-to-vm1 {
local_ts = x.x.x.171
remote_ts = x.x.x.83
start_action = trap
esp_proposals = aes192gcm16-aes128gcm16-prfsha256-ecp256-modp3072,aes192-sha256-ecp256-modp3072,default
mode = transport
}
}
version = 2
mobike = no
reauth_time = 10800
proposals = aes192gcm16-aes128gcm16-prfsha256-ecp256-ecp521,aes192-sha256-modp3072,default
}
}
secrets {
ike-1 {
id-1 = x.x.x.171
id-2 = x.x.x.83
secret = "thisissecret"
}
}
更新
当我发起一个命令时,swanctl -i conn1 -c vm1-to-aaa
我得到了 -
[IKE] giving up after 5 retransmits
[IKE] establishing IKE_SA failed, peer not responding
initiate failed: establishing CHILD_SA 'vm1-to-aaa' failed
以下是我的防火墙设置 -
public (active)
target: default
icmp-block-inversion: no
interfaces: ens32
sources:
services: cockpit dhcpv6-client http https ipsec ssh
ports: 443/tcp 8765/tcp 8088/tcp 1812/udp 1813/udp 500/udp 4500/udp
protocols:
forward: no
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule protocol value="ah" accept
rule protocol value="esp" accept
答案1
丢弃 IKE_SA_INIT 响应 没有匹配的 IKE ISA
其他一些服务也在监听 500/udp 端口
这听起来好像你运行了两个不同的 IKE 服务(我猜是 strongswan-starter 和 strongswan-swanctl?)
我如何强制 freeradius 使用 ipsec 隧道?或者该主机上安装的任何服务都应通过 ipsec 隧道进行验证
strongSwan 安装的内核“转换”(xfrm) 策略已强制所有出站流量执行此操作。所有与 local_ts/remote_ts 匹配的数据包流量选择器将在发送之前自动转换(在本例中,在 ESP 中加密)。swanctl -l
或ip xfrm
将显示哪些策略处于活动状态。
(由于您的 local_ts/remote_ts 流量选择器当前仅指定 IP 地址,全部这两个主机之间的流量将被加密。如果您希望将保护限制在特定端口,则需要将其添加到流量选择器中。
您可以使用 iptables 或 nftables 规则来丢弃入站非 IPsec 数据包(如果它们是意外到达或来自不需要的来源):
udp dport 1812 meta ipsec exists accept
udp dport 1812 reject
-p udp --dport 1812 -m policy --pol ipsec --dir in -j ACCEPT
-p udp --dport 1812 -j REJECT
制作 freeradius.service 可能会有用取决于strongswan,这样它甚至在 strongswan 启动之前都不会启动(并且至少安装了“陷阱”策略):
systemctl add-wants freeradius.service strongswan.service