동일한 인터페이스에 있는 두 개의 IP 주소 중 어느 주소가 사용 중인지 확인

동일한 인터페이스에 있는 두 개의 IP 주소 중 어느 주소가 사용 중인지 확인

eth0에 DHCP를 사용하도록 설정된 임베디드 Linux 시스템이 있지만 DHCP에서 IP 주소를 얻지 못하는 경우를 대비해 링크 로컬 IP 주소를 백업 주소(eth0:1)로 구성했습니다.

쉘 스크립트에서 어떤 IP 주소가 사용되고 있는지 쉽게 확인할 수 있는 방법이 있습니까?

내가 얻은 가장 가까운 것은 다음과 같습니다.

$ ip route get 1
1.0.0.0 via 192.168.0.100 dev eth0  src 192.168.0.133
    cache
$ ifconfig eth0 0.0.0.0   # Simulate no IP obtained from DHCP
$ ip route get 1                                                       
1.0.0.0 via 192.168.0.100 dev eth0  src 169.254.197.131   
    cache

이는 사용 중인 IP 주소("src" 필드)를 올바르게 식별합니다. 그러나 이는 기본 게이트웨이가 구성된 경우에만 작동하며 어떤 이유로 DHCP를 사용할 수 없는 경우에는 작동하지 않습니다.

기본 게이트웨이가 구성되어 있지 않은 경우에도 어떤 IP 주소가 사용 중인지 어떻게 알 수 있나요?

답변1

주문하다ip route get ADDRESS 하다기본 게이트웨이를 구성하지 않아도 작동합니다. 예를 들어, eth0: 에 다음 주소가 구성되어 있고 10.0.7.139/24기본 169.254.1.2/16경로가 삭제되면

$ ip route get 10.0.7.222
10.0.7.222 dev eth0 src 10.0.7.139 
    cache

$ ip route get 169.254.55
169.254.55.0 dev eth0 src 169.254.1.2 
    cache

$ ip route get 1
RTNETLINK answers: Network is unreachable

마지막 대답은 정확합니다. 주소 1.xxx에 대한 호스트가 없으면 호스트에 연결할 수 없습니다. 명령이 작동하지 않는 것이 아니라 ip route get네트워크 구성이 잘못된 것입니다.

"링크 로컬"은 단순히 연결된 이더넷 링크 eth0에서만 사용되는 주소를 의미합니다. "나가는" 연결에는 사용하면 안 됩니다.

편집: 아래 설명에 설명이 추가되었습니다.

라우팅 테이블(및 라우팅 테이블만)은 패킷이 대상으로의 이동을 시작하는 방법을 결정합니다. 목적지가 로컬 링크나 로컬 호스트에 있더라도 IP 패킷을 보낼 때 라우팅은 항상 포함됩니다. 라우팅 테이블 항목에는 소스 주소도 포함되어 있으며 경로와 일치하는 주소가 전송된 패킷의 소스 IP 주소로 선택됩니다.

동일한 인터페이스 또는 동일한 주소 범위에 여러 개의 IP 주소가 할당될 수 있지만 그 중 하나만(기본 주소) 일치하는 라우팅 테이블 항목에 나열됩니다.

따라서 ip route get(또는 간접적으로 ip route) 귀하의 질문에 대한 명확한 답변을 제공합니다. ip-route매뉴얼 페이지 에서 : "이 명령은 대상으로의 단일 경로를 취하고 커널이 보는 것과 정확하게 그 내용을 인쇄합니다."

관련 정보