sexta-feira, 8 de agosto de 2008

Renomeando interfaces de rede com nameif no Linux

Um problema que geralmente acontece no Linux é a utilização de mais de uma placa de rede no mesmo computador e sendo estas de mesmo modelo/fabricante.

O Linux meio que se embaralha na hora de atribuir o nome das interfaces (ethX) e geralmente na hora do reboot ele acaba trocando os nomes da interfaces.

Para resolver este problema basta fazer um script para ser carregado na inicialização da rede.

O comando nameif serve para modificar o nome da interface de rede. Pode-se atribuir qualquer nome.

Deve-se criar dois arquivos de configuração na pasta /etc para ser utilizado junto com o nameif, o arquivo mactab-clean e o mactab.

O conteúdo do mactab-clean vai ser apenas para desassociar qualquer nome que possa ter sido dado as interfaces de rede e o mactab vai ter a nomeação na ordem correta das interfaces de rede.

Exemplo:

Tenho as seguintes placas de rede no meu computador:

Primeira placa de rede 3Com possui o MAC 00:00:00:00:00:00
Segunda placa de rede Realtek possui o MAC 11:11:11:11:11:11
Terceira placa de rede Via possui o MAC 22:22:22:22:22:22
Quero que a nomenclatura das placas obedeça a seguinte ordem:
Placa de rede Via -> eth0
Placa de rede 3Com -> eth1
Placa de rede Realtek -> eth2
Primeiro passo é criar o arquivo /etc/mactab-clean com o seguinte conteúdo:

teste0 22:22:22:22:22:22
teste1 00:00:00:00:00:00
teste2 11:11:11:11:11:11

Na primeira coluna pode colocar qualquer nome para atribuir as placas de rede menos eth pois está justamente limpando o eth para ser utilizado no próximo passo. Na segunda coluna, separada por tabulação, coloca-se os MACs das placas de rede.

Agora cria-se o arquivo /etc/mactab com o seguinte conteudo:

eth0 22:22:22:22:22:22
eth1 00:00:00:00:00:00
eth2 11:11:11:11:11:11

Segue a mesma formatação do primeiro arquivo que foi criado, mas nesse já vai estar associado o nome da interface ao MAC da mesma na ordem que quiser.

A parte de configuração está pronta. Agora deve-se chamar esses arquivos criados com o nameif na hora de carregar as configurações de rede. No Slackware o arquivo que inicia a rede fica em /etc/rc.d/rc.inet1, as outras distribuições devem ter algo parecido.

O comando nameif tem que ser a primeira coisa a ser executada nesse arquivo de inicialização da rede. Para não adicionar muitas linhas nesse arquivo, basta criar um scrit com o seguinte conteúdo:

#!/bin/bash
# Confirmando que as interfaces estão
# realmente desligadas
ifconfig eth0 down
ifconfig eth1 down
ifconfig eth2 down

# Limpando os nomes caso algum já
# tenha sido usado
nameif -c /etc/mactab-clean
sleep 2
# Atribuindo os nomes na ordem
# desejada
nameif -c /etc/mactab

Feito isso, salve o arquivo e de permissão de execução nele. Depois adicione o path completo do arquivo no script de inicialização da rede do seu Linux logo no inicio, antes de executar qualquer comando.