修改linux中现有的路由条目

修改linux中现有的路由条目

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

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

答案1

(将各种评论合并为答案)

目前,无法修改路由的度量。作为一个2005 年关于 LKML 的消息指出:

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

这似乎适用于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

答案2

ifmetric考虑到您要更改的路线正在经过的界面,将允许您动态更改路线度量。

用法

ifmetric <iface> [<metric>]

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

答案3

如a中所述评论对于这个问题,引用一个信息在 linux-net 邮件列表上:“度量/优先级无法更改 [...] 这是当前协议的限制 [...]。”
唯一的方法是删除路由并添加新路由。

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

sudo route add -net default gw 10.10.0.1 netmask 0.0.0.0 dev wlan0 metric 1

Route 命令的 Debian 联机帮助页

答案4

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

nmcli connection modify ACTUAL_CONNECTION_NAME ipv4.route-metric 100
nmcli connection up ACTUAL_CONNECTION_NAME

相关内容