Linux에서 메트릭 없이 라우팅이 있는 메트릭은 무엇입니까?

Linux에서 메트릭 없이 라우팅이 있는 메트릭은 무엇입니까?

(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 전용인가요, 아니면 네트워킹 표준인가요?

미리 감사드립니다.

답변1

첫 번째 관찰이 확실합니까? ip route show그래서 그것은 무엇을 보여줍니까 route -n? 첫 번째 경우에 추가 하면 proto static결과가 바뀌나요?

0이것이 Linux의 기본값임을 명확하게 명시하는 리소스를 두 개 이상 찾았습니다 .

  • 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하지만 이러한 소스를 분석해도 그 값이 표시되지 않습니다.)

이 문제를 해결하려면 Linux 커널 해커가 반드시 필요합니다.

또한 어떤 기본값을 선택하든 운영 체제에 따라 다릅니다. 이 기사(https://support.microsoft.com/en-us/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes)는 예를 들어 Windows가 링크 대역폭을 기반으로 기본 메트릭을 선택하는 것을 보여줍니다.

답변2

이러한 경로는 서로 다른 서브넷에 있으므로 여기에 관련된 측정항목 이상의 내용이 있습니다. 예를 들어 원래 트래픽이 192.168.1.1 서브넷에 있는 경우그리고라우팅 테이블에 일치하는 기본이 아닌 경로가 있는 경우 해당 경로는 다음과 같은 방식으로 일치됩니다.가장 긴 접두사 일치측정항목을 고려하기 전에.

기본이 아닌 경로가 일치하지 않는다고 가정하면 측정항목이 없습니다.~해야 한다커널은 메트릭이 0이므로 우선 순위가 가장 높은 경로로 해석됩니다. 그러나 이는 일부 라우팅 데몬이 나중에 기본 메트릭을 1024와 같은 다른 값으로 변환하므로 단순한 보기입니다. 이것이 당신과 당신의 이름 없는 배포판에 일어났기를 바랍니다.

ip route메트릭이 전혀 표시되지 않으면 net-tools 패키지 또는 를 사용할 수 있습니다 . route -n그러나 cat /proc/net/route이 출력은 메트릭 값이 0일 때 라우팅 데몬이 내부적으로 사용하는 출력과 반드시 ​​일치하지는 않습니다.

또한 경로를 만드는 방법도 중요합니다. ip routenetlink API를 사용하고 routeioctl도 사용합니다. 두 메서드 사이에 기본 표시기를 생성하는 방법에 대한 코드는 서로 다른 표시기 값을 생성합니다. 예를 들어 IPv6 기본 라우팅을 생성하면 ip routeRHEL 7에서 메트릭 값이 1024가 되고, 동일한 라우팅을 생성하면 route메트릭 값이 1이 됩니다.

~에서빨간 모자:

  • 라우팅 명령에 라우팅 메트릭으로 전달되는 항목이 없으면 명령 자체는 값 1을 사용합니다.
  • ip 명령에 경로 메트릭으로 아무것도 전달되지 않으면 속성이 전혀 생성되지 않으며 커널은 이를 0으로 이해하고 나중에 기본값인 1024로 변환합니다.

답변3

Network Manager는 다르게 설정되지 않은 경우 기본적으로 디바이스 유형별로 메트릭을 설정합니다. man 5nm 설정을 참조하세요. 다음은 "metric"이라는 단어로 검색할 수 있는 발췌문입니다. 또한 IP v4와 v6에 따라 다릅니다. 이것이 당신에게 도움이 될지 확실하지 않습니다.

IPv4 설정
IPv4 설정.

   ┌───────────────────┬───────────────────┬───────────────┬────────────────────────┐

   │Key Name           │ Value Type        │ Default Value │ Value Description      │  
   ├───────────────────┼───────────────────┼───────────────┼────────────────────────┤

   ...  
   ├───────────────────┼───────────────────┼───────────────┼────────────────────────┤

   │route-data         │ array of vardict  │               │ Array of IPv4 routes.  │  
   │                   │                   │               │ Each route dictionary  │  
   │                   │                   │               │ contains at least      │  
   │                   │                   │               │ 'dest' and 'prefix'    │  
   │                   │                   │               │ entries, containing    │  
   │                   │                   │               │ the destination IP     │  
   │                   │                   │               │ address as a string,   │  
   │                   │                   │               │ and the prefix length  │  
   │                   │                   │               │ as a uint32. Most      │  
   │                   │                   │               │ routes will also have  │  
   │                   │                   │               │ a 'gateway' entry,     │  
   │                   │                   │               │ containing the gateway │  
   │                   │                   │               │ IP address as a        │  
   │                   │                   │               │ string. If the route   │  
   │                   │                   │               │ has a 'metric' entry   │  
   │                   │                   │               │ (containing a uint32), │  
   │                   │                   │               │ that will be used as   │  
   │                   │                   │               │ the metric for the     │  
   │                   │                   │               │ route (otherwise NM    │  
   │                   │                   │               │ will pick a default    │  
   │                   │                   │               │ value appropriate to   │  
   │                   │                   │               │ the device).           │  
   │                   │                   │               │ Additional attributes  │  
   │                   │                   │               │ may also exist on some │  
   │                   │                   │               │ routes.                │  
   ├───────────────────┼───────────────────┼───────────────┼────────────────────────┤

   │route-metric       │ int64             │ -1            │ The default metric for │  
   │                   │                   │               │ routes that don't      │  
   │                   │                   │               │ explicitly specify a   │  
   │                   │                   │               │ metric. The default    │  
   │                   │                   │               │ value -1 means that    │  
   │                   │                   │               │ the metric is chosen   │  
   │                   │                   │               │ automatically based on │  
   │                   │                   │               │ the device type. The   │  
   │                   │                   │               │ metric applies to      │  
   │                   │                   │               │ dynamic routes, manual │  
   │                   │                   │               │ (static) routes that   │  
   │                   │                   │               │ don't have an explicit │  
   │                   │                   │               │ metric setting,        │  
   │                   │                   │               │ address prefix routes, │  
   │                   │                   │               │ and the default route. │  
   │                   │                   │               │ Note that for IPv6,    │  
   │                   │                   │               │ the kernel accepts     │  
   │                   │                   │               │ zero (0) but coerces   │  
   │                   │                   │               │ it to 1024 (user       │  
   │                   │                   │               │ default). Hence,       │  
   │                   │                   │               │ setting this property  │  
   │                   │                   │               │ to zero effectively    │  
   │                   │                   │               │ mean setting it to     │  
   │                   │                   │               │ 1024. For IPv4, zero   │  
   │                   │                   │               │ is a regular value for │  
   │                   │                   │               │ the metric.            │  
   ├───────────────────┼───────────────────┼───────────────┼────────────────────────┤

   │route-table        │ uint32            │ 0             │ Enable policy routing  │  
   │                   │                   │               │ (source routing) and   │  
   │                   │                   │               │ set the routing table  │  
   │                   │                   │               │ used when adding       │  
   │                   │                   │               │ routes. This affects   │  
   │                   │                   │               │ all routes, including  │  
   │                   │                   │               │ device-routes, IPv4LL, │  
   │                   │                   │               │ DHCP, SLAAC,           │  
   │                   │                   │               │ default-routes and     │  
   │                   │                   │               │ static routes. But     │  
   │                   │                   │               │ note that static       │  
   │                   │                   │               │ routes can             │  
   │                   │                   │               │ individually overwrite │  
   │                   │                   │               │ the setting by         │  
   │                   │                   │               │ explicitly specifying  │  
   │                   │                   │               │ a non-zero routing     │  
   │                   │                   │               │ table. If the table    │  
   │                   │                   │               │ setting is left at     │  
   │                   │                   │               │ zero, it is eligible   │  
   │                   │                   │               │ to be overwritten via  │  
   │                   │                   │               │ global configuration.  │  
   │                   │                   │               │ If the property is     │  
   │                   │                   │               │ zero even after        │  
   │                   │                   │               │ applying the global    │  
   │                   │                   │               │ configuration value,   │  
   │                   │                   │               │ policy routing is      │  
   │                   │                   │               │ disabled for the       │  
   │                   │                   │               │ address family of this │  
   │                   │                   │               │ connection. Policy     │  
   │                   │                   │               │ routing disabled means │  
   │                   │                   │               │ that NetworkManager    │  
   │                   │                   │               │ will add all routes to │  
   │                   │                   │               │ the main table (except │  
   │                   │                   │               │ static routes that     │  
   │                   │                   │               │ explicitly configure a │  
   │                   │                   │               │ different table).      │  
   │                   │                   │               │ Additionally,          │  
   │                   │                   │               │ NetworkManager will    │  
   │                   │                   │               │ not delete any         │  
   │                   │                   │               │ extraneous routes from │  
   │                   │                   │               │ tables except the main │  
   │                   │                   │               │ table. This is to      │  
   │                   │                   │               │ preserve backward      │  
   │                   │                   │               │ compatibility for      │  
   │                   │                   │               │ users who manage       │  
   │                   │                   │               │ routing tables outside │  
   │                   │                   │               │ of NetworkManager.     │  
   ├───────────────────┼───────────────────┼───────────────┼────────────────────────┤

   │routes             │ array of array of │ []            │ Deprecated in favor of │  
   │                   │ uint32            │               │ the 'route-data'       │  
   │                   │                   │               │ property, but this can │  
   │                   │                   │               │ be used for            │  
   │                   │                   │               │ backward-compatibility │  
   │                   │                   │               │ with older daemons.    │  
   │                   │                   │               │ Note that if you send  │  
   │                   │                   │               │ this property the      │  
   │                   │                   │               │ daemon will ignore     │  
   │                   │                   │               │ 'route-data'.  Array   │  
   │                   │                   │               │ of IPv4 route          │  
   │                   │                   │               │ structures.  Each IPv4 │  
   │                   │                   │               │ route structure is     │  
   │                   │                   │               │ composed of 4 32-bit   │  
   │                   │                   │               │ values; the first      │  
   │                   │                   │               │ being the destination  │  
   │                   │                   │               │ IPv4 network or        │  
   │                   │                   │               │ address (network byte  │  
   │                   │                   │               │ order), the second the │  
   │                   │                   │               │ destination network or │  
   │                   │                   │               │ address prefix (1 -    │  
   │                   │                   │               │ 32), the third being   │  
   │                   │                   │               │ the next-hop (network  │  
   │                   │                   │               │ byte order) if any,    │  
   │                   │                   │               │ and the fourth being   │  
   │                   │                   │               │ the route metric. If   │  
   │                   │                   │               │ the metric is 0, NM    │  
   │                   │                   │               │ will choose an         │  
   │                   │                   │               │ appropriate default    │  
   │                   │                   │               │ metric for the device. │  
   │                   │                   │               │ (There is no way to    │  
   │                   │                   │               │ explicitly specify an  │  
   │                   │                   │               │ actual metric of 0     │  
   │                   │                   │               │ with this property.)   │  
   └───────────────────┴───────────────────┴───────────────┴────────────────────────┘

  ipv6 setting  
   IPv6 Settings.  

   ┌───────────────────┬───────────────────────────┬───────────────┬────────────────────────────────────────────────────┐

   │Key Name           │ Value Type                │ Default Value │ Value Description                                  │  
   ├───────────────────┼───────────────────────────┼───────────────┼────────────────────────────────────────────────────┤

   ...  
   ├───────────────────┼───────────────────────────┼───────────────┼────────────────────────────────────────────────────┤

   │route-data         │ array of vardict          │               │ Array of IPv6 routes. Each route dictionary        │  
   │                   │                           │               │ contains at least 'dest' and 'prefix' entries,     │  
   │                   │                           │               │ containing the destination IP address as a string, │  
   │                   │                           │               │ and the prefix length as a uint32. Most routes     │  
   │                   │                           │               │ will also have a 'next-hop' entry, containing the  │  
   │                   │                           │               │ next hop IP address as a string. If the route has  │  
   │                   │                           │               │ a 'metric' entry (containing a uint32), that will  │  
   │                   │                           │               │ be used as the metric for the route (otherwise NM  │  
   │                   │                           │               │ will pick a default value appropriate to the       │  
   │                   │                           │               │ device). Additional attributes may also exist on   │  
   │                   │                           │               │ some routes.                                       │  
   ├───────────────────┼───────────────────────────┼───────────────┼────────────────────────────────────────────────────┤

   │route-metric       │ int64                     │ -1            │ The default metric for routes that don't           │  
   │                   │                           │               │ explicitly specify a metric. The default value -1  │  
   │                   │                           │               │ means that the metric is chosen automatically      │  
   │                   │                           │               │ based on the device type. The metric applies to    │  
   │                   │                           │               │ dynamic routes, manual (static) routes that don't  │  
   │                   │                           │               │ have an explicit metric setting, address prefix    │  
   │                   │                           │               │ routes, and the default route. Note that for IPv6, │  
   │                   │                           │               │ the kernel accepts zero (0) but coerces it to 1024 │  
   │                   │                           │               │ (user default). Hence, setting this property to    │  
   │                   │                           │               │ zero effectively mean setting it to 1024. For      │  
   │                   │                           │               │ IPv4, zero is a regular value for the metric.      │  
   ├───────────────────┼───────────────────────────┼───────────────┼────────────────────────────────────────────────────┤

   │route-table        │ uint32                    │ 0             │ Enable policy routing (source routing) and set the │  
   │                   │                           │               │ routing table used when adding routes. This        │  
   │                   │                           │               │ affects all routes, including device-routes,       │  
   │                   │                           │               │ IPv4LL, DHCP, SLAAC, default-routes and static     │  
   │                   │                           │               │ routes. But note that static routes can            │  
   │                   │                           │               │ individually overwrite the setting by explicitly   │  
   │                   │                           │               │ specifying a non-zero routing table. If the table  │  
   │                   │                           │               │ setting is left at zero, it is eligible to be      │  
   │                   │                           │               │ overwritten via global configuration. If the       │  
   │                   │                           │               │ property is zero even after applying the global    │  
   │                   │                           │               │ configuration value, policy routing is disabled    │  
   │                   │                           │               │ for the address family of this connection. Policy  │  
   │                   │                           │               │ routing disabled means that NetworkManager will    │  
   │                   │                           │               │ add all routes to the main table (except static    │  
   │                   │                           │               │ routes that explicitly configure a different       │  
   │                   │                           │               │ table). Additionally, NetworkManager will not      │  
   │                   │                           │               │ delete any extraneous routes from tables except    │  
   │                   │                           │               │ the main table. This is to preserve backward       │  
   │                   │                           │               │ compatibility for users who manage routing tables  │  
   │                   │                           │               │ outside of NetworkManager.                         │  
   ├───────────────────┼───────────────────────────┼───────────────┼────────────────────────────────────────────────────┤

   │routes             │ array of legacy IPv6      │ []            │ Deprecated in favor of the 'route-data' property,  │  
   │                   │ route struct (a(ayuayu))  │               │ but this can be used for backward-compatibility    │  
   │                   │                           │               │ with older daemons. Note that if you send this     │  
   │                   │                           │               │ property the daemon will ignore 'route-data'.      │  
   │                   │                           │               │ Array of IPv6 route structures.  Each IPv6 route   │  
   │                   │                           │               │ structure is composed of an IPv6 address, a prefix │  
   │                   │                           │               │ length (1 - 128), an IPv6 next hop address (which  │  
   │                   │                           │               │ may be zeroed out if there is no next hop), and a  │  
   │                   │                           │               │ metric. If the metric is 0, NM will choose an      │  
   │                   │                           │               │ appropriate default metric for the device.         │  
   ├───────────────────┼───────────────────────────┼───────────────┼────────────────────────────────────────────────────┤

   │token              │ string                    │               │ Configure the token for                            │  
   │                   │                           │               │ draft-chown-6man-tokenised-ipv6-identifiers-02     │  
   │                   │                           │               │ IPv6 tokenized interface identifiers. Useful with  │  
   │                   │                           │               │ eui64 addr-gen-mode.                               │  
   └───────────────────┴───────────────────────────┴───────────────┴────────────────────────────────────────────────────┘  

관련 정보