bao*_*7uo 4 linux mac-address linux-networking iproute2
在 Arch Linux ARM (Raspberry Pi) Kernel 4.4.37 上,我创建了一个 macvlan 例如
ip link add link eth0 mac0 type macvlan
Run Code Online (Sandbox Code Playgroud)
然后 macvlan 虚拟 NIC 出现在列表中,因此我为其分配了一个 IP 地址,并将链接状态设置为 up。(顺便说一句,我曾尝试与模式bridge
,vepa
和private
)。
然后我可以从我的 Windows 客户端 ping IP,但是当我检查 Windows 中的 ARP 缓存 ( arp -a
) 时,它们显示的 MAC 地址与主(物理)网络适配器相同,而不是新创建的 macvlan MAC 地址。
我确保清除 ARP 缓存,尝试使用客户端以前从未见过的 IP 地址等,但它始终显示错误的 MAC。
当我为 macvlan MAC 地址创建到 Windows 客户端的静态 ARP 条目并 ping 相关 IP 地址时,tcpdump 显示进入 macvlan 接口的回显请求,并且它在主(物理)接口上不显示任何内容,并且我在我的 Windows 客户端上收到了 ping 响应(一旦我记得设置 iptables 规则以允许流量!)
清除客户端上的 ARP 缓存并再次 ping 后,我仍然收到 ping 响应,但这次 ARP 条目已恢复到 Linux 机器上的主物理网络适配器的条目。
只是想知道我可能做错了什么?
基本上,这里没有错。这就是 Linux 内核在 ARP 解析方面的工作方式——默认情况下,它会回复任何本地地址的 ARP 请求,无论它们来自哪个接口,即使请求的地址位于不同的接口上。
要解决此问题,您需要调整两个 sysctl 变量:
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
Run Code Online (Sandbox Code Playgroud)
您可能需要将 arp_ignore 值更改为 2 并将 arp_filter 设置为 1,具体取决于您的 IP 地址/子网方案。
有关这些变量的可用选项的完整说明,请查看kernel.org 文档。
归档时间: |
|
查看次数: |
3852 次 |
最近记录: |