Você pode usar o macvlan para criar várias interfaces virtuais com diferentes endereços 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
Em teoria, isso deve ser tudo o que você precisa, embora em algum momento algo quebrou no kernel e faria com que ele usasse um MAC para tudo. Não tenho certeza de qual é o status disso; espero que seja consertado.
Caso contrário, você pode usar arptables para reescrever os endereços MAC na saída com base na interface de saída ou na entrada com base no IP de destino:
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
Infelizmente arptables também é bastante problemático na minha experiência.
A razão pela qual sua ponte e a interface TAP compartilham o mesmo endereço MAC, é porque a ponte não possui um MAC, até que esteja vinculada a uma interface. Se você criar uma ponte com BRCTL e fizer um "brctl show", verá que a ponte possui portas vazias. (Nenhuma interface está vinculada a ela) Ao vincular TAP0 a br0, naturalmente, ela aparecerá como o mesmo MAC. Eu criei uma ponte de teste, para ilustrar.
# brctl addbr testbr0
Eu criei três TAPS de teste. A saída de "brctl showmacs testbr0".
Como você pode ver, cada porta da ponte possui um endereço MAC exclusivo, e a ponte deve mostrar seu MAC, como a primeira interface vinculada. Se você conectar uma interface de rede física, a ponte Ethernet herdará seu endereço MAC e moverá todas as interfaces virtuais para baixo. Exemplo de ligação eth0, à ponte de teste.
Usando "brctl show" novamente;
as interfaces TAP desceram uma, mesmo que eth0, ainda esteja na PORTA 4. Você ainda tem endereços MAC exclusivos. Se a ponte Ethernet estiver vinculada a uma interface de rota de origem, você não poderá escolher usar um endereço IP ou DHCP. Quanto vale a pena, se você conectar uma interface de rota de origem, mostrará um endereço MAC "não local". Este é o endereço MAC do roteador do próximo salto. Eu sei que no RedHat, existe uma opção para especificar um IP de origem, usando o IFCONFIG. Minha primeira opção seria consultar a referência de comando IP, pois acho que você pode especificar um IP de origem. Eu nunca tentei.
fonte
Tente criar
tap
dispositivos ou qualquer outro dispositivo Ethernet virtual com endereços MAC e IPs necessários e, em seguida, conecte-os a uma ponte com eth0.fonte
Parece que você pode usar o vconfig para criar vários endereços vlan na mesma ethernet física, cada um com diferentes endereços mac.
fonte