Linux 라우팅 테이블의 대상에 대한 *모든* IP 경로 나열

Linux 라우팅 테이블의 대상에 대한 *모든* IP 경로 나열

ip route get 2607:f8b0:4005:804::200e에 도달할 수 있는 가장 좋은(가장 긴 접두사) 경로가 표시되지만 google.com표시되지 않습니다.모두나를 그곳으로 데려갈 수 있는 길.

지금은 를 사용하고 있습니다 ip -6 route show | grep 2607:f8b0:. 그러면 올바른 경로가 인쇄되지만 /32의 다른 모든 경로도 인쇄됩니다.

더 좋은 방법이 있어야 합니다.

답변1

Linux에서 접두사와 일치하는 모든 경로를 나열하는 쉬운 방법이 있습니다.

ip -6 route list match 2607:f8b0:4005:804::200e table all

그러면 모든 테이블의 지정된 대상에 대한 가능한 모든 경로가 나열됩니다(더 이상 특정 경로가 없는 경우 기본 경로 포함). 분명히 이것은 IPv4에도 적용됩니다.

추신: 내 답변이 너무 늦었다는 것을 알고 있으며 아마도 이미 스스로 생각해 보셨을 것입니다. 그럼에도 불구하고 이 질문을 한 사람이라면 누구나 도움이 될 것입니다 :)

답변2

내 설명이 정확하다면 특정 ipv6 주소(google.com)가 라우팅 테이블 항목(네트워크/넷마스크)에 포함되어 있는지 확인하고, 그렇다면 경로를 인쇄하고 싶을 것입니다.

그렇다면 다음을 수행하십시오.

  1. 예를 들어 google.com의 ipv6 주소를 가져옵니다.host -t aaaa

  2. 모든 ipv6 경로 목록을 가져옵니다. 예를 들어 ip -6 route show.

  3. 각 ipv6 경로에 대해 google.com의 ipv6 주소가 해당 네트워크 및 넷마스크에 포함되어 있는지 확인하세요.

Perl 모듈 에는 IP 주소가 네트워크 블록(또는 네트워크 블록 배열)에 있는지 확인하는 기능이 Net::CIDR있습니다 . 이는 ipv4 및 ipv6 주소 모두에서 작동합니다. DNS 조회를 수행하는 모듈 도 있고 아마도 다양한 라우터/라우팅 데몬에서 라우팅 테이블을 가져오는 모듈도 있습니다. Perl에는 할 ​​수 있는 거의 모든 작업을 수행할 수 있는 모듈(또는 2개 또는 12개)이 있습니다. 그럼에도 불구하고 출력에서 ​​필요한 것을 추출하는 것은 쉽습니다 .cidrlookup()perlNet::DNSip -6 route show

참고: 대상 IP가 포함된 네트워크/마스크의 라우팅 테이블에 특정 경로가 존재하는 일치 항목만 찾습니다. 물론 "기본" 경로에는 모든 IP가 포함됩니다.

을 사용하고 싶지 않다면 perl다음도 있습니다.libcidr. 직접 작성하는 것은 그리 어렵지 않습니다(또는 누군가가 이미 작성했을 수도 있습니다).

관련 정보