我正在开发一个站点到站点的 VPN,其中一个端点是 UDM,另一个端点是 Strongswan。目标是提供到云环境的双向路由。我完全搞不懂为什么这不起作用。
好消息是 Strongswan 可以连接并传输流量。但我在 Strongswan 端遇到了一些路由问题。我的 Strongswan 主机有两个接口,eth0 上有公共互联网 IP,eth1 上有内部 IP 10.132.169.74
- Lan 网络:10.87.0.0/24、10.87.35.0/24、10.87.235.0/24
- 云网络:10.132.0.0/16
- 10.87.0.1 = UDM
- 10.132.169.74 = Strongswan eth1 并连接到内部云网络 10.132.0.0/16
- 10.87.0.33 = LAN 网络上的测试主机
- 10.132.40.82 = 云网络上的测试主机
现在的情况:
- 从 10.87.0.33 (局域网测试主机) -> 10.132.169.74 (Strongswan) 执行 ping 操作有效
- 从 10.132.169.74 (Strongswan) -> 10.87.0.33 (Lan 测试主机) 执行 ping 操作有效
- 从 10.132.40.82(云测试主机) ping 到 10.87.0.33(局域网测试主机)有效
- 从 10.87.0.33 (局域网测试主机) 到 10.132.40.82 (云测试主机) ping 不通,这是最重要的一点
这是 Strongswan 主机 10.132.169.74 的路由表:
default via x.x.x.x dev eth0 proto static
10.17.0.0/16 dev eth0 proto kernel scope link src 10.17.0.21
10.19.49.0/24 dev wg0 proto kernel scope link src 10.19.49.1
10.87.0.0/16 dev ipsec0 scope link src 10.132.169.74
10.132.0.0/16 dev eth1 proto kernel scope link src 10.132.169.74
x.x.x.y/20 dev eth0 proto kernel scope link src x.x.x.z
以下是云测试主机(10.132.40.82)上的路由表:
default via x.x.x.x dev eth0 proto static
10.17.0.0/16 dev eth0 proto kernel scope link src 10.17.0.24
10.87.0.0/16 via 10.132.169.74 dev eth1
10.132.0.0/16 dev eth1 proto kernel scope link src 10.132.40.82
x.x.x.y/20 dev eth0 proto kernel scope link src x.x.x.z
在 Strongswan 主机上,我正在执行此操作:
sudo ip link add ipsec0 type xfrm dev eth0 if_id 4242
sudo ip link set ipsec0 up
sudo ip route add 10.87.0.0/16 dev ipsec0 src 10.132.169.74
最后这是我的天鹅配置:
sudo tee /etc/strongswan.d/charon-systemd.conf << "EOF"
charon-systemd {
load=pem pkcs1 x509 revocation constraints pubkey openssl random random nonce aes sha1 sha2 hmac pem pkcs1 x509 revocation curve25519 gmp curl kernel-netlink socket-default updown vici
journal {
default=0
# enc=1
# asn=1
}
}
EOF
sudo tee /etc/swanctl/conf.d/xyz.conf << "EOF"
connections {
vpn-cloud-udm-lan {
version=2
proposals=aes128gcm16-sha256-modp2048,aes128-sha256-modp2048
unique=replace
encap=yes
local {
id=x.x.x.x
auth=psk
}
remote {
auth=psk
}
children {
net {
local_ts=10.132.0.0/16
remote_ts=10.87.0.0/16
esp_proposals=aes128gcm16-sha256-modp2048,aes128-sha256-modp2048
start_action=trap
if_id_in=4242
if_id_out=4242
}
}
}
}
secrets {
ike-1 {
id-vpn-cloud=x.x.x.x
secret="somesecret"
}
ike-2 {
id-udm-lan=y.y.y.y
secret="somesecret"
}
}
EOF
以及我在 Strongswan 主机上的 sysctl:
net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
sudo swanctl --list-sas
显示活动隧道,当我 ping 时,我可以看到计数器上升。此外,在云测试主机上监听的 tcpdump 显示没有流量到达,但在特定场景中 Strongswan 主机上的 tcpdump 确实显示了流量,因此它被丢弃在那里。
任何帮助都将不胜感激,谢谢!
答案1
因此,经过多次的摇头(不是对摇滚音乐的那种摇头)和咬牙切齿之后,我从这个答案中找到答案:https://www.digitalocean.com/community/questions/site-to-site-vpn-support-any-updates
Digital Ocean 在私有接口上丢弃数据包。因此我添加了一条防火墙规则以允许来自 10.87.0.0/24 的流量,哇!成功了!!!