【问题标题】:Vagrant issue when trying to get traffic flowing to multiple network interfaces尝试让流量流向多个网络接口时出现流浪问题
【发布时间】:2015-12-26 23:57:19
【问题描述】:

问题


我在我的 vagrant 节点上设置了两个网络接口。 eth1 绑定到.11 地址,eth2 绑定到.12

当我这样做时:

ping 192.168.1.12

ping 192.168.1.11

...并在不同接口上监听节点上的ICMP消息

root@node1:/home/vagrant# tcpdump -i eth1 -v icmp -nn

对于eth1,我正在获取 ICMP,但是在这样做时

root@node1:/home/vagrant# tcpdump -i eth2 -v icmp -nn

我在 tcpdump 上看不到我的 ping 请求。但是,如果我将 ping 请求发送到 .12 并收听 eth1 我会看到请求,这对我来说很奇怪。因此,当我在eth1 接口上侦听时,所有 ICMP 消息都在 tcpdump 中可见 - 即使我 ping .12 地址也是如此。

.11 被ping'ed 时,我期待看到请求发送到eth1 并在.12 被pin'ed 时看到eth2 - 为什么不是这样?


更新 1:

使用 tcpdump 收听 192.168.1.12 时可以看到广播 ping:

root@node1:/home/vagrant# tcpdump -i eth2 -v icmp -nn and src host 192.168.1.10
tcpdump: listening on eth2, link-type EN10MB (Ethernet), capture size 65535 bytes
05:30:21.800964 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.1.10 > 192.168.1.255: ICMP echo request, id 28770, seq 1, length 64
05:30:22.800953 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)

更新 2:

广播表明 L2 和 MAC 地址有问题 - 实际上托管 vagrant 的主机有这个 ARP 表

mindaugas@Mindaugas-Lenovo-Y50-70:~$ arp -an
? (192.168.1.1) at xxxxxxxx [ether] on wlan0
? (192.168.1.12) at 08:00:27:82:f6:0c [ether] on wlan0
? (192.168.1.11) at 08:00:27:82:f6:0c [ether] on wlan0

即使接口有这些:

eth1      Link encap:Ethernet  HWaddr 08:00:27:82:f6:0c  
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0

eth2      Link encap:Ethernet  HWaddr 08:00:27:7b:8d:fd  
          inet addr:192.168.1.12  Bcast:192.168.1.255  Mask:255.255.255.0

将 MAC 地址添加到 ARP 表中:

? (192.168.1.12) at 08:00:27:7b:8d:fd [ether] PERM on wlan0
? (192.168.1.11) at 08:00:27:82:f6:0c [ether] PERM on wlan0

但是现在,我可以看到eth0 上的数据报,但我没有收到ping 回复消息! ...我想知道为什么会这样?


更新 3:

在我的另一台安装了虚拟机和 linux 机作为 VM 的笔记本电脑上进行了尝试。添加了两个接口 - 两个桥接适配器。相同的行为。所以这与虚拟盒子或更一般的东西有关(比如我不了解虚拟网卡的工作原理),不一定是流浪者。


使用的数据:

我在 vagrant 节点上的 ifconfig:

root@node1:/home/vagrant# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:ca:3e:f9  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:feca:3ef9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:872 errors:0 dropped:0 overruns:0 frame:0
          TX packets:689 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:77679 (77.6 KB)  TX bytes:78655 (78.6 KB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:82:f6:0c  
          inet addr:192.168.1.11  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe82:f60c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:52 errors:0 dropped:0 overruns:0 frame:0
          TX packets:67 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7362 (7.3 KB)  TX bytes:6796 (6.7 KB)

eth2      Link encap:Ethernet  HWaddr 08:00:27:7b:8d:fd  
          inet addr:192.168.1.12  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe7b:8dfd/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:18 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2444 (2.4 KB)  TX bytes:2520 (2.5 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:16 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1184 (1.1 KB)  TX bytes:1184 (1.1 KB)

我的流浪文件:

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.define "node1" do |node1|

    node1.vm.box = "ubuntu/trusty64"
    node1.vm.hostname = "node1"

    config.vm.network :public_network, type: "dhcp", bridge: "wlan0"
    config.vm.network :public_network, type: "dhcp", bridge: "wlan0"
    # config.vm.network :public_network, bridge: "wlan0", ip: "192.168.1.251"
    # config.vm.network :public_network, bridge: "wlan0", ip: "192.168.1.252"

    config.vm.provider "virtualbox" do |v|
        v.memory = 256
        v.cpus = 2
    end

end

【问题讨论】:

  • 你在 Vagrantfile 中将..11..12 分配到哪里?
  • 我相信它们是由 DHCP 自动分配的。如果我删除行 config.vm.network :public_network, type: "dhcp", bridge: "wlan0" config.vm.network :public_network, type: "dhcp", bridge: "wlan0" ... 那么接口 ..11..12 就会消失。我也可以使用静态 IP,如注释行所示。
  • 能否尝试刷新主机的 ARP 表并重试? (你 ping 的机器)
  • 是的,我试过了——两个 IP 的 mac 相同(..11..12 的 mac 相同)。当我通过向发出 ping 的机器添加静态路由来指定 mac 地址时,会到达“正确”接口(我用 tcpdump 看到它们)但没有发出回复,因此发出 ping 的机器报告丢包 100 proc。 ...有关详细信息,请参阅更新 2 和更新 3。感谢您的帮助。
  • 我可以重现该问题。我也觉得很奇怪。同样arping ...11 提供与arping ...12 相同的mac 地址。到目前为止,我还没有答案。

标签: networking vagrant multiple-inheritance


【解决方案1】:

问题是我将两个 NIC 分配到同一个网络,所以 IP 路由无法正常工作。

vagrant 主机中的路由表如下所示:

root@node1:/home/vagrant# route -ne
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth2

Arp 将使用 eth1 MAC 解析,因为 eth1 将用于向 192.168.1.0/24 主机发送数据包。

我一删除一条路线,另一条就开始工作了。

Alsi,我是否会使用并不重要

net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2

因为路由仍然不起作用(即使我强制正确的 ARP 解析(请参阅 OP)PING 回复也永远不会回复我(虽然不知道为什么)。

这说明了 IP 路由中的一个重要概念 - IP 是per host,而不是per NIC

一些参考资料:

Why arp ignore/annouce are not enable by default https://serverfault.com/questions/556943/multiple-nic-arp-issue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多