Як встановити пріоритет мережевих з'єднань в Ubuntu?


41

Якщо машина Ubuntu 11.04 підключена до WiFi та 3G одночасно, як я встановити пріоритет, щоб дозволити програмам (браузеру тощо) спочатку використовувати WiFi? Якщо це недоступно, він повинен використовувати 3G.

В основному, я хотів би встановити порядок використання мережевих з'єднань.

Редагувати: Я шукаю більш простий підхід, який був би корисний для тих, хто просто комфортний і не є фахівцями Ubuntu / Linux.

Відповіді:


27

Я здивований , ніхто не згадав найпростішу команду , щоб зробити це: 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
Чудова відповідь. Thx (також для маршруту -n). Мені довелося перезавантажитись після встановлення ifmetric для команди зміни метрики
Thorsten Niehues

Як зробити цю зміну постійною (я хочу не використовувати випадково свою точку доступу для iPhone)
Thorsten Niehues

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

Це працює. Але я не можу отримати доступ до локальних машин після цього (через браузер, наприклад). Будь-яка ідея? Спасибі.
tomasb

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

14

Встановлення показників - це те, як ви змінюєте пріоритети. Вища метрика дорожча у використанні, тому ОС буде використовувати інтерфейси з найнижчим показником, якщо їй потрібно маршрутизувати трафік. У разі відключення нижнього метричного інтерфейсу він буде використовувати інтерфейс вищої метрики, оскільки це єдиний інтерфейс, який може використовуватися для маршрутизації трафіку до конкретної мережі / місця призначення.

Показники вказані у файлі / etc / network / interfaces , вказують на посилання на документацію.

Використовуйте будь-який текстовий редактор, щоб редагувати файл, ідентифікувати мережі та просто змінити metricпараметр та зберегти. Перезавантаження - це найпростіший спосіб скинути всі значення, не потрапляючи в прискіпливі деталі перезавантаження мережевих служб.


2
Гаррі - Дякую за відповідь - Мережа, що мене цікавить eth1, відображається у "ifconfig", але не в "/ etc / network / interfaces". Що відображається в "ifconfig", а що в "/ etc / network / interface"?
Praveen Sripati

1
Додавання eth0 до "/ etc / network / interface" є більш ризикованим. Ви можете спробувати ifconfig як root змінити показник інтерфейсу (перевірте, чи він залишається там після завантаження).
harrymc

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

2
Схоже, Linux вирішує сам швидкий адаптер після швидкого тесту на швидкість на всіх адаптерах. Метрика більше не підтримується в багатьох дистрибутивах. Ви все ще можете спробувати і продиктувати речі за допомогою "/ etc / network / interface", але я не знаю, наскільки ви будете успішними. Дивіться також це питання .
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 параметр Metric матиме якийсь ефект.
Praveen Sripati

1
Чи можете ви, будь ласка, дати мені конкретну команду маршруту для цього?
Praveen Sripati

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

1
Дійсно, що відповідь ?? також netstat -nr не показує показник. Переглянути відповідь від @shivams
Thorsten Niehues

3

Я насправді цього не пробував, але NCD (Network Configuration Daemon - 1) можна використовувати для цієї мети. Сайт стверджує, що спрощує налаштування мережі. Синтаксис здається простим.

# Зачекайте деякого підключення до мережі. Віддайте перевагу eth1, поставивши його перед eth0.
список ("NET-eth1", "NET-eth0") імен;

(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за замовчуванням - помилкове):

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.

(Самий останній "великий" приклад на сторінці посилання показує таке гібридне використання обох рендерів).

Дивіться також це питання (askubuntu) .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.