Керуємо мережевими підключеннями в Linux за допомогою консольної утиліти nmcli

Керуємо мережевими підключеннями в Linux за допомогою консольної утиліти nmcli
14 хв. читання
17 листопада 2020

Використовуйте всі можливості інструменту управління мережевими підключеннями NetworkManager в командному рядку Linux c допомогою утиліти nmcli.

Утиліта nmcli безпосередньо звертається до API для доступу до функцій NetworkManager.

Вона з'явилася в 2010 році і для багатьох стала альтернативним способом налаштування мережевих інтерфейсів і з'єднань. Хоча хтось досі використовує ifconfig. Так як nmcli - це інструмент інтерфейсу командного рядка (CLI), призначений для використання в вікнах терміналів і скриптах, він ідеально підходить для системних адміністраторів, які працюють без GUI.

Синтаксис команд nmcli

У загальному вигляді синтаксис виглядає так:

$ nmcli <options> <section> <action>
  • options - це параметри, які визначають тонкощі роботи nmcli,
  • section (секція) - визначає, які можливості утиліти користуватися,
  • action (дія) - дозволяє вказати, що, власне, потрібно зробити.

Всього існує 8 секцій, кожна з яких пов'язана з якимось набором команд (дій):

  • Help видає довідку про команди ncmcli і їх використання.
  • General повертає статус NetworkManager і глобальну конфігурацію.
  • Networking включає команди для запиту стану мережевого підключення і вмикання/вимкнення підключень.
  • Radio включає команди для запиту стану підключення до мережі WiFi і вмикання/вимкнення підключень.
  • Monitor включає команди для моніторингу активності NetworkManager і спостереження за змінами стану мережевих підключень.
  • Connection включає команди для управління мережевими інтерфейсами, для додавання нових з'єднань і видалення існуючих.
  • Device в основному використовується для зміни параметрів, пов'язаних з пристроями (наприклад, імені інтерфейсу) або для підключення пристроїв з використанням існуючого з'єднання.
  • Secret реєструє nmcli як «секретного агента» NetworkManager, який прослуховує таємні повідомлення. Ця секція використовується рідко, тому що nmcli при підключенні до мереж по дефолту працює саме так.

Прості приклади

Перед початком роботи переконайтеся, що NetworkManager запущений і nmcli може спілкуватися з ним:

$ nmcli general
STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN    
connected  full          enabled  enabled  enabled  enabled

Часто роботу починають з перегляду всіх профілів мережевих підключень:

$ nmcli connection show
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3
Wired connection 2  2279d917-fa02-390c-8603-3083ec5a1d3e  ethernet  enp0s8
Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9

Це команда використовує дію show для секції Connection.

На тестовій машині крутиться Ubuntu 20.04. В даному випадку ми знайшли три провідних підключення: enp0s3, enp0s8, and enp0s9.

Управління підключеннями

Важливо розуміти, що в nmcli під терміном Connection ми маємо на увазі сутність, яка містить всю інформацію про з'єднання. Іншими словами, це конфігурація мережі. Connection інкапсулює всю інформацію, пов'язану зі з'єднаннями, включаючи канальний рівень і інформацію про IP-адресацію. Це рівні 2 і 3 в мережевий моделі OSI.

Коли ви налаштовуєте мережу в Linux, ви зазвичай налаштовуєте з'єднання, які в кінцевому підсумку будуть прив'язані до мережевих пристроїв, які в свою чергу є мережевими інтерфейсами, встановленими на комп'ютері. Коли пристрій використовує з'єднання, воно вважається активним або піднятим. Якщо з'єднання не використовується, то воно неактивне або скинуто.

Додавання мережевих з'єднань

Утиліта nmcli дозволяє швидко додавати і відразу ж налаштовувати з'єднання. Наприклад, щоб додати Wired connection 2 (з enp0s8), потрібно від імені суперкористувача запустити наступну команду:

$ sudo nmcli connection add type ethernet ifname enp0s8
Connection 'ethernet-enp0s8' (09d26960-25a0-440f-8b20-c684d7adc2f5) successfully added.

В опції type ми вказуємо, що це буде Ethernet-з'єднання, а в опції ifname (interface name) вказуємо мережевий інтерфейс, який хочемо використовувати.

Ось що буде після запуску команди:

$ nmcli connection show
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3
Wired connection 2  2279d917-fa02-390c-8603-3083ec5a1d3e  ethernet  enp0s8
Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9
ethernet-enp0s8     09d26960-25a0-440f-8b20-c684d7adc2f5  ethernet  --  

Створено нове з'єднання, ethernet-enp0s8. Йому був призначений UUID, тип підключення - Ethernet. Піднімемо його за допомогою команди up:

$ nmcli connection up ethernet-enp0s8
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

Ще раз перевіряємо список активних з'єднань:

$ nmcli connection show --active
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  ac3241e4-b424-35d6-aaa7-07498561688d  ethernet  enp0s3
ethernet-enp0s8     09d26960-25a0-440f-8b20-c684d7adc2f5  ethernet  enp0s8
Wired connection 3  52d89737-de92-35ec-b082-8cf2e5ac36e6  ethernet  enp0s9

Додано нове з'єднання ethernet-enp0s8, воно активне і використовує мережевий інтерфейс enp0s8.

Налаштування підключень

Утиліта nmcli дозволяє легко міняти параметри вже існуючих підключень. Наприклад, вам потрібно змінити динамічний (DHCP) на статичну IP-адресу.

Нехай нам потрібно встановити IP-адресу рівну 192.168.4.26. Для цього використовуємо дві команди. Перша безпосередньо встановить IP-адресу, а друга перемкне метод установки IP-адреси на значення «вручну» (manual):

