一个物理网络接口(Linux)上有多个MAC地址


20

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

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

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

Answers:


28

您可以使用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

从理论上讲,这应该是您所需要的,尽管在某些时候内核中发生了故障,这将导致它对所有内容使用一个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

不幸的是,根据我的经验,arptables还是很容易出错。


1
抱歉,necropost很抱歉,但是“在某些时候内核中出现故障,这将导致它使用一个MAC来处理所有内容”部分,这可能不是一个错误:我必须设置内核可调参数“ net.ipv4.conf” .all.arp_ignore“设为1,即可使其正常工作。也可能需要其他ARP可调参数。有关更多说明,请阅读thisthis
MoonSweep's

4

您的网桥和TAP接口共享相同的MAC地址的原因是,直到网桥绑定到接口为止,它都没有MAC。如果使用BRCTL创建网桥并执行“ brctl show”,则会发现该网桥具有空端口。(未绑定接口)将TAP0绑定到br0时,自然会显示为相同的MAC。我创建了一个测试桥,以进行说明。

#brctl addbr testbr0

[root @ stooge等]#brctl show testbr0
桥接名称桥接ID STP启用的接口
testbr0 8000.000000000000没有

我创建了三个测试TAPS。“ brctl showmacs testbr0”的输出。

[root @ stooge等]#brctl showmacs testbr0
端口号mac addr是本地端口吗?老化计时器
  1 86:51:b6:95:0e:b6是0.00
  2 86:58:63:c6:d4:e7是0.00
  3 8a:a7:fa:17:c5:12是0.00

如您所见,每个网桥端口都有一个唯一的MAC地址,网桥应显示其MAC,作为第一个接口绑定。如果桥接物理网络接口,则以太网桥将继承其MAC地址,并将所有虚拟接口下移。将eth0绑定到测试桥的示例。

[root @ stooge等]#brctl showmacs testbr0
端口号mac addr是本地端口吗?老化计时器
  4 AA:BB:CC:DD:EE:FF是0.00
  1 86:51:b6:95:0e:b6是0.00
  2 86:58:63:c6:d4:e7是0.00
  3 8a:a7:fa:17:c5:12是0.00

再次使用“ brctl show”;

[root @ stooge等]#brctl show
桥接名称桥接ID STP启用的接口
testbr0 8000.00aabbccddee no eth0
                                                        tap00
                                                        tap01
                                                        tap02 

尽管eth0仍位于端口4,但TAP接口已经下移了一个。您仍然具有唯一的MAC地址。如果将以太网桥绑定到源路由接口,则无法选择使用IP地址或DHCP。对于它的价值,如果桥接源路由接口,则会显示一个“非本地” MAC地址。这是下一跳路由器的MAC地址。我知道在RedHat中,可以使用IFCONFIG指定源IP。我的第一个选择是咨询IP命令参考,因为我认为您可以指定源IP。我从来没有尝试过。


3

尝试创建tap具有所需MAC地址和IP的设备或任何其他虚拟以太网设备,然后将它们连接到具有eth0的一个网桥中。


我已经尝试过了,它不起作用。如果我使用br0(eth0,tap0,tap1)。我必须在br0上设置IP才能使网络正常工作。没有IP(ifconfig br0 0.0.0.0 up),网络将无法工作。因此,当我在br0上设置IP并点击0时。(来自win-pc)我可以ping通两个IP,但是在arp -a之后,每个IP具有相同的MAC。
grapefruyt

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.