zaLinux.ru

Как запретить NetworkManager управлять определённым интерфейсом? (РЕШЕНО)


NetworkManager — это служба для Linux, которая управляет различными сетевыми интерфейсами, включая физические, такие как Ethernet и беспроводной, и виртуальные, такие как VPN и другие туннели. Network Manager можно настроить для управления некоторыми или всеми интерфейсами системы.

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

Хотя NetworkManager это отличная служба для управления повседневными потребностями компьютера пользователя, его эффекты обычно не оптимальны для среды тестирования. NetworkManager может самостоятельно, без запроса пользователя, менять MAC-адреса сетевых интерфейсов, а также менять их состояние — например, при подключении USB Wi-Fi адаптера именно NetworkManager переводит его в состояние up (включено), может вывести беспроводной интерфейс из режима монитора и перевести его в обычное состояние.

Связанная статья: Как поменять MAC-адрес в Linux, как включить и отключить автоматическую смену (спуфинг) MAC в Linux

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

Что такое unmanaged (без управления) интерфейс в NetworkManager

Состояние unmanaged (без управления) в NetworkManager для сетевого интерфейса означает, что NetworkManager никак не взаимодействует с данным сетевым интерфейсом: не включает его, не меняет его режим работы, не меняет MAC-адрес, не использует для поиска сетей и даже не показывает в списке сетевых интерфейсов — то есть NetworkManager делает вид, что этого интерфейса в системе просто нет.

Как определить, управляет ли NetworkManager определённым сетевым интерфейсом

Состояние unmanaged имеет эффект только в самом NetworkManager. Вы, как обычно, можете видеть все сетевые интерфейсы командой

ip a

или только беспроводные командой

iw dev

При этом там никак не обозначено, управляет ли этим интерфейсом NetworkManager.

Как уже было сказано, если ваше устройство отсутствует в списке сетевых интерфейсов, которые показывает NetworkManager, значит оно может быть в состоянии unmanaged.

Но чтобы быть точно уверенным в этом, можно использовать команду nmcli — это инструмент командной строки для управления NetworkManager. Чтобы вывести список сетевых интерфейсов и их состояние выполните команду:

nmcli dev status

Для unmanaged устройств будет показано «без управления».

Предположим, я хочу, чтобы NetworkManager никак не менял настройки беспроводного сетевого интерфейса с именем wlp0s20f0u1.

Как временно перевести сетевой интерфейс в unmanaged (без управления) в NetworkManager

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

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


nmcli dev set ИНТЕРФЕЙС managed no

Например:

nmcli dev set wlp0s20f0u1 managed no

Проверяем:

nmcli dev status

Обратите внимание на строку:


wlp0s20f0u1   wifi      без управления  --             

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

Как перевести сетевой интерфейс в unmanaged (без управления) в NetworkManager, чтобы это сохранялось после перезагрузки

Чтобы NetworkManager не трогал сетевой интерфейс сразу после запуска службы и чтобы эта настройка сохранилась после перезагрузки, нужно использовать метод keyfile.

Для этого откройте файл /etc/NetworkManager/NetworkManager.conf:

sudo gedit /etc/NetworkManager/NetworkManager.conf

И добавьте туда строки вида:

[keyfile]
unmanaged-devices=mac:00:11:22:33:44:55;mac:66:77:88:99:00:aa

Вы можете перечислить любое количество MAC-адресов.

Посмотреть MAC-адреса сетевых интерфейсов можно командой

ip a

Но помните, что NetworkManager уже мог присвоить произвольный MAC-адрес, чтобы увидеть настоящий, выполните команду вида:

nmcli dev set ИНТЕРФЕЙС managed no

Перечислите MAC-адрес каждого интерфейса, который Network Manager должен игнорировать, через точку с запятой. Убедитесь, что перечисленные здесь MAC-адреса записаны в нижнем регистре.

Более новые версии NetworkManager могут также использовать более общий альтернативный метод KEYFILE, который не включает фактические MAC-адреса и вместо этого использует имена интерфейсов. Этот синтаксис заменяет приведённый выше раздел [keyfile] следующим:

[keyfile]
unmanaged-devices=interface-name:eth*,except:interface-name:eth0;interface-name:wlan*

К примеру, я хочу, чтобы NetworkManager не управлял сетевыми интерфейсами wlp0s20f0u1, wlp0s20f0u2 и wlp0s20f0u3, тогда мои строки следующие:


[keyfile]
unmanaged-devices=interface-name:wlp0s20f0u1;interface-name:wlp0s20f0u2;interface-name:wlp0s20f0u3

Сохраните сделанные изменения и перезапустите службу:

sudo systemctl restart NetworkManager

Проверим:

nmcli dev status

Как вернуть сетевой интерфейс под управление NetworkManager

Теперь перечисленные сетевые интерфейсы всегда будут «без управления». Но их можно вновь передать под управление NetworkManager. Для этого достаточно откатить сделанные изменения в файле NetworkManager.conf и перезапустить службу.

Если вы вывели интерфейс из-под управления NetworkManager командой nmcli, то вернуть его в прежнее состояние можно командой:

nmcli dev set ИНТЕРФЕЙС managed yes

Как выключить NetworkManager

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

sudo systemctl stop NetworkManager

Если вы хотите убрать NetworkManager из автозагрузки, то выполните:

sudo systemctl disable NetworkManager

Чтобы вновь запустить NetworkManager и добавить его в автозагрузку выполните:

sudo systemctl start NetworkManager
sudo systemctl enable NetworkManager

Рекомендуемые статьи:

1 Комментарий

  1. Vladimir

    СПАСИБО!

Добавить комментарий для Vladimir Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *