一个物理网络接口上的多个 MAC 地址 (linux)

gra*_*uyt 22 mac-address ip-address linux-networking

一个简单的问题:如何在一个物理网络接口 (linux) 上设置多个 MAC 地址?

为什么?我的 ISP 正在检查 GW 上的 ip<->mac,我想通过我的“linuxbox”路由流量,而不是用不同的源 ip 转发它。

如果不检查 ip<->mac,我将使用 eth0、eth0:0,但在这种情况下,我需要每个 IP 的唯一 MAC 地址。

eat*_*ter 32

您可以使用 macvlan 创建多个具有不同 MAC 地址的虚拟接口。

ip link add link eth0 address 00:11:11:11:11:11 eth0.1 type macvlan
ip link add link eth0 address 00:22:22:22:22:22 eth0.2 type macvlan
Run Code Online (Sandbox Code Playgroud)

从理论上讲,这应该就是您所需要的,尽管在某些时候内核中出现了某些问题,这会导致它对所有内容都使用一个 MAC。我不确定那是什么状态;希望它是固定的。

如果没有,您可以使用 arptables 重写基于出口接口的输出或基于目标 IP 的输入的 MAC 地址:

arptables -A OUT -o eth0.1 --arhln 06 -j mangle --mangle-hw-s 00:11:11:11:11:11
arptables -A OUT -o eth0.2 --arhln 06 -j mangle --mangle-hw-s 00:22:22:22:22:22
arptables -A IN -d 192.168.1.1 --arhln 06 -j mangle --mangle-hw-d 00:11:11:11:11:11
arptables -A IN -d 192.168.1.2 --arhln 06 -j mangle --mangle-hw-d 00:22:22:22:22:22
Run Code Online (Sandbox Code Playgroud)

不幸的是,根据我的经验,arptables 也有很多问题。

  • 对不起,死灵贴,但关于“在某些时候内核中出现了某些问题,它会导致它对所有内容使用一个 MAC”部分,这可能不是一个错误:我必须设置内核可调参数“net.ipv4.conf” .all.arp_ignore" 为 1 以使其正常工作。可能还需要其他 ARP 可调参数;有关更多解释,请阅读 [this](https://support.cumulusnetworks.com/hc/en-us/articles/203859616-Default-ARP-Settings-in-Cumulus-Linux) 和 [this](https:// openvz.org/Multiple_network_interfaces_and_ARP_flux)。 (3认同)