Answers:
您可以使用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还是很容易出错。
您的网桥和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。我从来没有尝试过。
尝试创建tap
具有所需MAC地址和IP的设备或任何其他虚拟以太网设备,然后将它们连接到具有eth0的一个网桥中。