在Linux中,什么度量标准没有路由?


11

如果(在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还是网络标准?

提前致谢。

Answers:


6

您确定您的第一次观察?是什么ip route showroute -n表现呢?如果添加proto static第一种情况,结果是否会更改?

我发现至少有两个资源明确指出这0是Linux中的默认值:

一定会需要Linux内核黑客来解决。

同样,无论选择哪种默认值,显然都是特定于操作系统的。例如,本文(https://support.microsoft.com/zh-cn/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes)显示Windows选择默认度量标准基于链接的带宽。


我将您的答案标记为正确的答案,因为我在计算机上再也没有看到这种现象。我将此归咎于Ubuntu台式机中发生的一些奇怪的事情,至少是在我提出问题时使用的版本。我还没有看到在运行Ubuntu LTS的其他几个盒子中发生这种情况。因此,有一个X文件(如今的参考文件是否太旧了?)。感谢您的回答!
rsuarez '19

6

由于这些路由位于不同的子网中,因此这里涉及的不仅仅是度量。例如,如果原始流量在192.168.1.1子网上,并且路由表中存在匹配的非默认路由,则该路由将通过最长前缀匹配进行匹配,然后再考虑该指标。

假设非默认路由不匹配,则内核应将不具有任何度量标准的度量标准解释为0,因此优先级最高。尽管这是一个简单的视图,因为某些路由守护程序稍后会将默认度量转换为另一个值,例如1024。我希望这就是您和您的未命名发行版所发生的事情。

如果ip route根本不显示任何指标,则可以使用route -nnet-tools软件包或中的旧命令来确认它确实为0 cat /proc/net/route。但是,此输出不一定与路由守护程序在遇到0度量值时将在内部使用的输出匹配。

此外,如何创建路线也很重要。ip route使用netlink API,而route使用ioctl。有关如何在两种方法之间创建默认指标的代码将导致不同的指标值。例如:ip route在RHEL 7上创建IPv6默认路由通过将导致度量标准值为1024,而在创建同一路由通过route将导致度量标准为1。

RedHat

  • 如果没有任何内容作为路由度量传递给route命令,则命令本身将使用值1。
  • 如果没有将任何内容作为路由度量传递给ip命令,则根本不会创建该属性,并且内核将其理解为0,之后将其默认转换为1024。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.