Existe alguma maneira de trocar as interfaces de rede ( eth1 <-> eth0 ) após a instalação do sistema.
Minha novíssima Debian 6.0 instala a placa de rede PCI atribuída como " eth0 " e o dispositivo de rede integrado às placas-mãe como " eth1 " por padrão. O problema é que eu quero usar o dispositivo integrado como interface de rede padrão ( eth0 ).
Eu já editei:
/etc/udev/rules.d/70-persistent-net.rules
para trocar os nomes e tudo parece estar correto e a rede está funcionando, mas os programas ainda estão tentando usar a placa de rede PCI (que agora é " eth1 ") como a interface padrão. Por exemplo, o iftop agora tenta usar " eth1 " como dispositivo padrão, pois usou " eth0 " antes da troca.
Isso é um problema puramente de software, pois os aplicativos estão tentando usar o primeiro dispositivo encontrado como dispositivo padrão, apesar da nomenclatura da interface ou existe alguma maneira de corrigir isso configurando o sistema operacional?
edit: escrevi um pequeno aplicativo para imprimir iflist e o dispositivo PCI ( eth1 ) surgiu antes de " eth0 ". Alguma idéia de como trocar a ordem do dispositivo.
edit: Encontrei um tópico sobre o mesmo problema e tentei tudo o que eles sugeriram e nenhuma das soluções está funcionando, exceto pela troca dos nomes "virtualmente".
fonte
Respostas:
Estou respondendo à minha própria pergunta agora porque finalmente encontrei uma solução alternativa para esse problema.
Descobri que é possível reordenar os dispositivos descarregando os drivers e carregando-os na ordem correta.
Primeiro método (força bruta):
Portanto, o primeiro método que criei foi simples: forçar o recarregamento do driver com o script init.d.
O script init a seguir foi feito sob medida para o Debian 6.0, mas o mesmo princípio deve funcionar em praticamente qualquer distribuição usando scripts init.d apropriados.
Em seguida, o script deve ser adicionado ao diretório de nível de execução apropriado. Isso pode ser feito facilmente no Debian com o comando " update-rc.d ". Por exemplo:
update-rc.d reorder-nics start S
Segundo método (melhor eu acho):
Eu também achei uma maneira um pouco mais elegante (pelo menos para os sistemas Debian e Ubuntu).
Primeiro Verifique se o kernel não carrega automaticamente os drivers da NIC. Isso pode ser feito criando um arquivo de lista negra no
/etc/modprobe.d/
. Eu criei um arquivo chamado "disable-nics.conf
". Observe que os arquivos em/etc/modprobe.d/
devem ter.conf
sufixo. A nomeação de módulos/etc/modprobe.d/blacklist.conf
também não afeta o carregamento automático de módulos pelo kernel, portanto você precisa criar seu próprio arquivo.Em seguida, execute ' depmod -ae ' como root
Recrie seu initrd com ' update-initramfs -u '
E, finalmente, adicione os nomes dos drivers na ordem corrigida no arquivo / etc / modules .
As alterações devem entrar em vigor após a próxima inicialização.
A reinicialização não é necessária; é fácil alternar os dispositivos com o seguinte comando (como root, é claro):
Alguns links úteis que encontrei ao pesquisar a solução:
fonte
Você pode usar o
netdev=
parâmetro de linha de comando do kernel (você precisa passá-lo para o kernel no grub) para instruir o kernel a vincular um dado irq a uma determinada interface, por exemplo:netdev=irq=2,name=eth0
fonte
forcedeth 0000:00:04.0: ifname eth1, PHY OUI 0x57d @ 1, addr 40:40:00:40:40:40
. Este não é um problema muito sério, mas realmente atrapalha minhas engrenagens, porque o cartão integrado é de 1GB e deve ser o dispositivo padrão.É provável que você precise acessar os arquivos de configuração de cada programa afetado e alterar 'eth1' para 'eth0.' Os padrões desses programas são configurados quando são instalados ou executados pela primeira vez com as NICs detectadas no momento.
Eu uso o Linux como roteador e tive esse problema ao usar scripts. Agora tenho um fragmento de script agradável chamada
netconf
essa fonte I no para qualquer outro script sempre que eu precisar usar nomes NIC, este arquivo me dá uma localização central para especificá-los (ou sejaLAN_IFACE=eth0
,WAN_IFACE=eth1
, etc.)fonte
Você não pode alterar qual interface é usada por padrão em aplicativos como
iftop
. Eles chamam a função de biblioteca Cif_nameindex
e usam o primeiro elemento na matriz retornada por padrão. GNU libc'sif_nameindex
no Linux é um invólucro fino em torno doSIOCGIFCONF
ioctl . Isso retorna as interfaces em uma ordem fixa, com base na ordem em que os drivers de rede foram inicializados e na ordem em que cada driver detectou cada dispositivo.Se você realmente não deseja passar
-i
paraiftop
programas semelhantes, é possível criar um pequeno invólucroif_nameindex
que reordene os elementos na lista retornada, comLD_PRELOAD
. Eu chamaria isso de muito mais problemas do que vale a pena.fonte
if_nameindex
função. Talvez eu apenas deixe por agora. Felizmente, alguns aplicativos realmente verificam o nome da interface. Por outro lado, alguns aplicativos nem têm opções de configuração padrão, então apenas tenho que usar a opção -i. Eu só estava me perguntando por que a opção de carregamento do kernelnetdev=irq=22,name=eth0
não funciona? Eu pensei que deveria ser possível alterar a ordem da NIC na inicialização do kernel.for_each_netdev
macro), as interfaces são enumeradas na ordem em que os drivers são carregados (aproximadamente). Suas interfaces provavelmente usam drivers diferentes; portanto, é necessário organizar o carregamento dos drivers na ordem desejada. Eu esperaria que isso fosse difícil, especialmente se você quiser que seu tweak funcione em uma atualização do kernel.Se eles tiverem drivers diferentes, pelo menos no dia em que você poderia colocar em um dos arquivos de configuração do módulo:
Esse é um conhecimento bastante antigo, mas pode ajudar.
fonte
Dê uma olhada no pacote 'ifrename'. Isso permite renomear os nomes de interface com base em uma variedade de informações, como endereço MAC da interface, driver, interrupção ..., configurado em um arquivo / etc / iftab.
Alguns exemplos da página do manual:
fonte