![IPSec 隧道启动后无法 ping 通公共端点](https://linux22.com/image/674509/IPSec%20%E9%9A%A7%E9%81%93%E5%90%AF%E5%8A%A8%E5%90%8E%E6%97%A0%E6%B3%95%20ping%20%E9%80%9A%E5%85%AC%E5%85%B1%E7%AB%AF%E7%82%B9.png)
我使用 openswan 通过 IPSec 连接两台机器。隧道正常上线,我通过 VPN 连接到每个端点。
但是,当隧道启动时,我失去了与公共端点 IP 地址的连接。例如,从站点 B 公共地址 4.5.6.7 ping 站点 A 公共地址 1.2.3.4(反之亦然)失败。
当隧道通起来时,我注意到一些可以解释这种行为的奇怪的事情。
#ip xfrm policy
src 1.2.3.4/32 dst 4.5.6.7/32
dir out priority 2080 ptype main
tmpl src 0.0.0.0 dst 0.0.0.0
proto esp reqid 0 mode transport
我剪掉了剩余的输出,因为它只包含有意义的条目(通过隧道连接的私有网络)。
知道我遗漏了什么吗?
答案1
我并不完全熟悉 xfrm 语法,但它看起来像:
- 当你的 VPN 没有启动时,你有一个到互联网的默认路由,因此你可以按预期的方式 ping
- 一旦 VPN 启动,XFRM 规则实际上会添加一条策略路由,将所有流量通过隧道发送到另一端。另一端可能存在一条等效规则,可防止 ICMP 请求通过隧道实际到达对面接口(在 IP 级别创建某种循环)。
您可能需要调整路线,以便:
- 您的默认路由始终指向互联网
- 您只能通过隧道发送来自路由器后面子网(不包括其他路由器接口)的流量。或者,您可以添加静态路由(或策略路由)以强制将两个公共 IP 之间的流量发送到隧道外。
归根结底,您需要找到一种方法来区分从路由器看到的默认路由(朝向互联网)和从路由器后面的 LAN 子网观察到的流量的默认路由。它们通常非常不同。