Как мне установить приоритет сетевых подключений в Ubuntu?


42

Если компьютер с Ubuntu 11.04 подключен к WiFi и 3G одновременно, как мне установить приоритет, чтобы приложения (браузер и т. Д.) Сначала использовали WiFi? Если это не доступно, он должен использовать 3G.

В принципе, я хотел бы установить порядок, в котором используются сетевые подключения.

Редактировать: я ищу более простой подход, который был бы полезен для тех, кто просто удобен и не является экспертом в Ubuntu / Linux.

Ответы:


28

Я удивлен , никто не упомянул простейшую команду , чтобы сделать это: ifmetric. Может быть установлен с помощью sudo apt-get install ifmetric. Эта команда может использоваться для изменения метрики любого интерфейса. Интерфейс с более низкой метрикой является предпочтительным для Интернета.

Чтобы использовать это, сначала посмотрите метрики с помощью 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

Здесь eth0имеет более низкую метрику, поэтому будет предпочтительнее, чем 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для Интернета. Изменение будет отражено немедленно.


1
Отличный ответ. Спасибо (также для маршрута -n). Мне пришлось перезагрузить компьютер после установки ifmetric, чтобы команда сменила метрику
Торстен Ниехес

Как сделать это изменение постоянным (я хочу, чтобы случайно не использовать мою точку доступа iPhone)
Thorsten Niehues

2
@ThorstenNiehues: Быстрое решение приходит на ум , чтобы сделать его постоянным, чтобы добавить ifmetric команды в кронтаб, делая , crontab -eа затем добавить строку в конце: @reboot sudo ifmetric wlan0 50.
Шивамс

Оно работает. Но я не могу получить доступ к локальным машинам после этого (например, через браузер). Есть идеи? Спасибо.
Томасб

@tomasb: интересное сомнение. Это, однако, ожидается, так как изменение предпочтений интерфейса приведет вас в локальную сеть предпочтительного интерфейса. Одним из простых способов получить доступ к локальным машинам было бы получить к ним доступ с помощью виртуальной машины. Однако лучшие решения должны существовать. Дайте мне подумать и ответить.
Шивамс

14

Установка метрик - это то, как вы меняете приоритеты. Более высокая метрика является более «дорогой» в использовании, поэтому ОС будет использовать интерфейсы с самой низкой метрикой, если ей необходимо маршрутизировать трафик. В случае отключения интерфейса с более низкой метрикой он будет использовать интерфейс с более высокой метрикой, поскольку он является единственным интерфейсом, который можно использовать для маршрутизации трафика в эту конкретную сеть / пункт назначения.

Метрики указаны в файле / etc / network / interfaces , ссылки на документацию.

Используйте любой текстовый редактор для редактирования файла, определения сетей, просто измените metricпараметр и сохраните. Перезагрузка - это самый простой способ сбросить все значения, не вдаваясь в подробности перезапуска сетевых служб.


2
Гарри - Спасибо за ответ - Сеть, которой я интересуюсь eth1, показана в "ifconfig", но не в "/ etc / network / interfaces". Что отображается в "ifconfig" и что в "/ etc / network / interfaces"?
Правин Срипати

1
Добавление eth0 в «/ etc / network / interfaces» более рискованно. Вы можете попробовать ifconfig от имени root, чтобы изменить метрику для интерфейса (проверьте, что он остается там после загрузки).
harrymc

Когда я запустил «sudo ifconfig eth1 metric 4», я получил следующую ошибку «SIOCSIFMETRIC: операция не поддерживается». goo.gl/UhXBJ говорит: «Кроме того, не все системы используют аргумент метрики. ..... При настройке системы Linux вы добавляете явную команду маршрутизации для каждого интерфейса. «Похоже, в Ubuntu нет прямого подхода, подобного пользовательскому интерфейсу для начинающего пользователя.
Praveen Sripati

2
Похоже, Linux выбирает самый быстрый адаптер после быстрого теста скорости на всех адаптерах. Метрика больше не поддерживается во многих дистрибутивах. Вы все еще можете пытаться диктовать вещи через "/ etc / network / interfaces", но я не знаю, насколько вы будете успешны. Смотрите также этот вопрос .
Harrymc

3
Самое простое решение, которое делают все, это просто отключить интерфейс, который вы не хотите использовать, или ограничить его «Использовать это соединение только для ресурсов в своей сети» (если у вас также есть принтер или что-то еще на этом тот же роутер).
Harrymc

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. Приоритизация доступа приложений к сетевым ресурсам часто решается путем «формирования трафика» - я бы использовал веб-поисковик, чтобы посмотреть, сможет ли это сделать Ubuntu или маршрутизатор.


Сноска.

В MS Windows, но не в Linux, netstat -nrкоманда выводит ту же информацию, что и route print. Включая метрики маршрутизации.


На странице руководства для маршрута «Метрика« Расстояние »до цели (обычно учитывается в прыжках). Оно не используется последними ядрами, но может быть необходимо для демонов маршрутизации». Я не уверен, что на обычном Ubuntu Desktop параметр Metric окажет какое-либо влияние.
Правин Срипати

1
Можете ли вы дать мне конкретную команду маршрута для этого?
Правин Срипати

11
@PraveenSripati - я не верю, что вы дали 100 ваших с трудом заработанных представителей за такой ответ - технически правильно, но это не поможет вам или мне. :-( Я тоже ищу конкретную команду.
Лорд Лох.

1
Действительно какой ответ ?? также netstat -nr не показывает метрику. Посмотреть ответ от @shivams
Торстен Ниехес

3

Я на самом деле не пробовал, но NCD (Network Configuration Daemon - 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-eth0, сразу multidepend()же спускается и возвращается, но eth1вместо этого выставляет переменные из процесса eth0.
Амброз Бизжак

Я смотрел на это, но не мог понять это. Это не должно быть так сложно.
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

Теперь восстановите старый шлюз по умолчанию (обратите внимание, что показатель в этом случае выше 102, чем текущий маршрут по умолчанию 101)

# 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

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(логическое значение) значение 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 (Скалярное)

Используйте данный сетевой бэкэнд для этого определения. В настоящее время поддерживаются networkdи NetworkManager. Это свойство может быть указано глобально networks:, для типа устройства (например, ethernets:) или для конкретного определения устройства. По умолчанию это networkd.

(Самый последний «большой» пример на странице ссылок показывает такое гибридное использование обоих средств визуализации).

Смотрите также этот вопрос (аскубунту) .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.