Сайт FSA
17.08.2022

Использование NetworkManager из командной строки

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

Другие полезные команды:

Использование 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.conf

IPv6 и делегирование префиксов

Если ваша сеть позволяет делегировать префиксы 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, которое касается этого функционала. Если у вас появится какая-то новая информация по этому поводу, напишите мне.


Обратите внимание, что заметки могут обновляться со временем. Это может быть как исправление найденных ошибок, так и доработка содержания с целью более полного раскрытия темы. Информация об изменениях доступна в репозитории на github. Там же вы можете оставить в Issue ваши замечания по данной заметке.


Если данная заметка оказалась вам полезной, можете поблагодарить автора финансово.