我已经设置了两个 vagrant 实例并且都在运行(主机是 macOS 而 vagrant 是 centOS7)。
一个配置公网ip 192.168.0.100,一个配置公网ip 192.168.0.101
现在两者都可以非常快速地 ping 通 ip 为 192.168.0.11 的主机,并且没有数据包丢失。主机也可以 ping 通两个实例,并且没有数据包丢失。
但是,当我在两个实例之间 ping 时,数据包丢失率高达 93%,甚至需要一个响应也要花几秒钟的时间。
我尝试将主机 192.168.0.11 添加为默认网关,如下所示,但数据包丢失率没有改变
config.vm.provision "shell",
run: "always",
inline: "route add default gw 192.168.0.11"
编辑:此外,这种情况并非总是发生,但当我重新加载 vagrant 时,大约 60% 的时间会发生这种情况。有时经过 30 分钟的 ping 后,它奇迹般地变得快速且无损,但再过 30 分钟,它又变得缓慢且有损。
在慢速情况下,traceroute 会给出 11 个跳数,除了最终目的地为“*”之外的所有内容。
同一网络中的其他机器可以轻松 ping 两个实例,并且没有任何损失。
我猜是某些内部路由导致大多数请求陷入无限循环(因为两个实例共享同一个 IP,即 vagrant 自动生成的 10.2.xx 地址范围,但我不确定)。但是我不知道如何开始调试这种情况。
任何帮助,将不胜感激。
答案1
我想我找到解决办法了。
vagrant machine 有时会出于未知原因添加一些错误的 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,这样两个方向都可以正常工作。