Автоматическое подключение с приоритетом Linux

Обновлено: 21.11.2024

Текущие настройки моего ноутбука обычно направлены на проводное подключение к моей сети, и только если кабель локальной сети не подключен, соединение WLAN должно активироваться при запуске. Я автоматизирую это, устанавливая приоритет Ethernet на 100 и беспроводную связь на 10, всегда включенную.

Время от времени этот параметр приоритета не учитывается системой. К сожалению, это не воспроизводимо. В лучшем случае это просто неправильно отображаемый значок сети, но скорость соединения намекает на непреднамеренное подключение к WLAN. В любом случае, мне интересно, есть ли возможность исправить это самостоятельно или, может быть, разработчики Mint могли бы предпринять какие-то действия, чтобы ужесточить приоритеты подключения? Есть ли какие-нибудь журналы, чтобы получить более четкое представление о том, что происходит в случае ошибки?

Я использую последнюю версию Mint 20.1. без (или, по крайней мере, очень консервативных) настроек системы.

Нужно мониторить сетевые интерфейсы в системе не полагаясь на подсказки )
Среди множества инструментов есть простой и удобный монитор сетевой нагрузки bwm-ng . Чтобы установить его

Вы также можете использовать команду "ip route", чтобы увидеть, что происходит. Если оба интерфейса включены, вы увидите две записи по умолчанию. Метрика для вашего интерфейса eXXXXXX должна иметь более низкую метрику, чем интерфейс wXXXXXX. Если работает только один интерфейс, вы увидите только один маршрут по умолчанию.

Так что это больше не вопрос подсказок, и оба интерфейса работают ("ip route" также показывал это).

Что касается настройки/неразберихи, которую я опубликовал сейчас, я не знаю, чего ожидать. Когда приоритет подключения вступает в игру? И в какой момент оценивается приоритет, особенно если соединение через интерфейс eXXXXXX устанавливается намного позже в процессе запуска?

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

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

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

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

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

7 ответов 7

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

Чтобы использовать это, сначала просмотрите метрики с помощью команды route:

Здесь eth0 имеет более низкую метрику, поэтому он будет предпочтительнее, чем wlan0 . Если вы хотите предпочесть wlan0 , уменьшите его показатель:

Теперь таблица маршрутизации будет выглядеть так:

Теперь Linux будет использовать wlan0 для Интернета. Изменение будет отражено немедленно.

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

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

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

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

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

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

Гарри. Спасибо за ответ. Интересующая меня сеть eth1 показана в «ifconfig», но не в «/etc/network/interfaces». Что показывается в "ifconfig" и что в "/etc/network/interfaces"?

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

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

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

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

Приоритизация интерфейсов для общего трафика осуществляется путем управления показателями маршрутизации. Каждый маршрут имеет связанные параметры, такие как количество переходов и пропускная способность. См. параметр «метрика» на странице руководства для команды route.

Приоритизация доступа приложений к сетевым ресурсам часто решается с помощью «управления трафиком» — я бы использовал веб-поисковик, чтобы узнать, может ли Ubuntu или маршрутизатор сделать это.

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

На справочной странице маршрута "Метрика" "расстояние" до цели (обычно считается в прыжках). Оно не используется последними ядрами, но может понадобиться демонам маршрутизации.". Я не уверен, что на обычном рабочем столе Ubuntu параметр Metric будет иметь какой-либо эффект.

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

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

Вы правы, моя программа NCD делает это прекрасно; пример там работает как есть. Однако я должен отметить, что список pnames на самом деле является просто аргументом для оператора multidepend() в следующей строке - это тот, который реализует приоритеты. Механизм, стоящий за этим, заключается в том, что когда eth1 появляется, когда eth0 уже запущен, выполняется multiprovide("NET-eth1"); , так как NET-eth1 находится перед NET-eth0 , multidepend() отключится и сразу же вернется в исходное состояние, но выставляя переменные из процесса eth1 вместо eth0 .

Это все из-за показателей маршрута. Вы хотите удалить маршрут по умолчанию с самой низкой метрикой, а затем восстановить старый маршрут с более высокой метрикой. Пожалуйста, следуйте приведенным ниже командам.

Допустим, ваша таблица маршрутизации выглядит так:

Теперь удалите шлюз по умолчанию

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

Это работает. Примечание для других новичков (мне пришлось прочитать это пару раз, чтобы понять, что происходит): шаг 1 выше удаляет запись для Gateway = 10.16.87.254, которая является UG с самой низкой метрикой, а шаг 2 возвращает ее обратно. с более высокой метрикой, поэтому он по-прежнему доступен в качестве резервной копии на случай, если 192.168.151.2 недоступен.

