实例之间的 Vagrant 公网:丢包率高

实例之间的 Vagrant 公网:丢包率高

我已经设置了两个 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,这样两个方向都可以正常工作。

相关内容