如何在Ubuntu中设置网络连接的优先级?


41

如果将Ubuntu 11.04计算机同时连接到WiFi和3G,如何设置优先级以使应用程序(浏览器等)首先使用WiFi?如果不可用,则应使用3G。

基本上,我想设置网络连接的使用顺序。

编辑:我正在寻找一种更简单的方法,该方法对于那些既熟悉又不是Ubuntu / Linux专家的人会很有用。

Answers:


27

我很惊讶,没有人提到执行此操作的最简单命令:ifmetric。可以使用安装sudo apt-get install ifmetric。此命令可用于更改任何接口的度量。具有较低度量标准接口是 Internet的首选

要使用此功能,请首先使用以下route命令查看指标:

$ route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.42.0.1       0.0.0.0         UG    100    0        0 eth0
0.0.0.0         10.42.0.2       0.0.0.0         UG    600    0        0 wlan0

在这里,eth0metric较低,因此它将是首选wlan0。如果您想使用wlan0,则降低其指标:

sudo ifmetric wlan0 50

现在,路由表如下所示:

$ route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.42.0.2       0.0.0.0         UG    50     0        0 wlan0
0.0.0.0         10.42.0.1       0.0.0.0         UG    100    0        0 eth0

现在,Linux将wlan0用于Internet。更改将立即反映出来。


1
好答案。Thx(也用于路由-n)。我必须在安装ifmetric后才能重新启动命令以更改指标
Thorsten Niehues

如何使此更改永久
生效

2
@ThorstenNiehues:一个快速的解决方案来我的脑海里,使之永久是对ifmetric命令添加到你的crontab,这样做crontab -e,然后添加行结尾:@reboot sudo ifmetric wlan0 50
shivams

有用。但是之后(例如通过浏览器)我无法访问本地计算机。任何的想法?谢谢。
tomasb

@tomasb:有趣的疑问。但是,这是可以预期的,因为更改接口首选项将使您进入首选接口的本地网络。访问本地计算机的一种直接方法是使用虚拟机访问它们。但是,必须存在更好的解决方案。让我思考和回答。
shivams

14

设置指标是您更改优先级的方式。度量越高,使用起来就越“昂贵”,因此,如果OS需要路由流量,则OS将使用度量最低的接口。万一较低的度量标准接口关闭,它将使用较高的度量标准接口,因为它是唯一可用于将流量路由到该特定网络/目标的接口。

度量标准在文件/ etc / network / interfaces中指定,指向文档的链接点。

使用任何文本编辑器来编辑文件,识别网络,然后更改metric参数并保存。重新启动是重置所有值的最简单方法,而无需了解重新启动网络服务的令人讨厌的细节。


2
哈里-谢谢您的答复-我对eth1感兴趣的网络显示在“ ifconfig”中,而不显示在“ / etc / network / interfaces”中。在“ ifconfig”中显示什么,在“ / etc / network / interfaces”中显示什么?
Praveen Sripati 2011年

1
将eth0添加到“ / etc / network / interfaces”更具风险。您可以尝试以root用户身份将ifconfig更改为该接口的度量标准(检查引导后它是否在那里)。
harrymc 2011年

当我运行“ sudo ifconfig eth1 metric 4”时,出现以下错误“ SIOCSIFMETRIC:不支持操作”。goo.gl/UhXBJ说:“此外,并非所有系统都使用metric参数。.....在配置Linux系统,为每个接口好像有在Ubuntu没有直接的方法就像从一个初级用户的UI添加一个显式路由命令“看上去。
普利文Sripati的

2
在对所有适配器进行快速测试之后,Linux似乎决定使用最快的适配器。许多发行版不再支持Metric。您仍然可以尝试通过“ / etc / network / interfaces”命令事情,但是我不知道您会获得多大的成功。另请参阅此问题
harrymc 2011年

3
每个人最简单的解决方案就是关闭您不想使用的接口,或者将其限制为“仅将此连接用于其网络上的资源”(如果您还拥有打印机或该设备上的任何东西)同一路由器)。
harrymc 2011年

7
  1. 通过处理路由指标来为一般流量确定接口优先级。每条路由具有关联的参数,例如跳数和带宽。有关route命令,请参见手册页中的“度量”选项。

    $ route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref     Use Iface
    0.0.0.0         192.168.1.254   255.255.255.255 U     0      0        0 eth0
    192.168.1.0     0.0.0.0         255.255.255.0   U     256    0        0 eth0
    
  2. 优先通过“流量整形”解决优先访问应用程序对网络资源的问题-我将使用Web搜索引擎来查看Ubuntu或路由器是否可以做到这一点。


脚注。

在MS Windows(而非Linux)上,该netstat -nr命令输出的信息与相同route print。包括路由指标。