[Обновление] Начиная с Ubuntu 18.04 LTS (сервер), netplan является оболочкой по умолчанию для управления сетью. Настройка Netplan выполняется с помощью файла YAML, по умолчанию /etc/netplan/01-netcfg.yaml (подробнее здесь).

Метрика маршрутизации определяется параметром " metric ", который предполагает положительное целое число (обычно значение по умолчанию – 100). Вот пример со справочной страницы:

Маршрут с наименьшей метрикой (длиной пути) становится "предпочтительным" шлюзом. (Используйте: sudo netplan попробуйте включить изменения)

Обратите внимание, что в среде роуминга (множество подключений, включение и выключение) может потребоваться установить для необязательного (логического) параметра значение true (по умолчанию — false):

Обратите внимание на несколько иной синтаксис метрики маршрута в случае DHCP-соединений.

Вы также можете использовать NetworkManager в качестве средства визуализации, которое, я полагаю (сам еще не проверял), позволит вам просматривать/редактировать эту часть конфигурации также с помощью инструментов с графическим интерфейсом.

рендерер (скалярный)

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

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

НЕ сообщайте об ошибках, если пакет только что устарел или находится в AUR. Используйте ссылку «Пометить как устаревшую» на странице пакета или в списке рассылки.

ПОВТОРЕНИЕ: НЕ сообщайте об ошибках для устаревших пакетов!

Прикреплен к проекту: Arch Linux
Открыто Reginald (Uqbar) – понедельник, 21 июня 2021 г., 07:31 GMT
Последний раз редактировалось Andreas Radke (AndyRTR) – понедельник, 21 июня 2021 г., 15 :09 по Гринвичу

Тип задачи Отчет об ошибке
Категория Пакеты: Дополнительные
Статус Назначено
Назначено< /th> Ян Александр Стеффенс (heftig)
Архитектура x86_64< /td>
Серьезность Средняя
Приоритет Обычный
Сообщенная версия
Ожидаемая версия Не определено
Срок выполнения Не определено
Процент выполнения

Подробнее

Описание:
NetworkManager не поддерживает параметр "Подключаться автоматически с приоритетом" в соответствии с официальной документацией по адресу:

Приоритет автоматического подключения. Если для соединения установлено автоматическое соединение, предпочтительными будут соединения с более высоким приоритетом. По умолчанию 0. Большее число означает более высокий приоритет.

Дополнительная информация:
* версии пакетов
extra/networkmanager 1.32.0-1
extra/nm-connection-editor 1.22.0-1
KDE Frameworks 5.83.0
Qt 5.15.2 (создан на основе 5.15.2)
Оконная система xcb

* файлы конфигурации и/или журналов и т. д.

* ссылка на основной отчет об ошибке, если таковой имеется

Действия для воспроизведения:
(из системных настроек-->сеть-->подключения)
1. Создайте общесистемное («Все пользователи могут подключаться») проводное DHCP-соединение Ethernet с включенным параметром «Подключаться автоматически с приоритетом» до 99
2. Создайте общесистемное беспроводное DHCP-соединение с включенным параметром «Подключаться автоматически с приоритетом» до 75
3. Отключите Wi-Fi
4. Подождите, пока проводное соединение будет установлено и работает
5. Включить Wi-Fi

Ожидаемые результаты.
Проводное соединение остается в рабочем состоянии.
Беспроводное соединение не работает.

Фактические результаты:
соединение WiFi (более низкий приоритет) устанавливается вместе с проводным (более высокий приоритет).

Вы когда-нибудь удивлялись, когда ваш Linux-хост автоматически настраивает вашу сеть? Если это так, есть большая вероятность, что виноват NetworkManager. NetworkManager — один из самых распространенных демонов настройки сети в дистрибутивах Linux. Если вы хотите узнать больше и научиться управлять им, продолжайте читать.

Тем не менее, отключите ли вы NetworkManager и удивитесь, почему ваш любимый дистрибутив Linux не использует старые инструменты IP в качестве метода настройки сети по умолчанию? Как вы думаете, NetworkManager предназначен «только для WiFi»? Что ж, этот пост в блоге и для вас тоже. Оставьте позади предрассудки и дайте этому инструменту шанс, понаблюдав за ним в течение нескольких минут. Держу пари, вы помиритесь и, возможно, даже подружитесь с NetworkManager.

В этой статье я покажу вам, почему NetworkManager является хорошим выбором для многих сценариев (включая использование командной строки и графического интерфейса). Далее я объясню характерную (и часто неправильно понимаемую) философию, лежащую в основе этого инструмента. И, наконец, я выделю несколько команд, которые должен знать каждый пользователь, чтобы получить полный контроль над NetworkManager.

Почему NetworkManager?

