在 linux 中修改现有的路由条目

use*_*571 17 linux routing

修改 linux 中现有路由条目的度量的命令是什么?我可以使用如下所示的“ip route change”命令更改现有条目的网关,但无法更改指标。有没有其他命令呢?

route –n
40.2.2.0        30.1.3.2        255.255.255.0   eth2

ip route change 40.2.2.0/24 via 30.1.2.2

route -n
40.2.2.0        30.1.2.2        255.255.255.0   eth1
Run Code Online (Sandbox Code Playgroud)

Mar*_*ark 24

(将各种评论结合成一个答案)

目前,无法修改路由的度量。正如2005 年关于 LKML 的消息所述

[...] 指标/优先级无法更改,因为我们没有单独的字段来匹配字段和新值,因此如果您指定一个指标,则根本找不到该条目并且请求因 ENOENT 而失败,因为 NLM_F_CREATE未指定。这是当前协议的一个限制,改变它可能是个好主意,但它不是微不足道的 [...]

这似乎同时适用于ip route changeip route replace- 前者对我来说会导致错误,而后者会按照广告创建一个额外的路由(它的手册页指出replace将替换创建一个路由)。这与内核响应 ENOENT 并ip route replace跟进路由创建请求一致。


因此,解决方案是删除现有路由并添加新路由。例如

ip route del 40.2.2.0/24 via 30.1.2.2
ip route add 40.2.2.0/24 via 30.1.2.2 metric 1234
Run Code Online (Sandbox Code Playgroud)


Jan*_*Jan 13

正如对该问题的评论所指出的,引用了linux-net 邮件列表上的一条消息:“指标/优先级无法更改 [...] 这是当前协议的限制 [...]。”
唯一的方法是删除路由并添加新路由。

这是使用route命令完成的,例如:

sudo route add -net default gw 10.10.0.1 netmask 0.0.0.0 dev wlan0 metric 1
Run Code Online (Sandbox Code Playgroud)

route 命令的 Debian 联机帮助页

  • 我知道指标无法更改。您的答案仍然没有回答这个问题——也许在答案中指出只能通过删除和重新添加路由来更改指标? (8认同)
  • 问题不在于如何添加具有给定指标的路由;OP 希望更改现有路由上的指标(不删除和重新添加路由)。 (5认同)
  • 显然,您没有阅读问题中的评论,该问题链接到电子邮件,显示指标无法更改:`指标/优先级无法更改 [...] 这是当前协议的限制 [...] ]`。唯一的方法是删除路由并添加新路由。 (4认同)

小智 13

ifmetric 将允许您即时更改您的路线指标,考虑到您要更改的路线正在通过的界面。

用法

ifmetric <iface> [<metric>]
Run Code Online (Sandbox Code Playgroud)

例如,用于ifmetric tun0 12将所有经过 的路由的度量更改为 12 tun0


小智 5

它可以通过 nmcli 完成,如下所述:-

nmcli connection modify ACTUAL_CONNECTION_NAME ipv4.route-metric 100
nmcli connection up ACTUAL_CONNECTION_NAME
Run Code Online (Sandbox Code Playgroud)