Intereting Posts

具有不同MAC地址的虚拟接口

我试图找出如何在Linux机器上设置两个具有不同MAC地址的逻辑networking接口(在一个物理接口上)。

我的第一个尝试是使用似乎起作用的macvlan:

[root@localhost ~]# ip link add link enp0s3 name veth0 type macvlan [root@localhost ~]# ip link set veth0 up [root@localhost ~]# dhclient veth0 [root@localhost ~]# ifconfig enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.6 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::a00:27ff:fe3b:d08b prefixlen 64 scopeid 0x20<link> ether 08:00:27:3b:d0:8b txqueuelen 1000 (Ethernet) RX packets 356 bytes 58787 (57.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 210 bytes 24203 (23.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 veth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::2462:42ff:fecb:5090 prefixlen 64 scopeid 0x20<link> ether 26:62:42:cb:50:90 txqueuelen 0 (Ethernet) RX packets 83 bytes 9099 (8.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 34 bytes 3871 (3.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 

但是,从另一台计算机扫描本地networking时,两个接口(192.168.1.6和192.168.1.11)都显示为具有相同的MAC地址08:00:27:3b:d0:8b。

任何想法,如果这是可能的? 如果我不能用它来达到这个目的,那么macvlan的用途是什么?

谢谢。

编辑:

正如Otheus所build议的那样,我尝试了和以前一样的设置

 sysctl -w net.ipv4.conf.all.arp_ignore=1 sysctl -w net.ipv4.conf.all.arp_announce=2 

这显然使接口只回应那些明确指向他们的ARP请求。

在我的设置,这导致失败的DHCP请求分配一个IP地址veth0。 在veth0上有一个静态的IP地址,我无法从networking中的其他主机(我试过arp / nmap / ping)到达这个地址。

我的(初步)结论是,在同一个子网上不可能有一个具有不同MAC地址的虚拟接口。 然而,我仍然想知道macvlan的确切目的是什么,为什么我在本地机器上(我设置虚拟接口的地方)看到虚拟接口有自己的MAC地址,而不是其他机器。

dhclient能够为veth0分配一个IP地址的事实表明单独的MAC地址正在按照预期工作。 你是如何“扫描networking”? 一个更好的testing是:从第二个主机,嗅探数据包(我是老派,并使用“tcpdump -e icmp”。然后从上面的主机,通过每个接口ping(ping – 我可以这样做) ,并查看嗅探的数据包的MAC地址。

同时,在虚拟IP接口上也有一些用于处理ARP报文的sysctlvariables。 这里有一篇相关的文章指向这个页面 , 这篇文章详细讨论了这个话题。 该解决scheme可能会被networking交换机混淆,以及它如何select处理具有多个直接连接的MAC的一个端口。