我们在一些 Linux VM(基于云、多个提供商,主要是 Ubuntu 14.04 和 16.04)上遇到了一些奇怪的网络行为。我们有两个不同的网络,中间有一个 Strongswan 网关。
站点 A:网络 - 10.104.16.0/20 VPN 网关和在主路由器上配置的路由(虚拟机上无需配置)
站点 B:网络 - 10.240.132.0/25 Strongswan 网关 - 10.240.132.15 根据与站点 A 通信的需要(或不需要)为每个虚拟机配置路由
站点 B 上需要与站点 A 虚拟机通信的虚拟机之一上的内核路由表:
# route -vn
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.240.132.1 0.0.0.0 UG 0 0 0 eth0
10.104.16.0 10.240.132.15 255.255.240.0 UG 0 0 0 eth0
10.240.132.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
现在,问题是……当一切正常时,虚拟机会对站点 A 上的虚拟机执行 ping 操作,这就是 traceroute 命令的输出:
# traceroute 10.104.19.4
traceroute to 10.104.19.4 (10.104.19.4), 30 hops max, 60 byte packets
1 10.240.132.15 (10.240.132.15) 0.248 ms 0.228 ms 0.220 ms
2 * * *
3 10.104.19.4 (10.104.19.4) 15.048 ms 15.042 ms 15.028 ms
然后,虚拟机突然无法 ping 通站点 A 资源,traceroute 输出将如下所示:
# traceroute 10.104.19.4
traceroute to 10.104.19.4 (10.104.19.4), 30 hops max, 60 byte packets
1 10.104.19.4 (10.104.19.4) 0.552 ms 0.567 ms 0.616 ms
2 * 10.104.19.4 (10.104.19.4) 0.659 ms 0.707 ms
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *^C
它看起来完全是随机的。当这种情况最终发生时,我将删除然后再次添加路线:
# route del -net 10.104.16.0 gw 10.240.132.15 netmask 255.255.240.0
# route add -net 10.104.16.0 gw 10.240.132.15 netmask 255.255.240.0
当然,这可以暂时解决问题,但它不会持续很长时间......知道什么可能会出错或者我做错了什么吗?
感谢你们 ;)
答案1
好吧,没关系...在意识到连接会在上午 9:00、上午 9:05、上午 9:10 精确地每 5 分钟丢失一次...之后,我查看了 Strongswan 日志,发现它会在以下时间重新启动服务:那些给定的时间(进程接收 SIGKILL 命令)。
我们和队长谈过,他说
嗯,我们可能在 Strongswan 服务器上有一个 cron 作业,对远程 IP 执行 ping 操作,如果找不到远程 IP,则重新启动服务。
确实是的。而且由于该远程 IP 早已消失,并且没有人禁用或更新此未记录的作业,因此从一开始就重新启动了服务。直到我们在复制 Postgres 数据库时注意到这个问题。