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


11

在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

这是一个网站页面,其中包含使用ifconfig命令编辑IP地址的命令。我不了解所有命令,但希望此页面对您有所帮助。tecmint.com/ifconfig-command-examples
Nicholas Awesomepants

1
删除该路由,然后再次添加,除非它们自从修复lkml.iu.edu/hypermail/linux/net/0504.3/0017.html
2015年

Answers:


7

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

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

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

Debian联机帮助手册


4
问题不在于如何添加具有给定度量的路由;OP希望更改现有路由的指标(而无需删除和重新添加路由)。
安德拉斯·科恩

4
显然,您尚未阅读问题中的评论,该评论链接到表明无法更改指标的电子邮件:The metric/priority cannot be changed [...] This is a limitation of the current protocol[...]。唯一的方法是删除路由并添加新路由。

7
我知道指标无法更改。您的答案仍然无法回答问题-也许在答案中指出,只能通过删除并重新添加路线来更改指标?
安德拉斯·科恩(

16

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

当前,无法修改路由的指标。作为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

是的,在过去的几个月中被这个问题所困扰……正如Brian Cantrill一直在谈论Linux:这是NIH(这里未发明)综合症的不断发展……
Hvisage

@Hvisage你能详细说明吗?是否有任何工具可以更改指标而不必删除指标?
Braiam

@Braiam这是负面的,例如:存在这样的工具。根据答案。如果您引用我的布莱恩·坎特里尔(Bryan Cantrill)的报价,那是我相信的地方youtube.com/watch?v=wTVfAMRj-7E
Hvisage

2

ifmetric 鉴于您要更改的路线正在通过接口,因此您可以即时更改路线指标。

用法

ifmetric <iface> [<metric>]

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.