Использование 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
Другие полезные команды:
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.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 ваши замечания по данной заметке.
Если данная заметка оказалась вам полезной, можете поблагодарить автора финансово.