首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >物理接口MAC而不是macvlan MAC作为ARP响应发送。

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

Server Fault用户
提问于 2016-12-12 20:31:44
回答 2查看 4.7K关注 0票数 4

在Arch Linux ARM (Raspberry Pi)内核4.4.37上,我创建了一个macvlan。

代码语言:javascript
复制
ip link add link eth0 mac0 type macvlan

然后,macvlan虚拟网卡出现在列表中,因此我给它分配了一个IP地址,并将链接状态设置为up。(顺便说一下,我尝试过bridge、vepa和private模式。)

然后,我可以从我的Windows客户端平IP,但是当我在Windows中检查ARP缓存(arp -a)时,它们显示的是与主(物理)网络适配器相同的MAC地址,而不是新创建的macvlan MAC地址。

我确保清除ARP缓存,尝试一个客户以前从未见过的IP地址,等等,但它总是显示错误的MAC。

当我为macvlan MAC地址为windows客户端创建一个静态ARP条目,并平过相关的IP地址时,tcpdump显示在macvlan接口上传入的回显请求,它没有显示主(物理)接口上的任何内容,并且在我的Windows客户端(一旦我记得设置iptables规则以允许流量!)上有一个ping响应!

一旦我再次清除客户机上的ARP缓存和ping,我仍然会得到ping响应,但这次ARP条目已经恢复到Linux盒上的主物理网络适配器。

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

EN

回答 2

Server Fault用户

回答已采纳

发布于 2018-05-03 00:49:05

为此,我必须在接受的答案中添加一个步骤,并设置以下附加变量:

代码语言:javascript
复制
net.ipv4.conf.all.rp_filter=2

我不需要将arp_ignore设置为2,1似乎有效。我也不需要为我的网络将arp_filter设置为1。

所以,对我来说,完全的解决办法是:

代码语言:javascript
复制
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.all.rp_filter=2

找到了我的问题这里的解决方案

票数 3
EN

Server Fault用户

发布于 2016-12-21 15:18:09

基本上这里没什么不对的。这就是Linux内核在ARP解析方面的工作方式--默认情况下,它将对任何本地地址的ARP请求作出答复,而不管它们正在进入哪个接口,即使所请求的地址位于不同的接口上。

要解决这个问题,您需要调整两个sysctl变量:

代码语言:javascript
复制
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

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

有关这些变量可用选项的完整描述,请查看kernel.org文档。

票数 6
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/820306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档