我有两个 vagrant 实例设置并且都在运行(主机是 macOS,vagrant 是 centOS7)。
一个配置公网ip 192.168.0.100 一个配置公网ip 192.168.0.101
现在两者都可以非常快速地 ping ip 192.168.0.11 的主机,并且丢包率为 0。主机也可以 ping 两个实例,丢包为 0。
但是,当我在两个实例之间 ping 时,丢包率大约为 93%,甚至需要几秒钟才能收到一个响应。
我尝试将主机 192.168.0.11 添加为默认网关,如下所示,但丢包率没有改变
config.vm.provision "shell",
run: "always",
inline: "route add default gw 192.168.0.11"
编辑:此外,这不会一直发生,但是当我重新加载 vagrant 时,大约 60% 的时间会发生这种情况。有时,在 ping 30 分钟后,它奇迹般地变得快速且无损,但再过 30 分钟后,它又变得缓慢且有损。
在缓慢的情况下,traceroute 提供 11 跳,除了最终目的地是“*”之外的所有内容。
同一网络中的其他机器可以轻松 ping 两个实例,就像零损失一样。
我的猜测是某些内部路由导致大多数请求进入无限循环(因为两个实例共享 10.2.xx 由 vagrant 自动生成的地址范围的相同 IP,但我不确定)。但是我不知道如何开始调试这种情况。
任何帮助,将不胜感激。
我想我找到了解决方案。
vagrant 机器有时会因为未知原因添加一些错误的 Ip Table 条目,解决此问题的正确方法是先使用
ip route show table main
获取 Ip Table,然后查看是否有包含高丢失地址的行,然后使用ip route del 192.168.0.0/24
删除条目. 之后,一切都会正常工作。编辑:
实际正确的原因是因为
arp
在实例之间没有正确设置。我们需要ifconfig
从一个 vagrant 实例中获取 mac 地址,然后手动使用arp -s
在另一个 vagrant 实例中设置 arp 表。之后,一切都会正常工作。IP 路由表不得修改,删除该条目将导致一种方式正常工作,但另一种方向无法到达。正确的方法是设置 arp,这样两种方式都可以正常工作。