Linux에 다음 두 경로가있는 경우 :
default via 192.168.1.1 dev enp58s0f1
default via 192.168.16.1 dev wlp59s0 proto static metric 600
첫 번째 것이 사용되기를 기대하지만, 그렇지 않습니다. 두 번째 것이 대신 사용됩니다.
이것을 이것을 바꾸면 :
default via 192.168.1.1 dev enp58s0f1 proto static metric 100
default via 192.168.16.1 dev wlp59s0 proto static metric 600
그런 다음 예상대로 작동합니다. “메트릭 없음”은 메트릭 0 대신 숫자보다 나쁜 (높은) 메트릭 인 것 같습니다.
무슨 일이야? Linux 또는 네트워킹 표준에만 해당됩니까?
미리 감사드립니다.
답변
첫 관찰에 대해 확신하십니까? 무엇 않습니다 ip route show또는 route -n다음 보여? proto static첫 번째 경우에 추가하면 결과가 변경됩니까 ?
나는 그것이 0리눅스에서 기본값 이라고 명시 적으로 적어도 두 가지 자원을 발견했다 .
- http://0pointer.de/lennart/projects/ifmetric/ : Linux 커널에서 라우트의 기본 메트릭은 0이며 가장 높은 우선 순위를 의미합니다.
- http://www.man7.org/linux/man-pages/man8/route.8.html : 이 옵션을 지정하지 않으면 inet6 (IPv6) 주소 패밀리에 대한 메트릭의 기본값은 ‘1’이며, inet (IPv4)의 경우 기본값은 ‘0’입니다. (사용할 때 기본값이 다를 수
iproute2있지만 이러한 소스를 분석 하면 기본값이 표시되지 않음 을 암시합니다 )
리눅스 커널 해커는 분명히 그것을 분류해야합니다.
또한 기본적으로 선택되는 것은 OS마다 다릅니다. 예를 들어이 기사 ( https://support.microsoft.com/en-us/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes )는 Windows가 기본 메트릭을 선택 함을 보여줍니다. 링크의 대역폭을 기반으로합니다.
답변
이러한 경로는 서로 다른 서브넷에 있기 때문에 여기에는 메트릭보다 더 많은 관련이 있습니다. 원래 트래픽이 192.168.1.1 서브넷에있는 경우, 예를 들어, 및 경로를 통해 일치 그런 다음, 당신의 라우팅 테이블에서 일치하는 비 기본 경로가 긴 접두사 일치 메트릭이 적으로 간주되기 전에.
기본이 아닌 경로가 일치하지 않는다고 가정하면 메트릭 이 없는 것은 커널에서 메트릭이 0 인 것으로 해석되므로 우선 순위가 가장 높은 경로 로 해석 해야 합니다. 일부 라우팅 데몬은 나중에 기본 메트릭을 1024와 같은 다른 값으로 변환하기 때문에 단순한 견해이지만, 이것이 당신과 당신의 이름없는 배포판에서 일어나는 일이라고 생각합니다.
ip route메트릭이 전혀 표시되지 않으면 route -nnet-tools 패키지 또는에서 이전 명령을 사용하여 실제로 0인지 확인할 수 있습니다 cat /proc/net/route. 그러나이 출력이 라우팅 데몬이 0 메트릭 값을 발견했을 때 내부적으로 사용하는 것과 반드시 일치하지는 않습니다.
또한 경로를 만드는 방법도 중요합니다. ip routenetlink API를 route사용하고 ioctl 을 사용합니다. 두 접근 방식간에 기본 메트릭을 작성하는 방법에 대한 코드는 다른 메트릭 값을 생성합니다. 예를 들어 ip routeRHEL 7에서 IPv6 기본 경로를 만들면 메트릭 값이 1024가되고 동일한 경로를 만들면 route메트릭이 1이됩니다.
에서 레드햇 :
- route 메트릭으로 route 명령에 전달 된 것이 없으면 명령 자체에서 값 1이 사용됩니다.
- 라우팅 메트릭으로 ip 명령에 아무것도 전달되지 않으면 속성이 전혀 작성되지 않으며 커널은이를 0으로 이해하며 나중에 기본값으로 1024로 변환됩니다.