NetworkManager - это программа для управления сетевыми соединениями в Linux. При первом знакомстве с ней у меня было желание сразу её удалить. Однако спустя несколько лет я установил себе Fedora, где это одно из основных средств управления сетью. Не буду рассуждать на тему нужности, удобности и уместности использования NetworkManager, а просто опишу как её можно использовать в режиме командной строки.
Просмотреть список текущих подключений можно с помощью команды nmcli connection show:
[~]$ nmcli connection show
NAME UUID TYPE DEVICE
ELTEX-D950 164beab3-4cbc-473f-8978-3465f79e251c wifi wlp3s0
enp0s3 64785acb-b64f-3f4f-91a8-1498e067afb3 ethernet -- В результате будет выведен список подключений. Некоторые из них создаются автоматически. Каждое соединение имеет своё имя (NAME) и уникальный идентификатор (UUID). При работе соединением через командную строку можно использовать как первое, так и второе. Однако имя соединения не обязано быть уникальным. В таком случае при указании имени соединения необходимо указывать его UUID.
Если необходимо изменить значения по умолчанию, то я предпочитаю создавать новое подключение. Сделать это для ethernet-соединений можно с помощью команды:
nmcli connection add type ethernet ifname enp0s3 con-name fsanetЧасть con-name fsanet задаёт для нового соединения имя fsanet. В качестве имени необходимо использовать своё значение. Можно полностью опустить эту часть, тогда новому соединению имя будет присвоено автоматически по определённому алгоритму, например, использую тип интерфейса и имя интерфейса (ethernet-enp0s3). Указание имени интерфейса также не требуется.
По умолчанию NetworkManager пытается автоматически получить данные для настройки сети. Чтобы изменить это поведение для IPv4, необходимо выполнить команду
nmcli connection modify fsanet ipv4.method manualПри этом необходимо установить адрес интерфейса вручную, например так
nmcli connection modify fsanet ipv4.address 192.168.1.2/24
nmcli connection modify fsanet ipv6.address fd11::2/64Можно использовать адреса IPv4 и IPv6 используя префикс ipv4 и ipv6 соответственно. Не забывайте указывать маску сети, иначе интерфейсу будет присвоен адрес с маской 255.255.255.255 или длиной маски сети 128 для IPv6, что скажется на работоспособности сети. Подобным образом задаётся адрес интерфейса или несколько адресов, которые можно указать используя в качестве разделителя запятую
nmcli connection modify fsanet ipv6.address fd11::2/64,fd11::3/64При задании адреса интерфейса все остальные адреса того же типа будут удалены. Если необходимо добавить ещё один или несколько, то необходимо добавить символ + перед параметром ipv4.address.
nmcli connection modify fsanet +ipv4.address 192.168.1.3/24Используя знак минус можно удалить ранее добавленный адрес и сохранить остальные
nmcli connection modify fsanet -ipv4.address 192.168.1.3/24Обратите внимание, если какое-то из значений параметров содержит пробелы, то такие параметры необходимо заключать в двойные кавычки, например, для присвоения IPv4 адреса для соединения Wired connection 1 выполните команду
nmcli connection modify "Wired connection 1" ipv4.address 192.168.1.2/24Отключить соединение можно с помощью команды
nmcli connection down fsanetПодключить
nmcli connection up fsanetВключить автоматическое получение адреса можно с помощью команды
nmcli connection modify fsanet ipv4.method autoИнтерактивный редактор соединения можно запустить с помощью команды
nmcli connection edit fsanetРаспечатать список доступных параметров можно с помощью
printПереход к параметрам, которые начинаются на ipv4
goto ipv4Можно, например, включить автоматическое получение IPv4 адресов и сохранить это поведение с помощью следующей последовательности команд
nmcli ipv4> set method auto
nmcli ipv4> saveДругие полезные команды:
back- вернуться к предыдущему уровняю настроек;quit- выйти из системы.
Использование WiFi
В некоторых случаях необходимо не только настроить сеть, но и осуществить подключение к WiFi сети, например, если вы поставили ОС без графической оболочки на одноплатный компьютер.
Во-первых, убедитесь, что WiFi на вашем оборудовании доступен и включен:
nmcli radio wifiВключить и выключить можно следующим образом
nmcli radio wifi on
nmcli radio wifi offПросмотр списка доступных WiFi сетей
nmcli device wifi listЕсли у вас несколько адаптеров, то можно дополнить команду параметром ifname с указанием имени необходимого адаптера.
Подключаемся к необходимой сети (в данном случае к fsa5g с паролем PaSsWoRd)
nmcli device wifi connect fsa5g password PaSsWoRdБудет создано новое подключение с именем точки доступа. Если имя соединения нужно изменить, добавьте параметр name с указанием желаемого имени соединения.
Далее управлять соединением можно аналогично, как это происходит с проводным подключением.
Просмотр состояния всех устройств
Просмотреть список всех доступных устройств можно с помощью команды
nmcli deviceАналогичный результат выведет полная команда nmcli device status. В результате будет указаны имена устройств, типы устройств, их состояние и имя используемого соединения, например
DEVICE TYPE STATE CONNECTION
wlp3s0 wifi подключено fsa5g
lo loopback подключено (внешнее) lo
wg0 wireguard подключено (внешнее) wg0
p2p-dev-wlp3s0 wifi-p2p отключено --
enp2s0 ethernet недоступно --В данном примере видно, что основное соединение произведено через WiFi сеть с использованием соединения fsa5g. В системе присутствует стандартный петлевой интерфейс lo. Также активно соединение VPN на базе Wireguard, при чём управлением этим соединением NetworkManager не занимается, т.к. указано, что подключение «внешнее»,например, так будет при использовании wg-quick). Соединение wifi-p2p в настоящий момент неактивно. Интерфейс Ethernet enp2s0 не подключен.
Wireguard
NetworkManager может управлять соединениями через Wireguard. Для этого необходимо импортировать конфигурацию, которая используется wg-quick, например, из файла wg0.conf, с помощью команды
nmcli connection import type wireguard file wg0.confIPv6 и делегирование префиксов
Если ваша сеть позволяет делегировать префиксы IPv6, то вы можете получить его. Для этого у интерфейса, где вы будете получать префикс должно быть выставлено ipv6.method в auto. Для интерфейсов, куда префикс нужно делегировать ipv6.method shared.
По умолчанию выдаётся префикс /63. Можно указать какой префикс вы желаете получить при подключении к этой сети, например, /62:
nmcli connection modify NAME ipv6.dhcp-pd-hint ::/62В качестве параметра вы можете указать адрес IPv6, за которым следует косая черта и длина префикса. Если адрес установлен, то значение отправляется на сервер DHCPv6 в качестве подсказки, указывающей какой префикс вы хотите получить. В данном случае была указана только длина префикса («::/62»), будут получены префиксы доступные префиксы, например, для GUA и ULA.
Запрошенные префиксы могут быть выданы на необходимые интерфейсы с помощью параметра ipv6.method со значением shared:
nmcli connection modify cni-podman1 ipv6.method sharedУвы, но данный функционал у меня работает не очень стабильно. Почему-то на интерфейсы выдаются ULA и GUA, но при этом ULA оказывается не рабочим. А для интерфейсов типа мост, который можно использовать с виртуальным машинами работает только ULA, что не позволяет виртуальной машине выходить в интернет, но при этом она прекрасно видит локальную сеть. На странице NetworkManager имеется открытое Issue, которое касается этого функционала. Если у вас появится какая-то новая информация по этому поводу, напишите мне.