質問: linuxでは、どのメトリックにメトリックのないルートがありますか? 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固有ですか、それともネットワーキング標準ですか?前もって感謝します。
回答: これらのルートは異なるサブネット上にあるため、ここでは単なるメトリックよりも複雑な部分があります。たとえば、発信トラフィックが192.168.1.1サブネット上にある場合、および一致するデフォルト以外のルートがルーティングテーブルにある場合、そのルートはメトリックが考慮される前に 最長プレフィックス一致 を介して一致します。デフォルト以外のルートが一致しないと仮定すると、メトリックがない必要がありますカーネルによってメトリックが0であると解釈されるため、最高の優先度ルート。一部のルーティングデーモンは後でそのデフォルトメトリックを1024のような別の値に変換するため、これは単純化したビューですが、これはあなたとあなたの名前のないディストリビューションに起こっていることだと思います。ip routeにメトリックがまったく表示されない場合は、net-toolsパッケージの古いroute -nコマンドまたはcat /proc/net/routeを使用して、実際に0であることを確認できます。ただし、この出力は、メトリック値が0の場合、ルーティングデーモンが内部で使用するものと必ずしも一致しません。さらに、ルートの作成方法も重要です。 ip routeはnetlink apiを使用し、routeはioctlを使用します。 2つのアプローチ間でデフォルトメトリックが作成される方法のコードは、異なるメトリック値になります。たとえば、ip routeを介してipv6デフォルトルートを作成すると、rhel 7でメトリック値が1024になりますが、routeを介して同じルートを作成すると、メトリックが1になります。 redhat から: ルートメトリックとして何もrouteコマンドに渡されない場合、1の値がコマンド自体によって使用されます。 ルートメトリックとして何もipコマンドに渡されない場合、属性はまったく作成されず、カーネルはそれを0として認識します。これは後でデフォルトとして1024に変換されます。