rsu*_*rez 14 linux networking routing
如果您(在 Linux 中)有以下两条路线:
default via 192.168.1.1 dev enp58s0f1
default via 192.168.16.1 dev wlp59s0 proto static metric 600
Run Code Online (Sandbox Code Playgroud)
我希望使用第一个,但事实并非如此:改用第二个。
如果我将其更改为:
default via 192.168.1.1 dev enp58s0f1 proto static metric 100
default via 192.168.16.1 dev wlp59s0 proto static metric 600
Run Code Online (Sandbox Code Playgroud)
然后它按预期工作。似乎“无指标”是比任何数字都更差(更高)的指标,而不是指标 0。
这是怎么回事?它特定于 Linux 还是网络标准?
提前致谢。
你确定你的第一次观察?那么什么ip route show
或route -n
显示什么?如果proto static
在第一种情况下添加,结果会改变吗?
我发现至少有两个资源明确指出这0
是 Linux 中的默认值:
iproute2
但对这些来源的分析并未显示它是什么)肯定需要 Linux 内核黑客来解决这个问题。
此外,无论选择什么默认值,显然都是特定于操作系统的。这篇文章 ( https://support.microsoft.com/en-us/help/299540/an-explanation-of-the-automatic-metric-feature-for-ipv4-routes ) 例如显示 Windows 选择默认指标基于链路带宽。
由于这些路由位于不同的子网上,因此这里涉及的不仅仅是指标。例如,如果始发流量位于 192.168.1.1 子网上,并且路由表中有匹配的非默认路由,则该路由将通过最长前缀匹配进行匹配,然后再考虑该指标。
假设非默认路由不匹配,那么应该没有度量内核解释为度量为 0,因此是最高优先级的路由。尽管这是一个简单的观点,因为某些路由守护程序稍后会将默认指标转换为另一个值,例如 1024。我希望这就是您和您的未命名发行版所发生的情况。
如果ip route
根本没有显示指标,您可以使用route -n
net-tools 包或cat /proc/net/route
. 但是,当遇到 0 度量值时,此输出不一定与路由守护程序将在内部使用的内容相匹配。
此外,您如何创建路线也很重要。ip route
使用 netlink API,而route
使用 ioctl。如何在两种方法之间创建默认指标的代码会导致不同的指标值。例如:ip route
在 RHEL 7 上创建 IPv6 默认路由 via将导致度量值为 1024,而创建相同路由 viaroute
将导致度量值为 1。
来自红帽:
- 如果没有任何内容作为路由度量传递给 route 命令,则命令本身使用 1 的值。
- 如果没有任何内容作为路由度量传递给 ip 命令,则根本不会创建属性,内核将其理解为 0,稍后将其转换为默认值 1024。
归档时间: |
|
查看次数: |
33695 次 |
最近记录: |