Linux 라우팅이 예상 규칙을 따르지 않습니다.

Linux 라우팅이 예상 규칙을 따르지 않습니다.

다음과 같은 라우팅 규칙이 있습니다(display 사용 route -n).

Kernel IP routing table
Destination  Gateway    Genmask         Flags Metric Ref Use Iface
0.0.0.0      10.0.2.1   0.0.0.0         UG    100    0     0 enp0s3
10.0.2.0     0.0.0.0    255.255.255.192 U     100    0     0 enp0s3.100
10.0.2.0     0.0.0.0    255.255.255.0   U     100    0     0 enp0s3
169.254.0.0  0.0.0.0    255.255.0.0     U     1000   0     0 enp0s3

이 인터페이스는 enp0s3.100VLAN ID가 100인 인터페이스입니다.

10.0.2.70에 대한 경로를 얻으려고 하면 VLAN 인터페이스를 사용할 것으로 예상하지만 다음과 같은 기능은 사용하지 않습니다.

# ip route get 10.0.2.70
10.0.2.70 dev enp0s3  src 10.0.2.11 
    cache

여기서 가장 긴 접두사 일치가 사용되지 않는 이유를 아는 사람이 있습니까?

답변1

첫째, 단순히 명령을 사용하는 것이 가장 좋으 므로 라우팅 테이블을 나열하려면 명령을 사용 하거나 간단히 ip명령을 사용해야 합니다 .ip route showip r

이 경우 VPN의 경로는 10.0.2.0/255.255.255.192 또는 10.0.2.0/26입니다. 서브넷은 0 - 63입니다. 귀하의 예제 대상 10.0.2.70은 다음에 속합니다.외부이 범위에 있으므로 VPN을 통해 라우팅하는 대신 enp0s3에서 다음으로 더 구체적인 경로 10.0.2.0/24를 사용합니다.

"가장 긴 접두사 일치"를 언급했지만 일반적으로 "가장 구체적인 일치", 즉 범위가 가장 작은 곳은 가장 긴 접두사를 의미합니다. 그러나 위에서 언급한 것처럼 테스트 중인 IP 주소는 생각하는 접두사 범위에 속하지 않습니다.

netmask데비안(및 그 파생물)에는 상황을 더 명확하게 만드는 데 도움이 되는 매우 유용한 유틸리티가 있습니다 :

$ netmask -r 10.0.2.0/255.255.255.192
       10.0.2.0-10.0.2.63       (64)

여기에는 ip route show전체 그림이 표시되지 않으며 정책 기반 라우팅이 적용될 수 있습니다. 또한 모든 라우팅 규칙을 나열해야 합니다. 이는 일반적인 출력입니다.

$ ip rule show
0:  from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default 

그런 다음 다음과 같이 특정 테이블(여기서는 "로컬" 테이블)의 라우팅 항목을 나열할 수 있습니다.

$ ip route show table local

이를 정책 기반 라우팅이라고 합니다. 일반적으로 이 기능은 사용하지 않지만(예를 들어 여러 인터넷 연결이 있는 경우 이 기능을 사용함) 직접 구성하지 않은 시스템의 라우팅 문제를 해결할 때 알아두면 도움이 될 수 있습니다.

관련 정보