Como identificar os NICs que estão conectados ao mesmo switch de uma caixa do Linux?

15

Configuração inicial

Como administrador do Linux, você instalou uma nova caixa Linux com 6 NICs eth0 a eth5. A interface eth0 está configurada corretamente e todas as outras interfaces estão atualizadas, mas sem endereço IP. Os caras da rede simplesmente conectaram quatro cabos a essa caixa. Dois cabos LAN são usados para conectar a caixa à rede de produção e dois são usados para conectar a caixa a uma rede privada. Você só sabe que a eth0 está conectada à rede de produção. Mas você não sabe qual outra NIC está conectada ao mesmo switch, pois há diferentes gerações de servidores e / ou os caras da rede usam as NICs erradas para suas conexões.

Tarefa em mãos

Como essa configuração é típica de sua infraestrutura, você deseja automatizar a configuração de interfaces de ligação. Agora você tem a tarefa de detectar quais NICs não estão conectadas e quais NICs estão vinculadas ao mesmo switch para que elas possam ser ligadas. Você tem acesso apenas a caixas Linux e não pode consultar as opções.

Idéias

Detectar o status do link é fácil:

ethtool $device | grep 'Link detected' | cut -d ':' -f 2

Mas como combinar os dispositivos conectados ao mesmo switch?

No HP-UX existe uma ferramenta para esse propósito chamada linkloop [1]. A ferramenta oficial do Linux está faltando (existe um projeto antigo do SourceForce, no entanto).

Possíveis soluções que já me ocorreram são:

  1. Ouça todas as interfaces com o tcpdump. Crie e envie um pacote ICMP (broadcast). As interfaces que vêem esse pacote precisam estar conectadas ao mesmo switch. - > precisa de sugestões de ferramentas simples que podem ser usadas para isso. Eu gostaria de usar comandos de shell simples ou Python para o script.

  2. Tente falar com uma caixa externa via algum protocolo fácil (HTTP?) e veja se há uma resposta. - > Propenso a erros e dependente de uma caixa externa.

Você tem mais idéias ou sugestões sobre como resolver essa tarefa?

Obrigado antecipadamente por todos os comentários!

[1] link

    
por Reiner Rottmann 02.04.2013 / 19:23

4 respostas

10

Os comutadores já podem estar enviando as informações desejadas. Se eles são switches da Cisco, por padrão, eles estarão usando um processo chamado CDP (Cisco Discovery Protocol), que fornecerá informações sobre o switch onde ele está conectado.

Você pode usar o tcpdump para visualizar essas informações com o seguinte (substituindo a interface apropriada):

tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether[20:2] == 0x2000'

A versão padrão do CDP é o LLDP (protocolo de descoberta de camada de link). Alguns fornecedores terão isso ativado por padrão e outros desativados, para que sua milhagem varie. Existem algumas implementações de LLDP para Linux, mas se você quiser algo semelhante ao acima, você pode usar isto (configurar o LLDP em um switch Cisco e testar o abaixo, que é mais consistente com o acima):

tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether proto 0x88cc'

Exceto isso, eu diria que uma modificação da opção 1 que você fornecer pode funcionar, no entanto, em vez de enviar um ICMP de broadcast, você pode tentar um ICMP normal (para um host que não esteja na tabela ARP) e capturar o ARP pacotes. Se o pedido ARP é enviado eth0 e você recebe em eth1 e eth3, então você sabe que eles estão na mesma VLAN. O comando mais simples para isso é o seguinte:

tcpdump -i eth0 arp
    
por 02.04.2013 / 20:00
3

Se o switch se comunicar com você usando o LLDP, você poderá executar o LLDP e encontrar mais informações nele.

    
por 02.04.2013 / 19:34
3

Se os switches forem dispositivos cisco, talvez você possa obter informações do CDP, desde que eles estejam anunciando / transmitindo informações do cdp

por exemplo   ferramentas cdp ou cdpr

    
por 02.04.2013 / 20:07
1

Por que não basta baixar e criar a ferramenta linkloop ? Não é tão antigo ...

Caso contrário, usaria apenas alguma ferramenta que transmitisse pela camada 2 e verifique se você a recebe via tcpdump.

Enviar um pacote ICMP de transmissão é fácil ping -b 192.168.1.255

    
por 02.04.2013 / 22:31