在路由的手册页中,“度量到目标的“距离”(通常以跃点计算)。最近的内核不使用它,但路由守护程序可能需要它。”。我不确定Metric参数在常规Ubuntu桌面上是否会起作用。
Praveen Sripati 2011年

1
您能给我具体的路线命令吗?
Praveen Sripati 2011年

11
@PraveenSripati-我不相信您会从您辛辛苦苦获得的代表中拿出100分作为答案-从技术上讲是正确的,但对您或我没有帮助。:-(我要寻找一个特定的命令,以及。
主蕙。

1
真的是什么答案??netstat -nr也不显示该指标。查看来自@shivams的答案
Thorsten Niehues '18

3

我还没有真正尝试过,但是NCD(网络配置守护程序-1)可以用于此目的。该网站声称简化了网络配置。语法似乎很简单。

#等待网络连接。通过将eth1放在eth0前面来选择它。
list(“ NET-eth1”,“ NET-eth0”)pnames;

(1)-http://code.google.com/p/badvpn/wiki/NCD


没错,我的NCD软件可以很好地完成此任务。该示例按原样工作。但是,我应该指出,pnames列表实际上只是multidepend()下一行语句的一个参数-这是实现优先级的那个。这背后的机理是,当eth1出现时eth0已经启动,它执行的multiprovide("NET-eth1");,因为NET-eth1是在眼前NET-eth0multidepend()就下去了马上回来,但是从曝光的变量eth1的过程,而不是eth0
Ambroz Bizjak 2011年

我看着它,但不知道。这不应该那么难。
SDsolar

3

这都是由于路由度量。您要删除具有最低度量标准的默认路由,然后恢复具有较高度量标准的旧路由。请遵循以下命令。

假设您的路由表如下所示:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.16.87.254    0.0.0.0         UG    100    0        0 ens38
0.0.0.0         192.168.151.2   0.0.0.0         UG    101    0        0 ens33
10.16.86.64     0.0.0.0         255.255.255.248 U     100    0        0 ens38
10.16.87.254    0.0.0.0         255.255.255.255 UH    100    0        0 ens38
10.16.88.6      10.16.87.254    255.255.255.255 UGH   100    0        0 ens38
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens38
192.168.151.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

现在删除默认网关

# route delete default gateway

现在恢复较旧的默认网关(请注意,这种情况下的指标比当前的默认路由101高102)

# route add default gw 10.16.87.254 metric 102 dev ens38                                                              
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.151.2   0.0.0.0         UG    101    0        0 ens33
0.0.0.0         10.16.87.254    0.0.0.0         UG    102    0        0 ens38
10.16.86.64     0.0.0.0         255.255.255.248 U     100    0        0 ens38
10.16.87.254    0.0.0.0         255.255.255.255 UH    100    0        0 ens38
10.16.88.6      10.16.87.254    255.255.255.255 UGH   100    0        0 ens38
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens38
192.168.151.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

这可行。请注意其他任何新手(我必须阅读两次以了解所发生的情况):上面的步骤1删除了Gateway= 的条目10.16.87.254,它是UG最低的Metric,而步骤2则将其返回更高的值,Metric因此仍然可用作为备份,以防192.168.151.2不可用。
WillC '17

0

[更新]从Ubuntu 18.04 LTS(服务器)开始,它netplan是网络管理的默认包装器。默认情况下,配置Netplan是通过YAML文件完成的/etc/netplan/01-netcfg.yaml此处有更多详细信息)。

路由指标由“ metric”选项定义,期望使用正整数(100通常是默认值)。这是参考页中的示例

network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      addresses:
      - 10.0.0.10/24
      - 11.0.0.11/24
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
      routes:
      - to: 0.0.0.0/0
        via: 10.0.0.1
        metric: 100
      - to: 0.0.0.0/0
        via: 11.0.0.1
        metric: 100

具有最低metric(路径长度)的路由成为“首选”网关。(使用:sudo netplan try启用更改)

请注意,在漫游环境(多个连接,打开和关闭)中,您可能需要将optional(boolean)参数设置为true(默认为false):

network:
  version: 2
  ethernets:
    enred:
      dhcp4: yes
      dhcp4-overrides:
        route-metric: 100
    engreen:
      dhcp4: yes
      dhcp4-overrides:
        route-metric: 200
      # this is plugged into a test network that is often
      # down - don't wait for it to come up during boot.
      optional: true

注意,在DHCP连接的情况下,路由度量的语法略有不同。

您还可以NetworkManager用作渲染器,我想(尚未进行自我测试)也可以通过GUI工具查看/编辑配置的那部分。

renderer (标量)

使用给定的网络后端进行此定义。目前支持networkdNetworkManager。可以在中networks:为设备类型(例如ethernets:)或特定设备定义全局指定此属性。默认值为networkd

(参考页上最后一个“大”示例显示了两种渲染器的这种混合使用)。

另请参阅此问题(askubuntu)

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.