다음과 같은 라우팅 규칙이 있습니다(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.100
VLAN 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 show
ip 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
이를 정책 기반 라우팅이라고 합니다. 일반적으로 이 기능은 사용하지 않지만(예를 들어 여러 인터넷 연결이 있는 경우 이 기능을 사용함) 직접 구성하지 않은 시스템의 라우팅 문제를 해결할 때 알아두면 도움이 될 수 있습니다.