Configuração inicial
Como administrador do Linux, você instalou uma nova caixa do Linux com 6 NICs eth0 a eth5. A interface eth0 está configurada corretamente e todas as outras interfaces estão ativas no momento, mas sem o endereço IP. Os caras da rede simplesmente conectaram quatro cabos a esta 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ê sabe apenas que eth0 está conectado à rede de produção. Mas você não sabe qual outra NIC está conectada ao mesmo comutador, pois há diferentes gerações de servidores e / ou os responsáveis pela rede usam as NICs erradas para suas conexões.
Tarefa em mãos
Como essa configuração é típica para sua infraestrutura, você deseja automatizar a configuração das 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 comutador para que possam ser ligadas. Você tem acesso apenas às caixas do Linux e não pode consultar os comutadores.
Ideias
É fácil detectar o status do link:
ethtool $device | grep 'Link detected' | cut -d ':' -f 2
Mas como combinar os dispositivos conectados ao mesmo comutador?
No HP-UX, existe uma ferramenta para esse fim chamada linkloop [1]. A ferramenta oficial do Linux está ausente (existe um projeto antigo do SourceForce).
As possíveis soluções que já me vieram à mente são:
Ouça em todas as interfaces com o tcpdump. Crie e envie um pacote ICMP (broadcast). As interfaces que veem esse pacote precisam estar conectadas ao mesmo switch. -> precisa de sugestões de ferramentas simples que possam ser usadas para isso. Eu gostaria de usar comandos de shell simples ou Python para os scripts.
Tente conversar com uma caixa externa através de um protocolo fácil (HTTP?) E veja se há uma resposta. -> Erro propenso e dependente de uma caixa externa.
Você tem mais idéias ou sugestões sobre como resolver esta tarefa?
Agradecemos antecipadamente por todos os comentários!
Respostas:
Os switches já podem estar enviando as informações desejadas. Se forem comutadores Cisco, por padrão, eles usarão um processo chamado CDP (Cisco Discovery Protocol) que fornecerá informações sobre o comutador em que está conectado.
Você pode usar o tcpdump para visualizar essas informações com o seguinte (substituindo a interface apropriada):
A versão padrão do CDP é o LLDP (protocolo de descoberta da camada de link). Alguns fornecedores terão isso ativado por padrão e outros desativados, portanto sua milhagem varia. Existem algumas implementações de LLDP para Linux, mas se você quiser algo semelhante ao acima, você pode usá-lo (configure o LLDP em um switch Cisco e teste o abaixo, o que é mais consistente com o anterior):
Exceto isso, eu diria que uma modificação da opção 1 que você fornece pode funcionar, no entanto, em vez de enviar um ICMP de transmissão, você pode tentar um ICMP normal (para um host que não esteja na tabela ARP) e capturar os pacotes ARP. Se a solicitação ARP for enviada eth0 e você a receber em eth1 e eth3, você saberá que elas estão na mesma VLAN. O comando mais simples para isso é o seguinte:
fonte
Se o switch se comunicar com você usando o LLDP, você poderá executar o LLDP e encontrar mais informações lá.
fonte
Se os comutadores forem dispositivos Cisco, você poderá obter informações sobre o CDP, desde que estejam anunciando / transmitindo informações sobre o CDP
por exemplo, ferramentas cdp ou cdpr
fonte
Por que não baixar e construir a
linkloop
ferramenta? Não é tão velho ...Caso contrário, eu usaria apenas uma ferramenta que será transmitida pela camada 2 e verificará se você a recebe via tcpdump.
É fácil enviar um pacote ICMP de transmissão
ping -b 192.168.1.255
fonte