USB ethernet Mesmo MAC

De LinuxPédia
Ir para: navegação, pesquisa

Definição do Tutorial

No padrão Ethernet todas as interfaces de rede devem ter MACs diferentes. Por essa razão o endereço MAC é considerado endereço de hardware. Para montar um laboratório de redes com o GNS3 comprei duas interfaces USB/Ethernet, de marca desconhecida. Ocorre que as interfaces aparecem todas com o mesmo MAC Address: 00:e0:4c:53:44:58. Isso gera problemas no Linux para utilizar as interfaces. No caso do Ubuntu 14.04 a primeira interface aparece como ethX e as outras como renameX. No Windows o driver que vem no CD do fabricante mascara automaticamente o MAC da placa. O objetivo desse tutorial é explicar uma solução improvisada para resolver esse problema. A solução foi encontrada no site http://cursos.meslin.com.br/home/academia-cisco/pod-em-casa e não foi desenvolvida por mim. Se alguém tiver uma solução melhor por favor editem este artigo.

  • Problema1: interface Xing Ling com o mesmo MAC Address se colocamos as três juntas no mesmo host não conseguimos configurá-las corretamente. São identificadas com o nome de renameX. (O procedimento para resolver esse problema é um improviso, ainda não funciona 100%).
  • Problema2: Interfaces com o mesmo MAC Address na mesma rede. Uso de várias Interfaces em hosts diferentes.

Para quem ainda não comprou as interfaces no site do GNS3.net mostra um lab feito com interfaces USB que funcionam sem problemas: http://www.gns3.net/articles/ccie-routing-switching-lab/usb-to-ethernet-network-adapters-option/ GNS3.net

Obs.
Esse procedimento foi feito na distribuição Ubuntu e o nome e local dos arquivos correspondentes pode variar.

Procedimento problema 1

Passo 1:

Criar um arquivo de nome pcm.sh na pasta /root/ com o seguinte conteúdo:

 #!/bin/bash
 
 # Placa Chinesa Meslin
 # Adicionar a regra do UDEV em /etc/udev/rules.d
 # USB device 0x066b:0x20f9 (usb)
 # SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:09:72:83:62:58", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth5"
 
 DEBUG=2 # set to 1 for debugging output
 NOMESCRIPT="PLACA CHINESA DO MESLIN"  # Usado no logger
 
 PLACA="$1" #nome da placa (ethX)
 NUM="$2"  # numero da placa (X)
 if [ $3 -eq 1 ]; then MAC="00:09:72:83:62:0"; fi
 if [ $3 -eq 2 ]; then MAC="00:e0:4c:53:44:0"; fi
 LOGFACILITY="kernel.info" # for debugging output
 
 if [ $DEBUG -ge 0 ]; then logger "$LOGFACILITY" "$NOMESCRIPT" Placa nova: "$PLACA"; fi
 if [ $DEBUG -ge 0 ]; then logger "$LOGFACILITY" "$NOMESCRIPT" NUM: "$NUM"; fi
 
 ifconfig $PLACA hw ether $MAC$NUM

Passo 2:

Dar autorização de execução para o arquivo pcm.sh:

$ sudo chmod +x /root/pcm.sh

Passo 3:

Criar um arquivo 60-pcm.rules na pasta /etc/udev/rules.d/ com o seguinte conteúdo:

# pcm.sh <nome da interface ethX> <numero da interface eth> <1 -> placa chinesa, 2 -> placa brasileira vinda da china>
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:09:72:83:62:58", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="?*", RUN+="/root/pcm.sh %k %n 1", NAME="eth%n"

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:e0:4c:53:44:58", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="?*", RUN+="/root/pcm.sh %k %n 2", NAME="eth%n"

Passo 4:

Se já tivermos plugado a interface usb/ethernet alguma vez no computador, no arquivo /etc/udev/70-persistent-net.rules haverá uma entrada, apagamos ela para que não seja carregada (o arquivo 60-pcm.rules é carregado primeiro por ter um número menor).

# USB device 0x:0x (dm9601)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:e0:4c:53:44:58", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

Depois é desligar e ligar o sistema.

Quando o computador fizer o próximo boot ele vai ler o 60-pcm.rules antes do 70-persistent-net.rules, então vai chamar o script pcm.sh que irá renomear o MAC das interfaces no modelo 00:e0:4c:53:44:0X sendo X o número da interface. Tipo a primeira interface seria 00:e0:4c:53:44:01 e a segunda seria com o final do MAC como 02 e assim por diante.

Procedimento problema 2

Esse procedimento não vai resolver vários USBs na mesma máquina, mas pode ser usado no caso de haver múltiplos UBS/ethernet desse fabricante na mesma rede em computadores diferentes.


Em cada computado vamos editar o arquivo 70-persistent-net.rules dessa forma mudando o MAC para cada PC:

computador 1:

# USB device 0x0fe6:0x9700 (usb)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:e0:4c:53:44:58", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1", RUN="/sbin/ifconfig eth1 hw ether 00:e0:4c:53:44:59"


Computador 2:

# USB device 0x0fe6:0x9700 (usb)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:e0:4c:53:44:58", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1", RUN="/sbin/ifconfig eth1 hw ether 00:e0:4c:53:44:60"

e assim por diante. Então essas interfaces podem ser usadas em diferentes PCs.

Fontes

Cursos Meslin Acessado em 8/12/2014

GNS3.net Acessado em 8/12/2014

Linux Questions Acessado em 8/12/2014