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.