Существует несколько способов настройки сети на вашем хосте Linux, поэтому вы можете задаться вопросом, почему именно вам следует использовать NetworkManager. Хотя есть несколько хороших ответов, я хотел бы выделить один важный момент, который часто упускается из виду: NetworkManager позволяет пользователям и приложениям одновременно получать и изменять конфигурацию сети, обеспечивая согласованное и актуальное представление сети. .

Этот инструмент можно настроить несколькими способами: через графический интерфейс рабочего стола (Gnome, KDE, nm-applet), текстовый пользовательский интерфейс ( nmtui ), командную строку ( nmcli ), файлы и веб-консоль (Cockpit). .Network Manager предоставляет интерфейс D-Bus и библиотеку (libnm), чтобы сделать API доступными для приложений. Ни один другой инструмент настройки сети не может обеспечить такую ​​гибкость.

Философия NetworkManager

Чтобы понять и управлять NetworkManager, вы должны сначала понять лежащую в его основе философию настройки. Взято из man NetworkManager :

«…пытается сделать настройку и работу сети максимально безболезненной и автоматической…»

Это сильно отличается от стандартной философии демона Unix, не так ли? Традиционные демоны Unix требуют, чтобы пользователи явно предоставили конфигурацию — обычно через файл конфигурации — и затем перезапустили службу. Без настройки демон не будет выполнять никаких действий.

Вместо этого NetworkManager при частичной настройке или отсутствии конфигурации проверяет доступные устройства и делает все возможное, чтобы обеспечить подключение к хосту. Цель NetworkManager – удовлетворить потребности всех, от обычного пользователя, которому нужна "просто работающая сеть", до опытного сетевого администратора, которому необходим полный контроль над сетью хоста.

Но вот в чем дело: NetworkManager ожидает, что опытный сетевой администратор предоставит свою собственную конфигурацию. Хотя настройка демона Linux на избегание выполнения некоторых действий (автоматическая настройка) является необычной, не кажется ли это разумным подходом для любого сценария?

Основные понятия NetworkManager

Конфигурация NetworkManager основана на концепциях устройства и подключения. Устройство отображает сетевой интерфейс, примерно эквивалентный тому, что вы получаете от команды ip link. Каждое устройство отслеживает:

  • Если им управляет NetworkManager
  • Доступные подключения для устройства
  • Активное подключение на устройстве (если есть)

Подключение представляет собой полную конфигурацию, которая должна быть применена к устройству, и представляет собой просто список свойств. Свойства, принадлежащие к одной и той же области конфигурации, сгруппированы в настройки (например, свойства группы настроек ipv4, такие как адреса, шлюз и маршруты).

Настроить сеть в NetworkManager так же просто, как активировать подключение на устройстве: устройство будет настроено со всеми свойствами, указанными в подключении.

Пришло время заняться практической настройкой NetworkManager. Хотя, как обсуждалось ранее, можно использовать несколько инструментов, здесь мы сосредоточимся на nmcli , инструменте командной строки, поставляемом с NetworkManager.

ПРИМЕЧАНИЕ. Программа nmcli имеет расширенную функцию автозаполнения. Убедитесь, что установлен пакет bash-completion, чтобы воспользоваться этим преимуществом.

основы NMCLI

Давайте рассмотрим работу с различными аспектами вашей сети с помощью nmcli .

Устройства

Чтобы получить список устройств, обнаруженных NetworkManager, введите:

Как видно из выходных данных, NetworkManager обнаружил в системе три устройства Ethernet. Только к первому из них, enp1s0, применено активное соединение (что означает, что оно настроено).

Если вы хотите, чтобы NetworkManager на какое-то время перестал заботиться об одном устройстве, нет необходимости его выключать. Просто временно отмените управление устройством:

Однако это изменение не является постоянным и не сохранится после перезагрузки.

Самый простой способ получить IP-конфигурацию для каждого устройства — выполнить команду nmcli без аргументов:

связи

Чтобы получить список доступных подключений, введите:

Выходные данные в этом примере показывают, что единственным активным соединением является ether-enp1s0 , примененное к устройству enp1s0 . Два других подключения также присутствуют, но они неактивны.

Чтобы деактивировать соединение, т. е. удалить связанное устройство, просто дайте NetworkManager команду отключить соединение отключить. Например, чтобы деактивировать соединение ether-enp1s0:

Чтобы активировать его обратно и таким образом перенастроить устройство:

Чтобы просмотреть сведения о конкретном соединении, мы должны проверить его свойства:

Список свойств соединения довольно длинный и сгруппирован по настройкам. Фактически каждое свойство указывается как имя_настройки.имя_свойства. Давайте выделим несколько основных свойств, относящихся к соединению и настройкам IPv4:

