Networking 尝试使流量流向多个网络接口时出现的异常问题

Networking 尝试使流量流向多个网络接口时出现的异常问题,networking,vagrant,multiple-inheritance,Networking,Vagrant,Multiple Inheritance,问题 我在我的vagrant节点上设置了两个网络接口。eth1绑定到.11地址,eth2绑定到.12 当我这样做时: ping 192.168.1.12 及 。。。并在不同接口上侦听节点上的ICMP消息 root@node1:/home/vagrant# tcpdump -i eth1 -v icmp -nn 对于eth1我正在获取ICMP,但是当 root@node1:/home/vagrant# tcpdump -i eth2 -v icmp -nn 我没有在tcpdump上看到我的

问题


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

当我这样做时:

ping 192.168.1.12

。。。并在不同接口上侦听节点上的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
被pind'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盒作为虚拟机。添加了两个接口-两个桥接适配器。同样的行为。所以这与虚拟盒或更一般的东西有关(比如我不了解虚拟NIC是如何工作的),不一定是流浪者


使用的数据:

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

问题是我将两个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主机发送数据包

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

还有,我是否会使用

net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
因为路由仍然不起作用(即使我强制正确的ARP分辨率(参见OP),PING回复永远不会回复到我(不知道为什么)

这说明了IP路由中的一个重要概念—IP是每个主机
,而不是每个NIC

一些参考资料:


您在Vagrant文件中将
.11
.12
分配到哪里?我相信它们是由DHCP自动分配的。如果我删除行
config.vm.network:public\u network,请键入:“dhcp”,网桥:“wlan0”config.vm.network:public\u network,请键入:“dhcp”,网桥:“wlan0”
。。。然后界面
.11
.12
消失。我也可以使用静态IP,如注释行所示。您能尝试刷新主机的ARP表并重试吗?(你ping的机器)是的,我试过了-两个IP的mac都是一样的(所以
.11
.12
的mac都是一样的)。当我通过向发出ping的机器添加静态路由来指定mac地址时,就会到达“正确”接口(我用tcpdump看到它们),但没有发出应答,因此发出ping的机器会报告100 proc的数据包丢失。。。有关详细信息,请参阅更新2和更新3。谢谢你的帮助。我可以重现这个问题。对我来说也很奇怪。另外,
arping…11
提供与
arping…12
相同的mac地址。到目前为止我还没有答案。
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2