Використовуйте всі можливості інструменту управління мережевими підключеннями 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
Ще немає коментарів