在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 change
和ip 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
答案4
它可以通过 nmcli 完成,如下所述:-
nmcli connection modify ACTUAL_CONNECTION_NAME ipv4.route-metric 100
nmcli connection up ACTUAL_CONNECTION_NAME