Linux 박스에서 동일한 스위치에 연결된 NIC를 식별하는 방법은 무엇입니까?


15

초기 설정

Linux 관리자는 6 개의 NIC eth0 ~ eth5를 가진 새로운 Linux 박스를 설치했습니다. eth0 인터페이스가 올바르게 구성되었고 다른 모든 인터페이스는 현재 작동하지만 IP 주소는 없습니다. 네트워크 담당자는이 상자에 케이블 4 개를 간단히 연결했습니다. 상자를 프로덕션 네트워크에 연결하는 데 2 ​​개의 LAN 케이블이 사용되고 상자를 개인 네트워크에 연결하는 데 2 ​​개가 사용됩니다. eth0이 프로덕션 네트워크에 연결되어 있다는 것만 알고 있습니다. 그러나 다른 서버 세대가 있거나 네트워크 담당자가 연결에 잘못된 NIC를 사용함에 따라 동일한 스위치에 어떤 다른 NIC가 연결되어 있는지 알 수 없습니다.

수작업

이 설정은 인프라에 일반적인 것이기 때문에 본딩 인터페이스 구성을 자동화하려고합니다. 이제 전혀 연결되지 않은 NIC와 동일한 스위치에 연결된 NIC를 감지하여 본딩 될 수 있습니다. Linux 상자에만 액세스 할 수 있으며 스위치를 쿼리 할 수 ​​없습니다.

아이디어

링크 상태를 쉽게 감지 할 수 있습니다.

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

그러나 동일한 스위치에 연결된 장치를 일치시키는 방법은 무엇입니까?

HP-UX에는 linkloop [1] 이라는 도구가 있습니다. 공식적인 리눅스 도구가 없습니다 (그러나 오래된 SourceForce 프로젝트가 있습니다).

이미 내 마음에 온 가능한 해결책은 다음과 같습니다.

  1. tcpdump를 사용하여 모든 인터페이스에서 청취하십시오. ICMP (브로드 캐스트) 패킷을 제작하여 보냅니다. 패킷을 보는 인터페이스는 동일한 스위치에 연결되어야합니다. -> 간단한 도구에 대한 제안이 필요합니다. 스크립팅에 일반 쉘 명령 또는 Python을 사용하고 싶습니다.

  2. 쉬운 프로토콜 (HTTP?)을 통해 외부 상자와 대화하고 응답이 있는지 확인하십시오. -> 오류가 발생하기 쉽고 외부 상자에 따라 다릅니다.

이 작업을 해결하는 방법에 대한 추가 아이디어 나 제안이 있습니까?

모든 의견에 미리 감사드립니다!

[1] http://linux.die.net/man/1/linkloop


1
이건 정말 숙제 같은 냄새입니다. 프로덕션 환경에서 직면하고있는 실제 문제입니까?
— voretaq7

2
실제 문제와 성가신 문제를 추가 할 수 있습니다. 나는 오랫동안 학교를
— 다니지 않았다

— OK-

답변:


10

스위치가 이미 원하는 정보를 전송하고있을 수 있습니다. Cisco 스위치 인 경우 기본적으로 CDP (Cisco Discovery Protocol)라는 프로세스를 사용하여 연결된 스위치에 대한 정보를 제공합니다.

tcpdump를 사용하여 다음을 통해이 정보를 볼 수 있습니다 (적절한 인터페이스로 대체).

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

CDP의 표준 기반 버전은 LLDP (Link Layer Discovery Protocol)입니다. 일부 공급 업체는 기본적으로이 기능을 사용하고 다른 공급 업체는 해제하므로 마일리지가 다를 수 있습니다. Linux에 대한 LLDP 구현이 있지만 위와 비슷한 것을 원할 경우이를 사용할 수 있습니다 (Cisco 스위치에서 LLDP를 설정하고 아래에서보다 일관성이있는 아래를 테스트했습니다).

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

이를 제외하고는 제공하는 옵션 1의 수정이 작동 할 수 있지만 브로드 캐스트 ICMP를 전송하는 대신 일반 ICMP (ARP 테이블에없는 호스트에 대한)를 시도하고 ARP 패킷을 캡처 할 수 있습니다. ARP 요청이 eth0으로 전송되고 eth1 및 eth3에서 요청을 받으면 동일한 VLAN에있는 것입니다. 가장 간단한 명령은 다음과 같습니다.

tcpdump -i eth0 arp

1
실제로이 솔루션을 사용하여 백그라운드에서 스레드로 tcpdumps를 실행하는 작은 파이썬 스크립트를 작성한 다음 arp 요청을 보내고 어떤 인터페이스가 어떤 src mac에서 arp 패키지를 수신하는지 확인합니다. 작동하지만 모든 시간 초과로 시간이 걸립니다.
— Reiner Rottmann

핑 시간 초과에 대해 이야기한다고 가정합니까? 시간 초과를 1 초 미만으로 줄이는 옵션으로 fping 또는 nmap을 시도 할 수 있습니다. 예를 들어 "fping -c1 -t200 192.168.0.1"또는 "nmap -sP --max-retries = 1 --host-timeout = 200ms 192.168.0.1"입니다.
— YLearn

3

스위치는 LLDP를 사용하여 통신 할 경우, 당신은 실행할 수 있습니다 LLDP를 거기에 자세한 내용을 찾아.



1

왜 linkloop도구를 다운로드하여 빌드하지 않습니까? 그렇게 오래되지 않았습니다 ...

그렇지 않으면 계층 2를 통해 브로드 캐스트하고 tcpdump를 통해 수신하는지 확인하는 도구를 사용합니다.

브로드 캐스트 ICMP 패킷을 보내는 것은 쉽습니다. ping -b 192.168.1.255


방금이 작업을 시도했지만 2016 년 Ubuntu 14에서 실패했습니다 .YMMV.
— Hack Saw
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.