物理接口MAC而不是macvlan MAC作为ARP响应发送

在Arch Linux ARM(Raspberry Pi)内核4.4.37上,我创build了一个macvlan例如

ip link add link eth0 mac0 type macvlan 

macvlan虚拟网卡出现在列表中,所以我给它分配一个IP地址,并将链路状态设置为up。 (顺便说一下,我尝试过模式bridgevepaprivate模式。)

然后,我可以从Windows客户端ping IP,但是当我检查Windows中的ARPcaching( arp -a )时,它们显示的是与主(物理)networking适配器相同的MAC地址,而不是新创build的macvlan MAC地址。

我确定要清除ARPcaching,尝试客户端以前没有见过的IP地址等,但总是显示错误的MAC地址。

当我为macvlan MAC地址为Windows客户端创build一个静态ARP条目并ping相关的IP地址时,tcpdump显示在macvlan接口上进入的回显请求,并且在主(物理)接口上不显示任何东西,我得到了我的Windows客户端的ping响应(一旦我记得设置iptables规则,以允许交通!)

只要我清除客户端上的ARPcaching并再次ping,我仍然得到一个ping响应,但是这次ARP条目已经恢复到Linux主机上的主要物理networking适配器。

只是想知道我可能做错了什么?

基本上这里没有什么错。 这就是Linux内核在ARPparsing方面的工作原理 – 默认情况下,即使请求的地址位于不同的接口上,它也将回复任何本地地址的ARP请求,而不pipe它们是否进入接口。

要解决这个问题,你需要调整两个sysctlvariables:

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

您可能需要将arp_ignore值更改为2,并根据您的IP地址/子网划分scheme将arp_filter设置为1。

有关这些variables的可用选项的完整说明,请参阅kernel.org文档 。