我在 ubuntu 服务器上遇到奇怪的行为,其中添加的任何新“ip 规则”都会以优先级零添加。我添加的规则没有优先级,它曾经被添加到可用优先级中。预期重复的规则或已填充(事实并非如此),但对旧规则进行了一些清理以释放它,但从未使用新的可用优先级。
Server >> VERSION="18.04.6 LTS (Bionic Beaver)"
Kernel >> 4.15.0-172-generic
Example
0: from all lookup local
0: from all iif bb2671448 lookup 7173
0: from all oif bb2671448 lookup 7173
0: from all iif ebb90d64d lookup 7415
0: from all oif ebb90d64d lookup 7415
1000: from all lookup [l3mdev-table]
32765: from all fwmark 0x4d2 lookup 123
32766: from all lookup main
32767: from all lookup default
谢谢
这可以通过首先添加优先级为 0 的任何规则来重现,这样至少存在两个:原始规则
0: from all lookup local
和新规则。只需删除优先级 0 处的所有规则,直到只剩下一个。它最好是原始的
0: from all lookup local
(或者预期连接问题),但这甚至不是强制性的。甚至 pref 0 也不是特殊的(即使这是默认设置的意图),事实上下一个最低的首选项值也是 0,并且当该值已经是时,无法使用更低的值创建任何内容0(见最后评论)。通常,该值被选择为下一个最低值减 1(默认设置为 32766(0 之后的下一个)-1 = 32765)。
用户+网络命名空间中的复制者:
在 pref 0 处仅保留一个(即使是本演示中所做的“错误”的一个):
所以:不要添加优先级为0的规则来避免这个问题。
如果意图是为了特殊的策略路由目的而在之前
lookup local
发生一些规则,则将这一规则移至更高的位置并在之前插入其他规则。此后,所有新规则都应添加明确的首选项,否则迟早会发生不需要的排序(请参见下面的示例)。当 400 成为最低偏好值时,添加新规则而不说明偏好不会选择 31998,而是选择 499(下一个最低值则变为 500):如警告所示,在处理
local lookup
. 最初的问题与添加的事实类似,即不可能在下一个最低值 (0) 也为 0 的情况下添加,因此再次选择 0。