(Linuxでは)次の2つのパスがある場合:
default via 192.168.1.1 dev enp58s0f1
default via 192.168.16.1 dev wlp59s0 proto static metric 600
最初のものが使用されると予想しましたが、そうではありません。 2番目のものが代わりに使用されました。
これを次のように変更すると:
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のデフォルトであることを明確に示すリソースを2つ以上見つけました。
- 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 サブネットにある場合そしてルーティングテーブルに一致するデフォルト以外のルートがある場合、そのルートは次のように一致します。最長プレフィックスマッチ指標を考慮する前に。
デフォルト以外のパスが一致しないと仮定すると、指標はありません。しなければならないカーネルはメトリックがゼロであるため、優先順位が最も高いパスとして解釈されます。ただし、これは一部のルーティングデーモンが後でデフォルトのメトリックを1024などの他の値に変換するため、単純なビューです。これがあなたとあなたの名前のないディストリビューションで起こったことを願っています。
ip route
メトリックがまったく表示されない場合は、net-toolsパッケージまたはを使用できます。route -n
ただし、cat /proc/net/route
この出力は、メトリック値がゼロのときにルーティングデーモンが内部的に使用する出力と必ずしも一致するわけではありません。
また、パスを作成する方法も重要です。ip route
netlink APIを使用し、route
ioctlも使用します。 2 つのメソッド間でデフォルトの標識を生成する方法のコードは、異なる標識値を生成します。たとえば、IPv6デフォルトルーティングを作成するとip route
RHEL 7でメトリック値が1024になり、同じルーティングを作成するとroute
メトリック値が1になります。
~から赤い帽子:
- ルーティングコマンドにルーティングメトリックに渡されるエントリがない場合、コマンド自体は値1を使用します。
- ipコマンドにパスメトリックとして何も渡さないと、属性はまったく生成されず、カーネルはこれをゼロとして理解し、後でデフォルト値の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. │ └───────────────────┴───────────────────────────┴───────────────┴────────────────────────────────────────────────────┘