あなたの最初の観察について確信がありますか? ip route show
とは または route -n
次に表示しますか? proto static
を追加すると結果が変わりますか 最初のケースでは?
0
と明示的に述べているリソースを少なくとも 2 つ見つけました。 は 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 カーネル ハッカーが必ず必要になります。
また、どのデフォルトが選択されていても、明らかに OS 固有です。 ) たとえば、Windows がリンクの帯域幅に基づいて既定のメトリックを選択することを示しています。
これらのルートは異なるサブネット上にあるため、メトリックだけでなく、さらに多くのことが関係しています。たとえば、発信トラフィックが 192.168.1.1 サブネット上にある場合、および ルーティング テーブルに一致するデフォルト以外のルートがある場合、メトリックが考慮される前に、そのルートは最長のプレフィックス マッチを介して一致します。
デフォルト以外のルートが一致しないと仮定すると、メトリックがないはず カーネルによってメトリックが 0 であると解釈されるため、優先順位が最も高いルートになります。一部のルーティング デーモンは後でそのデフォルト メトリックを 1024 などの別の値に変換するため、これは単純な見方ですが、これがあなたと名前のないディストリビューションに起こっていることだと思います。
ip route
の場合 メトリックがまったく表示されません。古い route -n
を使用して、実際に 0 であることを確認できます net-tools パッケージのコマンドまたは cat /proc/net/route
.ただし、この出力は、ルーティング デーモンが 0 メトリック値に遭遇したときに内部で使用するものと必ずしも一致しません。
さらに、ルートの作成方法も重要です。 ip route
route
では netlink API を使用します。 ioctl を使用します。 2 つのアプローチ間でデフォルト メトリックを作成する方法のコードにより、異なるメトリック値が得られます。例:ip route
経由で IPv6 デフォルト ルートを作成する route
経由で同じルートを作成しながら、RHEL 7 ではメトリック値が 1024 になります。 指標は 1 になります。
RedHat から:
- ルート メトリックとしてルート コマンドに何も渡されない場合、値 1 がコマンド自体によって使用されます。
- ip コマンドにルート メトリックとして何も渡されない場合、属性はまったく作成されず、カーネルはそれを 0 として認識します。これは後でデフォルトとして 1024 に変換されます。