Содержит удобочитаемое имя соединения (отображаемое в выходных данных соединения nmcli).

Привязывает подключение к определенному устройству, поэтому подключение можно активировать только на этом устройстве.

Обратите внимание, что некоторые часто используемые свойства имеют псевдонимы, то есть короткие имена, которые можно использовать вместо полной нотации setting.property. В таблице 1 перечислены псевдонимы (если они доступны) в третьем столбце. Кроме того, все команды nmcli могут быть усечены, чтобы использовать версии для выполнения одного и того же действия.Например, чтобы отключить автоподключение для соединения ether-enp1s0, мы могли бы сократить указанную выше команду модификации следующим образом:

Что касается специфики, то свойство autoconnect управляет автоматической активацией соединения. Если он включен ( = yes , по умолчанию), как только устройство с именем интерфейса будет готово и на нем не будут активны никакие другие соединения, соединение автоматически активируется NetworkManager. Если для ipv4.method задано значение auto , конфигурация IPv4 извлекается через DHCP.

Если вместо этого вы предпочитаете статическую конфигурацию IPv4, задайте для ipv4.method значение manual и укажите статический IP-адрес и подсеть (в нотации CIDR) в свойстве ipv4.addresses. Более полное описание всех свойств и их значений см. на справочной странице nm-settings ( man nm-settings ).

Теперь, чтобы изменить свойства, принадлежащие соединению, мы должны использовать команду изменения соединения nmcli. Давайте изменим наше соединение ether-enp1s0, чтобы оно имело статический адрес IPv4 (давайте выберем 10.10.10.1), шлюз (10.10.10.254) и DNS (10.10.10.254):

Эта команда постоянно изменяет подключение, но новые настройки не будут применены к устройству немедленно: они будут применены при следующей активации подключения на этом устройстве. Итак, чтобы наши настройки заработали прямо сейчас, давайте снова активируем соединение:

Вы также можете запретить NetworkManager активировать соединение ether-enp1s0:

С этого момента вам придется самостоятельно активировать соединение ether-enp1s0.

Создание нового подключения с помощью nmcli

Вот и пришло время создать новое соединение в NetworkManager с помощью nmcli! Подкоманда соединения nmcli — это add , а ее синтаксис аналогичен подкоманде модификации:

Поскольку мы не указали какое-либо свойство IPv4, конфигурация IPv4 будет получена через DHCP, поскольку по умолчанию для свойства ipv4.method установлено значение auto .

При создании соединения обязательные свойства зависят от типа соединения ( ethernet , wifi , bond , vpn и т.д.) Если какое-либо из обязательных свойств отсутствует, nmcli вернет ошибку, напечатав имя отсутствующего свойства .

Если вы предпочитаете более интерактивный интерфейс, добавьте флаг --ask в команду nmcli. Таким образом, nmcli интерактивно подскажет вам, что необходимо для выполнения команды, а не с ошибкой:

Режим редактора доступен через nmcli con edit . Этот режим предлагает встроенную справку и еще более интерактивный опыт. Вызов этого режима без каких-либо аргументов заставляет редактор nmcli запрашивать у вас тип создаваемого соединения. Вместо этого передайте имя соединения, и редактор откроет соединение, чтобы изменить его.

шпаргалка по nmcli

Вот сводка команд подключения nmcli, которые мы видели до сих пор:

Указанное соединение будет разорвано, и конфигурация связанного устройства будет удалена.

Активирует указанное соединение.

При использовании без аргументов команду show можно не указывать, так как это команда по умолчанию: в ней перечислены все доступные соединения. Если в качестве аргумента указано имя соединения или UUID, распечатываются свойства соединения.

Изменит свойства соединения

Создаст новое соединение с указанными свойствами. Обязательные свойства зависят от типа подключения, который всегда следует указывать.

Что дальше?

Теперь мы познакомились с базовой философией NetworkManager и его основными понятиями (устройство и соединение). Мы также видели, что NetworkManager может управлять одновременными запросами с помощью нескольких инструментов несколькими способами. Используя инструмент командной строки NetworkManager, nmcli, мы узнали, как отображать фактическую конфигурацию и как добавлять, изменять и активировать/деактивировать соединения на устройствах. Эти знания помогут вам понять и управлять NetworkManager.

NetworkManager может делать гораздо больше. Многие функции заслуживают отдельных сообщений в блогах, таких как сценарии диспетчера, средства проверки подключения, разделенный DNS, рандомизация MAC-адресов, настройка точки доступа и автоматическая настройка. Итак, следите за обновлениями здесь для следующих сообщений в блоге. Или, если вам не терпится, начните искать на справочных страницах NetworkManager!

Читайте также: