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á verificando o ip <-> mac no GW e eu gostaria de rotear o tráfego através do meu "linuxbox" e depois encaminhá-lo com o ip de origem diferente.

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

grapefruyt
fonte

Respostas:

28

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.

comedor
fonte
11
Desculpe por necropost, mas com relação à parte "em algum momento algo quebrou no kernel e isso faria com que usasse um MAC para tudo", pode não ser um bug: eu tive que definir o kernel como "net.ipv4.conf" .all.arp_ignore "para 1 para que isso funcione corretamente. Também podem ser necessários outros ajustes de ARP; para mais explicações, leia isto e isto .
MoonSweep
4

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

[root @ stooge etc] # brctl show testbr0
nome da ponte id da ponte interfaces ativadas para STP
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 addr mac é local? temporizador de envelhecimento
  1 86: 51: b6: 95: 0e: b6 sim 0,00
  2 86: 58: 63: c6: d4: e7 sim 0,00
  3 8a: a7: fa: 17: c5: 12 sim 0,00

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.

[root @ stooge etc] # brctl showmacs testbr0
port no addr mac é local? temporizador de envelhecimento
  4 AA: BB: CC: DD: EE: FF sim 0,00
  1 86: 51: b6: 95: 0e: b6 sim 0,00
  2 86: 58: 63: c6: d4: e7 sim 0,00
  3 8a: a7: fa: 17: c5: 12 sim 0,00

Usando "brctl show" novamente;

[root @ stooge etc] # show de brctl
nome da ponte id da ponte interfaces ativadas para STP
testbr0 8000.00aabbccddee no eth0
                                                        tap00
                                                        tap01
                                                        tap02 

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.

Lars Bailey
fonte
3

Tente criar tapdispositivos ou qualquer outro dispositivo Ethernet virtual com endereços MAC e IPs necessários e, em seguida, conecte-os a uma ponte com eth0.

gelraen
fonte
Eu já tentei isso e não funciona. Se eu usar br0 (eth0, toque0, toque1). Preciso definir o IP no br0 para que a rede funcione. Sem IP (ifconfig br0 0.0.0.0 up) a rede não funciona. Então, quando eu definir o IP em br0 e toque em 0. (do win-pc) Posso executar ping nos dois IPs, mas depois do arp -a, cada um deles tem o mesmo MAC.
grapefruyt
0

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.

Phil Hollenback
fonte
Tráfego de todos os IPs deve ser untagged
gelraen