我已经在这个网站和许多其他网站上搜索了几个小时,尽管人们遇到过类似的问题,但我还没有找到一个可以解决我的问题的方法。
我正在尝试使用 strongswan(通过 swanctl.conf)配置从我的计算机到服务器上的虚拟机的 IPsec 隧道。我之前已经建立了 IPsec 连接,但来自另一台设备。我使用的是相同的配置(swanctl.conf),但其他配置似乎不适合。我的机器(10.3.72.29)获取虚拟 IP(172.13.14.2),并使用其自己的虚拟 IP(192.168.122.2)与服务器的设备(10.3.218.62)建立连接
我当前的配置:
我的电脑(启动器)swanctl.conf:
connections {
ch_vti0 {
send_cert = always
encap = yes
vips = 0.0.0.0
remote_addrs = 10.3.218.62
local {
round = 1
id = 10.3.72.29
auth = psk
certs =
}
remote {
auth = psk
id = 10.3.218.62
certs =
}
children {
ch_vti0 {
mark_in = 42
mark_out = 42
remote_ts = 192.168.122.2/24
local_ts = dynamic
inactivity = 300s
mode = tunnel
esp_proposals = 3des-sha1-modp2048
updown = /usr/local/etc/swanctl/updown.sh 0
}
}
version = 1
proposals = des-md5-modp768, des-md5-modp1024, des-md5-modp1536
} }
secrets {
eap-xauth {
eap_id = test1
id = test1
secret = password
}
xauth-local {
id = test1
secret = password
}
ike-sec {
id = %any
secret = test
}
ike-local {
id = 10.3.72.29
secret = test
}
}
服务器的虚拟机swanctl.conf:
connections {
ch_vti0 {
send_cert = always
encap = yes
pools = pools_users
#aggressive = yes
local {
round = 1
id = 10.3.218.62
auth = psk
certs =
}
remote {
auth = psk
id = %any
certs =
}
children {
ch_vti0 {
local_ts = 192.168.122.2/24
inactivity = 120s
mode = tunnel
esp_proposals = 3des-sha1-modp2048
updown = /usr/local/libexec/ipsec/_updown iptables
}
}
version = 0
proposals = des-md5-modp768, des-md5-modp1024, des-md5-modp1536
} }
pools {
pools_users {
addrs = 172.13.14.2/24
}
}
secrets {
eap-xauth {
eap_id = test1
id = test1
secret = password
}
xauth-local {
id = test1
secret = password
}
ike-sec {
id = %any
secret = test
}
ike-local {
id = 10.3.218.62
secret = test
}
}
如果有人想知道 updown.sh 脚本如何创建 vti0 接口和路由
我的电脑上的 ipsec statusall 的结果:
Listening IP addresses:
10.3.72.29
fdc8:c2cb:4586:cc11::8f00:5a9
172.13.14.2
Connections:
ch_vti0: %any...10.3.218.62 IKEv1
ch_vti0: local: [10.3.72.29] uses pre-shared key authentication
ch_vti0: remote: [10.3.218.62] uses pre-shared key authentication
ch_vti0: child: dynamic === 192.168.122.0/24 TUNNEL
Security Associations (1 up, 0 connecting):
ch_vti0[1]: ESTABLISHED 13 minutes ago, 10.3.72.29[10.3.72.29]...10.3.218.62[10.3.218.62]
ch_vti0[1]: IKEv1 SPIs: 7fa996a60f87e923_i* 4faa8dbdd74a5927_r, rekeying in 3 hours
ch_vti0[1]: IKE proposal: DES_CBC/HMAC_MD5_96/PRF_HMAC_MD5/MODP_768
ch_vti0{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c393a4bb_i c392a387_o
ch_vti0{1}: 3DES_CBC/HMAC_SHA1_96/MODP_2048, 65772 bytes_i (783 pkts, 0s ago), 0 bytes_o, rekeying in 42 minutes
ch_vti0{1}: 172.13.14.2/32 === 192.168.122.0/24
服务器的设备:
Listening IP addresses:
192.168.122.2
10.3.218.62
fdc8:c2cb:4586:cc12::e49c:faf8
Connections:
ch_vti0: %any...%any IKEv1/2
ch_vti0: local: [10.3.218.62] uses pre-shared key authentication
ch_vti0: remote: [%any] uses pre-shared key authentication
ch_vti0: child: 192.168.122.0/24 === dynamic TUNNEL
Security Associations (1 up, 0 connecting):
ch_vti0[1]: ESTABLISHED 14 minutes ago, 10.3.218.62[10.3.218.62]...10.3.72.29[10.3.72.29]
ch_vti0[1]: IKEv1 SPIs: 7fa996a60f87e923_i 4faa8dbdd74a5927_r*, rekeying in 3 hours
ch_vti0[1]: IKE proposal: DES_CBC/HMAC_MD5_96/PRF_HMAC_MD5/MODP_768
ch_vti0{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c392a387_i c393a4bb_o
ch_vti0{1}: 3DES_CBC/HMAC_SHA1_96/MODP_2048, 0 bytes_i, 68880 bytes_o (820 pkts, 0s ago), rekeying in 44 minutes
ch_vti0{1}: 192.168.122.0/24 === 172.13.14.2/32
我的电脑上的路线:
root@malz:/usr/local/etc/swanctl# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.3.127.1 0.0.0.0 UG 100 0 0 enp2s0
10.3.0.0 0.0.0.0 255.255.0.0 U 100 0 0 enp2s0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 vti0
服务器设备上的路由:
root@server-automation-2:/etc/swanctl# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.3.127.1 0.0.0.0 UG 0 0 0 ens4
10.3.0.0 0.0.0.0 255.255.0.0 U 0 0 0 ens4
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 ens3
我已经允许 IPsec 使用的端口(500、4500、4500/udp、500/udp),尝试禁用它们两个上的防火墙,清除 iptables 并允许所有内容:
iptables -F
iptables -I INPUT -j ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
我还检查了丢弃数据包的 sysctl 参数(尤其是有关 icmp 请求的参数)
如果我尝试使用 tcpdump 捕获数据包,我可以看到我确实从服务器的设备接收到了它们(ping icmp 数据包),但我的 PC 没有响应
如果我尝试发送数据包,服务器的设备不会捕获它们,并且我的 PC 的 IPsec 接口 TX 错误数据包会增加。来自 ifconfig:
vti0: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1480
inet 172.13.14.2 netmask 255.255.255.255 destination 172.13.14.2
inet6 fe80::5efe:a03:481d prefixlen 64 scopeid 0x20<link>
tunnel txqueuelen 1000 (IPIP Tunnel)
RX packets 1063 bytes 89292 (89.2 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 57 dropped 0 overruns 0 carrier 57 collisions 0
总之,我已经在两台机器之间建立了 ipsec 连接,但我不明白为什么其中一台无法传输数据包,也不响应其他机器的 ping。我相当确定这一切的原因不是 ipsec 配置,因为我之前已经提到过我之前已经测试过它,它与完全相同的 conf 文件一起工作(不包括更改 ips)
如果有人能给我一点提示我将不胜感激。
答案1
故障排除步骤(从下到上):
运行 tcpdump。您应该会看到清晰和加密的数据包 (ESP)。
检查 ipsec 隧道两端之间的 ip 连接。
检查路由。默认情况下,strongswan 将附加路由安装到单独的路由表中。运行
ip -4 r ls table 220
。调查输出。要检查实际路由,请使用命令ip route get <dst>
。不要使用该route -n
命令 - 它会返回未完成的视图。ip -s -s xfrm state list
检查和的输出ip -s -s -d xfrm policy list
。它显示系统 SADB(安全关联数据库)和策略数据库。您的 vti 接口存在一些运营商错误。vti 接口上的运营商错误意味着:- 未找到合适的 ipsec 策略。请检查
ip x p get ...
命令。 - 未找到合适的路由。请检查
ip route get ...
命令。 - 未找到合适的 SA。请检查
ip x s ls
命令。
- 未找到合适的 ipsec 策略。请检查
检查防火墙。iptables 命令默认与
filter
表配合使用,但还有其他表(raw、nat、mangle)。最好使用命令iptables-save -c
列出完整规则集。更改 nat 规则后,使用命令清除 conntrack 表conntrack -F
。ipsec 流量通过防火墙链两次:一次以加密形式通过,另一次以清除形式通过。因此,请调查规则。您还可以插入目标规则以使用命令NFLOG
捕获流量。tcpdump -ni nflog...