我正在尝试使用 strongswan 设置 ipsec 隧道,使用了一些教程,到目前为止一切顺利,但实际上并没有通过隧道进行通信。隧道已建立,但两台机器之间没有任何传输。在说隧道已建立之前,有以下错误消息:
received netlink error: Network is unreachable (101)
unable to install source route for 172.16.50.1
出现此错误后,系统显示:
CHILD_SA thevpn{9} established with SPIs c7c22d4e_i ce2c5536_o and TS 172.16.50.0/24 === 192.168.220.0/24
connection 'thevpn' established successfully
我的设置(均为 Ubuntu 22.04 LTS)
服务器 A IP: 167.235.xx 私有IP: 172.16.50.1
服务器 B IP:138.201.xx 私有IP:192.168.220.1
服务器A上的配置(/etc/ipsec.conf):
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn thevpn
type=tunnel
auto=start
keyexchange=ikev2
authby=secret
left=167.235.x.x
leftsourceip=172.16.50.1
leftsubnet=172.16.50.0/24
right=138.201.x.x
rightsubnet=192.168.220.0/24
ike=3des-md5-modp2048!
esp=3des-md5-modp2048!
aggressive=no
keyingtries=%forever
ikelifetime=28800s
lifetime=3600s
dpddelay=15s
dpdtimeout=20s
dpdaction=restart
服务器B上的配置(/etc/ipsec.conf):
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn thevpn2
type=tunnel
auto=start
keyexchange=ikev2
authby=secret
right=167.235.x.x
rightsubnet=172.16.50.0/24
leftsourceip=192.168.220.1/24
left=138.201.x.x
leftsubnet=192.168.220.0/24
ike=3des-md5-modp2048!
esp=3des-md5-modp2048!
aggressive=no
keyingtries=%forever
ikelifetime=28800s
lifetime=3600s
dpddelay=15s
dpdtimeout=20s
dpdaction=restart
当我在服务器 B 上建立连接时,发生了以下情况:
stablishing CHILD_SA anode6{3}
generating CREATE_CHILD_SA request 3 [ SA No KE TSi TSr ]
sending packet: from 138.201.x.x[4500] to 167.235.x.x[4500] (452 bytes)
received packet: from 167.235.x.x[4500] to 138.201.x.x[4500] (452 bytes)
parsed CREATE_CHILD_SA response 3 [ SA No KE TSi TSr ]
selected proposal: ESP:3DES_CBC/HMAC_MD5_96/MODP_2048/NO_EXT_SEQ
**received netlink error: Network is unreachable (101)
unable to install source route for 192.168.220.1**
CHILD_SA anode6{3} established with SPIs c5d3467d_i ca5f85dc_o and TS 192.168.220.0/24 === 172.16.50.0/24
connection 'thevpn2' established successfully
服务器 A 也类似,错误相同,只是本地 IP 不同(172.16.50.1)。没有成功建立任何连接。PING 到 172.16.50.1 只会返回大量空白。您在上面的日志中看到的错误以及我在此处再次复制的错误在服务器 A 或服务器 B 上是相同的(只是私有 IP 不同)
received netlink error: Network is unreachable (101)
unable to install source route for 192.168.220.1
我已经在单独的文件中配置了每台服务器上的网络/etc/netplan/50-my-network.yaml,其内容如下:
network:
version: 2
ethernets:
enp0s31f6:
addresses:
- 192.168.220.1/24:
label: enp0s31f6:ipsec
dhcp4: no
dhcp6: no
在服务器 B 上使用 PING 192.168.220.1 工作正常。(在服务器 A 上使用 PING 172.16.50.1 也一样).. 我只是不知道(好吧,这里的线索是路由没有安装,但我不知道为什么)。为什么这不起作用,为什么它在两台不同的机器上给出完全相同的错误。
我的猜测是,我在 netplan 中安装本地 IP 的方式有些错误?但为什么会这样呢?它是可 ping 的,NGINX 等服务可以绑定到配置的本地 IP(172.16.50.1),并且还可以正确响应,为与使用外部 IP 调用时不同的网站提供服务。
有人知道吗?谢谢!
编辑:1
将 netplan 配置更改为:
network:
version: 2
ethernets:
enp0s31f6:
addresses:
- 192.168.220.1/24:
label: enp0s31f6:ipsec
routes:
- on-link: false
from: 192.168.220.0/24
to: 172.16.50.0/24
dhcp4: no
dhcp6: no
但什么都没改变。还是没运气。
编辑2 这是主要的 netplan 配置/etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
enp41s0:
addresses:
- 138.201.x.x/32
routes:
- on-link: true
to: 0.0.0.0/0
via: 138.201.x.y
- to: default
via: ipv6-address::1
nameservers:
addresses:
- w.x.y.z
- ipv6.x.y.z::add:2
- w.x.y.z2
- ipv6.x.y.z::add:1
编辑3
将 netplan 更改为
network:
version: 2
ethernets:
enp41s0: # use the name of your current network interface here
addresses:
- 172.16.50.1/24 # replace with your desired private IP address and subnet mask
dhcp4: no
dhcp6: no
并将 ipsec.conf 更改为
.
.
leftsourceip=172.16.50.1
leftsubnet=172.16.50.1/32
.
.
仍然是同样的错误:
.
.
selected proposal: ESP:3DES_CBC/HMAC_MD5_96/NO_EXT_SEQ
received netlink error: Network is unreachable (101)
unable to install source route for 172.16.50.1
CHILD_SA thevpn{2} established with SPIs c806e3a0_i 131c38e0_o and TS 172.16.50.1/32 === 192.168.220.0/24
connection 'actiovita-vpn' established successfully
编辑4
规则列表:
0: from all lookup local
220: from all lookup 220
32766: from all lookup main
32767: from all lookup default
另一个命令:
@ip route show table 220
@
根本没有任何输出。
编辑5
我已经安装Rocky Linux代替Ubuntu 22.04 LTS并且它在那里工作正常,没有任何问题。设置私有 IP 似乎nmtui
可以正确安装私有 IP 地址和公共 IP 地址。因此,我强烈认为 Ubuntu(我基本上更喜欢使用)上的网络堆栈配置似乎已损坏。不要再认为这是 strongswan 的问题了。
答案1
我认为左连接和右连接的源 IP 地址配置不正确。请确保 ipsec.conf 文件中指定的 IP 地址与 netplan 配置文件中分配给相应接口的 IP 地址相匹配
编辑后进行编辑:
让我们尝试修复两台服务器上的路由设置,然后更改StrongSwan
conf 文件
首先更新服务器 A/etc/netplan/50-my-network.yaml
network:
version: 2
ethernets:
enp0s31f6:
addresses:
- 172.16.50.1/24
dhcp4: no
dhcp6: no
然后是服务器B
network:
version: 2
ethernets:
enp0s31f6:
addresses:
- 192.168.220.1/24
dhcp4: no
dhcp6: no
我们申请sudo netplan apply
然后更新StrongSwan
对于服务器 A/etc/ipsec.conf
...
conn thevpn
...
leftsourceip=172.16.50.1
leftsubnet=172.16.50.1/32
...
然后是服务器B
...
conn thevpn2
...
leftsourceip=192.168.220.1
leftsubnet=192.168.220.1/32
...
让我们重新开始strongswan
sudo systemctl restart strongswan
检查,它应该可以工作sudo ipsec status