$ nmcli connection modify ethernet-enp0s8 ipv4.address 192.168.4.26/24
$ nmcli connection modify ethernet-enp0s8 ipv4.method manual

Не забудьте також задати маску підмережі. Для нашого тестового підключення це 255.255.255.0, або  /24 для безкласової маршрутизації (CIDR).

Щоб зміни вступили в силу, потрібно деактивувати і потім активувати з'єднання знову:

$ nmcli connection down ethernet-enp0s8
Connection 'ethernet-enp0s8' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
$ nmcli connection up ethernet-enp0s8
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveC

Якщо вам навпаки потрібно встановити DHCP, замість manual використовуйте auto:

$ nmcli connection modify ethernet-enp0s8 ipv4.method auto

Робота з пристроями

Для цього ми використовуємо секцію Device.

Перевірка статусу пристроїв

$ nmcli device status
DEVICE  TYPE      STATE      CONNECTION        
enp0s3  ethernet  connected  Wired connection 1
enp0s8  ethernet  connected  ethernet-enp0s8    
enp0s9  ethernet  connected  Wired connection 3
lo      loopback  unmanaged  --  

Запит інформації про пристрій

Для цього використовуємо дію show з секції Device (потрібно обов'язково вказати ім'я пристрою). Утиліта показує досить багато інформації, часто на декількох сторінках.
Давайте подивимося на інтерфейс enp0s8, який використовує наше нове з'єднання. Переконаємося, що воно використовує рівно ту IP-адресу, яку ми встановили раніше:

$ nmcli device show enp0s8
GENERAL.DEVICE:                         enp0s8
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         08:00:27:81:16:20
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     ethernet-enp0s8
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/6
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.4.26/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 192.168.4.0/24, nh = 0.0.0.0, mt = 103
IP6.ADDRESS[1]:                         fe80::6d70:90de:cb83:4491/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 103
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255

Інформації достатньо багато. Виділимо головне:

  • Ім'я мережевого інтерфейсу: enp0s8.
  • Тип з'єднання: дротове Ethernet-з'єднання.
  • Ми бачимо MAC-адресу пристрою.
  • Вказано Maximum transmission unit (MTU) - максимальний розмір корисного блоку даних одного пакета, який може бути переданий протоколом без фрагментації.
  • Пристрій в даний момент підключено.
  • Ім'я з'єднання, яке використовує пристрій: ethernet-enp0s8.
  • Пристрій використовує ту IP-адресу, яку ми встановили раніше: 192.168.4.26/24.

Інша інформація відноситься до параметрів маршрутизації і шлюзу з'єднання. Вони залежать від конкретної мережі.

Інтерактивний редактор nmcli

У nmcli також є простенький інтерактивний редактор, в якому декому  може бути комфортніше працювати. Щоб запустити його, наприклад, для з'єднання ethernet-enp0s8, використовуйте дію edit:

$ nmcli connection edit ethernet-enp0s8

У нього також є невелика довідка, яка, правда, поступається за розміром консольній версії:

===| nmcli interactive connection editor |===
Editing existing '802-3-ethernet' connection: 'ethernet-enp0s8'
Type 'help' or '?' for available commands.
Type 'print' to show all the connection properties.
Type 'describe [.]' for detailed property description.
You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, tc, proxy
nmcli>

Якщо ви введете команду print і натиснете Enter, nmcli відобразить всі властивості з'єднання:

===============================================================================
                 Connection profile details (ethernet-enp0s8)
===============================================================================
connection.id:                          ethernet-enp0s8
connection.uuid:                        09d26960-25a0-440f-8b20-c684d7adc2f5
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              enp0s8
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.timestamp:                   1593967212
connection.read-only:                   no
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --

Наприклад, щоб задати для підключення властивість DHCP, введіть goto ipv4 і натисніть Enter :

nmcli> goto ipv4
You may edit the following properties: method, dns, dns-search, 
dns-options, dns-priority, addresses, gateway, routes, route-metric, 
route-table, routing-rules, ignore-auto-routes, ignore-auto-dns, 
dhcp-client-id, dhcp-iaid, dhcp-timeout, dhcp-send-hostname, 
dhcp-hostname, dhcp-fqdn, dhcp-hostname-flags, never-default, may-fail, 
dad-timeout
nmcli ipv4>

Потім пропишіть set method auto і натисніть Enter :

nmcli ipv4> set method auto
Do you also want to clear 'ipv4.addresses'? [yes]:

Якщо ви хочете очистити статичну IP-адресу, натисніть Enter. В іншому випадку введіть no і натисніть Enter. Ви можете зберегти її, якщо думаєте, що вона знадобиться вам в майбутньому. Але навіть зі збереженою статичною IP-адресою буде використаний DHCP, якщо method встановлений в значення auto.

Використовуйте команду save, щоб зберегти зміни:

nmcli ipv4> save
Connection 'ethernet-enp0s8' (09d26960-25a0-440f-8b20-c684d7adc2f5) successfully updated.
nmcli ipv4>

Введіть quit, щоб вийти з Інтерактивного редактора nmcli. Якщо передумали виходити - використовуйте команду back.

І це далеко не все

Відкрийте інтерактивний редактор nmcli і подивіться, скільки існує налаштувань і скільки властивостей має кожне налаштування. Інтерактивний редактор - відмінний інструмент, але, якщо ви хочете використовувати nmcli в  скриптах, вам знадобиться звичайна версія для командного рядка.

Тепер, коли у вас є основи, ознайомтеся з довідковою сторінкою nmcli, щоб дізнатися, чим ще вона може вам допомогти.

Джерело: Manage network connections from the Linux command line with nmcli

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація