简单问题:如何在一个物理网络接口(linux)上设置多个MAC地址?
为什么?我的 ISP 正在检查 GW 上的 ip<->mac,我想通过我的“linuxbox”路由流量,然后使用不同的源 ip 转发它。
如果不检查 ip<->mac,我将使用 eth0、eth0:0,但在这种情况下,我需要每个 IP 都有唯一的 MAC 地址。
答案1
您可以使用 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 根据出口接口重写输出时的 MAC 地址,或者根据目标 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 也存在很多错误。
答案2
您的网桥和 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 地址是本地的吗?老化计时器 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 地址是本地的吗?老化计时器 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 显示 桥名称 桥 ID STP 启用接口 testbr0 8000.00aabbccddee 没有 eth0 tap00 tap01 tap02
TAP 接口向下移动了一个,即使 eth0 仍然在端口 4。您仍然有唯一的 MAC 地址。如果以太网桥绑定到源路由接口,您就别无选择,只能使用 IP 地址或 DHCP。不管怎样,如果您桥接源路由接口,您将显示“非本地”MAC 地址。这是下一跳路由器 MAC 地址。我知道在 RedHat 中,有一个使用 IFCONFIG 指定源 IP 的选项。我的第一个选择是查阅 IP 命令参考,因为我认为您可以指定源 IP。我从未尝试过。
答案3
尝试创建tap
具有所需 MAC 地址和 IP 的设备或任何其他虚拟以太网设备,然后将它们与 eth0 连接到一个网桥。
答案4
看起来你也许可以使用虚拟配置在同一个物理以太网上创建多个 vlan 地址,每个地址具有不同的 mac 地址。