vários endereços MAC em uma interface de rede física (linux)

20

pergunta simples: Como posso configurar vários endereços MAC em uma interface de rede física (linux)?

Por quê? Meu ISP está checando ip < - > mac no GW e eu gostaria de rotear o tráfego através do meu "linuxbox" e então encaminhá-lo com um ip de origem diferente.

Sem verificar ip < - > mac, usarei eth0, eth0: 0, mas nesta situação eu preciso de um endereço MAC exclusivo para cada IP.

    
por grapefruyt 18.01.2011 / 02:58

4 respostas

27

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 tenha quebrado no kernel e isso faria com que ele usasse um MAC para tudo. Não tenho certeza de qual é o status disso; espero que seja consertado.

Se não, você poderia 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 bugs na minha experiência.

    
por 19.01.2011 / 18:09
4

A razão pela qual a bridge e a interface TAP compartilham o mesmo endereço MAC, é porque a bridge não tem um MAC, até que esteja ligada a uma interface. Se você criar uma ponte com o BRCTL e fizer um "brctl show", verá que a ponte tem portas vazias (sem interface vinculada a ela). Ao ligar TAP0 a br0, naturalmente, ele será mostrado como o mesmo MAC. Eu criei uma ponte de teste, para ilustrar.

# brctl addbr testbr0

[root@stooge etc]# brctl show testbr0
bridge name bridge id       STP enabled interfaces
testbr0     8000.000000000000   no

Eu criei três TAPS de teste. A saída de "brctl showmacs testbr0".

[root@stooge etc]# brctl showmacs testbr0
port no mac addr        is local?   ageing timer
  1 86:51:b6:95:0e:b6   yes        0.00
  2 86:58:63:c6:d4:e7   yes        0.00
  3 8a:a7:fa:17:c5:12   yes        0.00

Como você pode ver, cada porta de ponte tem um endereço MAC exclusivo, e a ponte deve mostrar seu MAC, como a primeira interface ligada. Se você conectar uma interface de rede física, a ponte Ethernet herdará seu endereço MAC e desativará todas as interfaces virtuais. Exemplo de ligação eth0, para a ponte de teste.

[root@stooge etc]# brctl showmacs testbr0
port no mac addr        is local?   ageing timer
  4 AA:BB:CC:DD:EE:FF   yes        0.00
  1 86:51:b6:95:0e:b6   yes        0.00
  2 86:58:63:c6:d4:e7   yes        0.00
  3 8a:a7:fa:17:c5:12   yes        0.00

Usando "brctl show" novamente;

[root@stooge etc]# brctl show
bridge name     bridge id               STP enabled     interfaces
testbr0         8000.00aabbccddee       no              eth0
                                                        tap00
                                                        tap01
                                                        tap02 

as interfaces TAP desceram uma, apesar de eth0, ainda estar 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 terá escolha ao usar um endereço IP ou DHCP. Para que vale a pena, se você ligar uma interface de rota de origem, você mostrará um endereço MAC "não local". Este é o endereço MAC do roteador do próximo salto. Eu sei que no RedHat, há uma opção em especificar um IP de origem, usando o IFCONFIG. Minha primeira opção seria consultar a referência do comando IP, pois acho que você pode especificar um IP de origem. Eu nunca tentei.

    
por 01.02.2011 / 03:48
3

Tente criar tap dispositivos ou quaisquer outros dispositivos ethernet virtuais com endereços MAC e IPs necessários e, em seguida, anexe-os em uma única ponte com eth0.

    
por 18.01.2011 / 13:09
0

Parece que você pode usar o vconfig para criar vários endereços de vlan na mesma rede física, cada um com endereços mac diferentes.

    
por 18.01.2011 / 03:53