Глава 12. Сетевое управление RHEL9

Трудно представить себе систему RHEL9, которая не обладает хотя бы одним сетевым подключением, а ещё труднее представить как такая изолированная система может оказаться полезной на практике. Простой факт состоит в том, что RHEL9 предназначена для предоставления услуг корпоративного уровня через сетевую среду и подключения Интернет. Поэтому важной частью обучения администрированию системы RHEL9 является изучение того как настраивать установленные в данной системе сетевые интерфейсы и управлять ими.

В данной главе представлен обзор управления сетевой средой в RHEL9, включая службу NetworkManager и её инструменты, а также ряд прочих полезных утилит.

Введение в NetworkManager

NetworkManager это служба и набор инструментов, разработанных специально для упрощения управления настройкой сетей систем Linux и выступает устанавливаемой по умолчанию службой сетевого управления в RHEL9.

Дополнительно к исполняемой в фоновом режиме службе, NetworkManager также включает следующие средства:

  • nmcli - Средство для работы с NetworkManager через командную строку. Этот инструмент полезен когда недоступен доступ к графической среде и может применяться внутри сценариев для внесения изменений в сетевую конфигурацию.

  • nmtui - Базовый текстовый интерфейс пользователя управления NetworkManager. Это средство может запускаться внутри любого окна терминала и позволяет внесение изменений выполняя выборы в меню и вводя данные. Будучи полезной для осуществления базовых задач, nmtui лишена многих функциональных возможностей, предоставляемых средством nmcli.

  • nm-connection-editor - Полностью графический инструмент, предоставляющий доступ к большинству вариантов конфигураций NetworkManager.

  • GNOME Settings - Это экран Cockpit Network Settings приложения Settings рабочего стола GNOME, предоставляющий для исполнения базовые задачи управления сетями.

  • Cockpit Network Settings - Экран Cockpit Network веб интерфейса Cockpit, позволяющий осуществлять некий диапазон задач сетевого управления.

Хотя в системе RHEL9 существует несколько способов управления сетевой средой, данная глава сосредоточится на команде nmcli. Хотя имеющиеся графические средства несомненно удобны когда у вас имеется доступ к среде рабочего стола или когда разрешён Cockpit, понимание интерфейса командной строки является существенным для ситуаций, при которых командная строка это всё что у вас есть. К тому же, графические средства (включая Cockpit) содержат лишь некоторые возможности основного инструмента nmcli. Наконец, когда вы ознакомлены с NetworkManager и nmcli, эти навыки запросто переносятся при применении более интуитивно понятных вариантов инструментов. То же самое нельзя сказать о вариантах графических средств. Намного сложнее, например, применять nmcli когда вы даже пользуетесь лишь nm-connection-editor.

Установка и включение NetworkManager

NetworkManager должен устанавливаться по умолчанию для большинства установок RHEL9. Если вам требуется его установить, для его поиска воспользуйтесь командой rpm:


# rpm -q NetworkManager
NetworkManager-1.14.0-14.el8.x86_64
		

Если это необходимо, установите данный пакет таким образом:


# dnf install NetworkManager
		

После установки данного пакета демон NetworkManager потребуется разрешить с тем, чтобы он стартовал при каждом запуске своей системы:


# systemctl enable NetworkManager
		

Наконец, запустите эту службу для её исполнения и проверьте значение её состояния, чтобы убедиться что данный запуск был успешным:


# systemctl start NetworkManager
# systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor >
  Drop-In: /usr/lib/systemd/system/NetworkManager.service.d
           └─NetworkManager-ovs.conf
   Active: active (running) since Tue 2019-04-09 10:07:22 EDT; 2h 48min ago
		

Базовые команды nmcli

Средство nmcli будет установлено как часть всего пакета NetworkManager и может исполняться из командной строки при помощи следующего синтаксиса:


# nmcli [Options] Object {Command | help}
		

В приводимом выше синтаксисе, Object будет одним из general, networking, radio, connection, monitor, device или agent, которые можно сокращать до нескольких букв из самого слова (например, con, или даже просто буква c, для connection). Например, все идущие ниже команды выведут относящиеся к объекту device справочные сведения:


# nmcli device help
# nmcli dev help
# nmcli d help
		

Для проверки общего состояния NetworkManager данной системы воспользуйтесь такой командой:


# nmcli general status
STATE      CONNECTIVITY  WIFI-HW   WIFI     WWAN-HW  WWAN
connected  full          enabled   enabled  enabled  enabled
		 

Чтобы проверить значения состояния всех установленных в системе устройств, может быть полезной следующая команда:


# nmcli dev status
DEVICE       TYPE      STATE      CONNECTION
eno1         ethernet  connected  eno1
wlp0s26u1u2  wifi      connected  zoneone
virbr0       bridge    connected  virbr0
lo           loopback  unmanaged  --
virbr0-nic   tun       unmanaged  --
		

Получаемый вывод также можно видоизменить, применив параметр -p (pretty) чтобы превратить этот вывод в более дружелюбный:


# systemctl enable NetworkManager
		
# nmcli -p dev status ===================== Status of devices ===================== DEVICE TYPE STATE CONNECTION ------------------------------------------------------------------- eno1 ethernet connected eno1 wlp0s26u1u2 wifi connected zoneone virbr0 bridge connected virbr0 lo loopback unmanaged -- virbr0-nic tun unmanaged --

# systemctl enable NetworkManager
		

И наоборот, параметр -t может применяться для превращения получаемого вывода более terse (сжатым) и более подходящим для автоматизации обработки:


# nmcli -t dev status
eno1:ethernet:connected:eno1
wlp0s26u1u2:wifi:connected:emilyzone
virbr0:bridge:connected:virbr0
lo:loopback:unmanaged:
virbr0-nic:tun:unmanaged:
		

Вывод значения состояния показывает, что наша система обладает двумя установленными физическими устройствами, причём одно это Ethernet, а второе устройство WiFi.

Записи моста (bridge, virbr) это виртуальные устройства, применяемые для предоставления сетевых подключений виртуальным машинам (вопросы виртуализации будут рассмотрены начиная с Главы 20, Обзор методик виртуализации). Наконец, интерфейс loopback (обратной петли) это особое виртуальное устройство, которое позволяет данной системе взаимодействовать с собой и обычно применяется для выполнения сетевой диагностики.

При работе с NetworkManager важно понимать имеющееся отличие между устройством и соединением. Как ужи описывалось ранее, устройство это либо физическое, либо виртуальное сетевое устройство, в то время как соединение это конфигурация сетевой среды, к которой подключается данное устройство.

Приводимая ниже команда отображает сведения относительно настроенных в данной системе соединений:


# nmcli con show
NAME           UUID                                  TYPE      DEVICE
zoneone        2abecafa-4ea2-47f6-b20f-4fb0c0fd5e94  wifi      wlp0s26u1u2
eno1           99d40009-6bb1-4182-baad-a103941c90ff  ethernet  eno1
virbr0         e13e9552-1765-42d1-b739-ff981668fbee  bridge    virbr0
zonetwo        f940a2d1-8c18-4a9e-bf29-817702429b8a  wifi      --
zonethree      fd65c5e5-3e92-4e9e-b924-1b0b07b70032  wifi      --
		

Приводимый выше вывод отображает, что наше устройство WiFi (wlp0s26u1u2) подключено к беспроводной сети с названием zoneone, в то время как устройство Ethernet (eno1) подключено к соединению с названием eno1. Дополнительно к zoneone, NetworkManager также перечислил и два других соединения WiFi с названиями zonetwo и zonethree, ни для одного из которых в настоящее время нет соединённых с ними устройств.

Чтобы определить значение выделенного соединению IP адреса, можно воспользоваться инструментом ip, который можно применить совместно с параметром address:


# ip address
		

Приведённая выше команда может быть сокращена:


# ip a
.
.
3: wlp0s26u1u2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 74:da:38:ee:be:50 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.121/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp0s26u1u2
       valid_lft 57584sec preferred_lft 57584sec
.
.
		

Данная команда ip выводит сведения для всех выявленных своей системой устройств. Например, приводимый выше вывод показывает, что устройству WiFi был назначен адрес IP 192.168.1.121 .

Когда мы желаем перечислить только активные соединения, может быть применена наша команда nmcli с параметром -a:


# nmcli con show -a
NAME       UUID                                  TYPE      DEVICE
zoneone    2abecafa-4ea2-47f6-b20f-4fb0c0fd5e94  wifi      wlp0s26u1u2
eno1       99d40009-6bb1-4182-baad-a103941c90ff  ethernet  eno1
virbr0     e13e9552-1765-42d1-b739-ff981668fbee  bridge    virbr0
		

Для переключения соединения нашего устройства WiFi с zoneone на zonetwo, мы можем выполнить такую команду:


# nmcli device wifi connect zonetwo -ask
Password:
		

Указанный флаг -ask вызывает у nmcli выдавать приглашение на ввод данного пользователя значения пароля для данной сетевой среды WiFi. Чтобы включить значения пароля WiFi в саму командную строку (что в особенности удобно когда данная команда выполняется в неком сценарии), воспользуйтесь параметром password:


# nmcli device wifi connect zonetwo password <password here>
		

Инструмент nmcli может также применяться для сканирования доступных сетей WiFi следующим образом:


# nmcli device wifi list
IN-USE  SSID         MODE   CHAN  RATE         SIGNAL  BARS  SECURITY
        zoneone      Infra  6     195 Mbit/s   80      WPA2
*       zonetwo      Infra  11    130 Mbit/s   74      WPA1  WPA2
		

Активное в данный момент соединение можно дезактивировать так:


# nmcli con down <connection name>
		

Аналогично, некое не активное соединение можно воскресить обратно в любой момент времени:


# nmcli con up <connection name>
		

Когда соединение разрывается, NetworkManager автоматически ищет другое соединение, активирует его и назначает его тому устройству, к которому данное соединение было установлено. Чтобы предотвратить применения соединения в подобной ситуации, отключите параметр autoconnect следующим образом:


# nmcli con mod <connection name> connection.autoconnect no
		

Приводимая ниже команда может использоваться для получения дополнительных сведений относительно конкретного соединения. Они содержат текущие значения для всех свойств данного соединения:


# nmcli con show eno1
connection.id:                           eno1
connection.uuid:                         99d40009-6bb1-4182-baad-a103941c90ff
connection.stable-id:                    --
connection.type:                         802-3-ethernet
connection.interface-name:               eno1
connection.autoconnect:                  yes
connection.autoconnect-priority:         0
connection.autoconnect-retries:          -1 (default)
connection.multi-connect:                0 (default)
connection.auth-retries:                 -1
connection.timestamp:                    1554833695
connection.read-only:                    no
connection.permissions:                  --
connection.zone:                         --
connection.master:                       --
connection.slave-type:                   --
connection.autoconnect-slaves:           -1 (default)
.
.
		

Все эти свойства можно изменять при помощи nmcli с параметром изменения воспользовавшись таким синтаксисом:


# nmcli con mod <connection name> connection.<property name> <setting>
		

Работа с профилями Соединений

До сих пор мы изучали применение соединений не поясняя как выполняется конфигурация соединения. Конкретная конфигурация соединения носит название профиля соединения и сохраняется в файле, располагающемся в каталоге /etc/NetworkManager/system-connections, содержимое которого можно считать следующим образом:


# ls /etc/NetworkManager/system-connections
zoneone.nmconnection     eno1.nmconnection
zonethree.nmconnection   zonetwo.nmconnection
		

К примеру, рассмотрим содержимое файла eno1.nmconnection:


id=eno1
uuid=efc69a99-17a3-3636-b68f-bfcc56a73844
type=ethernet
autoconnect-priority=-999
interface-name=eno1
timestamp=1679678184

[ethernet]

[ipv4]
method=auto

[ipv6]
addr-gen-mode=eui64
method=auto
[proxy]
		

Данный файл содержит основные сведения о данном соединении, включая значение типа (Ethernet) того устройства, которому оно назначено в данный момент (en01) и тот факт, что данное соединение подлежит автоматической активации при запуске этой системы в адресом IP, получаемым при помощи DHCP (auto). Изменения в профиле данного соединения могут реализовываться путём модификации данного файла и инструкции для nmcli перезагрузить файл конфигурации данного соединения:


# nmcli con reload
		

Профили нового соединения также могут создаваться вручную или вырабатываться автоматически посредством nmcli. Например, предположим, в данной системе было установлено новое сетевое устройство. Когда это происходит, наша служба NetworkManager определит такое новое оборудование и создаст для него устройство. В приводимом ниже примере, такому новому устройству было выделено имя en02:


# nmcli dev status
DEVICE      TYPE      STATE      CONNECTION
en01        ethernet  connected  eno1
eno2        ethernet  connected  Wired connection 1
		

NetworkManager автоматически определил данное устройство, активировал его и назначил ему соединение с названием "Wired connection 1". Именно оно выступает соединением по умолчанию, поверх которого у нас нет никакого контроля конфигурации, потому как не существует никакого файла конфигурации для него в etc/NetworkManager/system-connections. Таким образом, наши следующие шаги состоят в удалении соединения "Wired connection 1" и применении nmcli для создания нового соединения с назначением его данному устройству. Вот команда для удаления соединения:


# nmcli con delete "Wired connection 1"
		

Далее можно применить nmcli для создания нового профиля соединения, настроенного либо на статический IP адрес, либо на динамический IP адрес, получаемый от сервера DNCP. Для создания профиля динамического соединения с названием dyn_ip можно воспользоваться такой командой:


# nmcli connection add type ethernet con-name dyn_ip ifname eno2
Connection 'dyn_ip' (160d9e10-bbc8-439a-9c47-a2ec52990472) successfully added.
		

Для создания нового профиля соединения без его фиксации для конкретного устройства просто в своей команде опустите параметр ifname:


# nmcli connection add type ethernet con-name dyn_ip
		

После создания данного соединения, в наш каталог etc/NetworkManager/system-connections будет добавлен файл dyn_ip.nmconnection.

Как альтернатива, чтобы создать соединения с названием static_ip с назначенным ему IP адресом (в данном случае 192.168.1.200) можно применить следующую команду:


# nmcli con add type ethernet con-name static_ip ifname eno0 ip4 192.168.1.200/24 gw4 192.168.1.1
Connection 'static_ip' (3fccafb3-e761-4271-b310-ad0f28ee8606) successfully added.
		

Соответствующий файл static_ip.nmconnection будет считан следующим образом:


[connection]
id=static_ip
uuid=41eca181-381c-4d12-b6c9-30446d4e29d1
type=ethernet
interface-name=eno0

[ethernet]

[ipv4]
address1=192.168.1.200/24,192.168.1.1
method=manual

[ipv6]
addr-gen-mode=default
method=auto

[proxy]
		

Для назначения сразу и IPv4, и IPv6 статических адресов команда для добавления нового соединения может быть слегка видоизменена:


# nmcli con add type ethernet con-name static_ip ifname eno0 ip4 192.168.1.200/24 gw4 192.168.1.1 gw4 192.168.1.1 ip6 cabf::4532 gw6 2010:dfa::1
		

Интерактивное редактирование

Дополнительно к применению команды nmcli с её параметрами командной строки, обсуждаемые средства также содержат интерактивный режим, который можно применять для создания и изменения профилей соединения. Приводимая ниже транскрипция, к примеру, показывает интерактивный режим, применяемый для создания нового соединения Ethernet с названием demo_con:


# nmcli con edit
Valid connection types: 6lowpan, 802-11-olpc-mesh (olpc-mesh), 802-11-wireless (wifi), 802-3-ethernet (ethernet), adsl, bluetooth, bond, bridge, cdma, dummy, generic, gsm, infiniband, ip-tunnel, macsec, macvlan, ovs-bridge, ovs-interface, ovs-port, pppoe, team, tun, vlan, vpn, vxlan, wimax, wpan, bond-slave, bridge-slave, team-slave
Enter connection type: ethernet
 
===| nmcli interactive connection editor |===
 
Adding a new '802-3-ethernet' connection
 
Type 'help' or '?' for available commands.
Type 'print' to show all the connection properties.
Type 'describe [<setting>.<prop>]' 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 ipv4.addresses
ipv4.addresses: 192.168.1.200/24
nmcli> set ipv4.addresses 192.168.1.201/24
nmcli> save
Connection 'static_ip' (3fccafb3-e761-4271-b310-ad0f28ee8606) successfully updated.
nmcli> quit
		

Наша следующая транскрипция, с другой стороны, изменяет ранее созданный профиль соединения static_ip на применение другого статического IP адреса, нежели того, что был задан изначально:


# nmcli con edit static_ip

===| nmcli interactive connection editor |===
Editing existing '802-3-ethernet' connection: 'static_ip'

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 ipv4.addresses
ipv4.addresses: 192.168.1.200/24
nmcli> set ipv4.addresses 192.168.1.201/24
nmcli> save
Connection 'static_ip' (3fccafb3-e761-4271-b310-ad0f28ee8606) successfully
updated.
nmcli> quit
		

После внесения изменений в имеющееся соединение, не забудьте проинструктировать NetworkManager перезагрузить его профиль конфигурации:


# nmcli con reload
		

При использовании интерактивного режима полезно знать что доступна некая развитая встроенная система изучения того как применять данный инструмент. К соответствующим темам подсказок можно выполнять доступ набирая help или ? в приглашении на ввод nmcli >:


nmcli> ?
------------------------------------------------------------------------------
---[ Main menu ]---
goto     [<setting> | <prop>]        :: go to a setting or property
remove   <setting>[.<prop>] | <prop> :: remove setting or reset property value
set      [<setting>.<prop> <value>]  :: set property value
describe [<setting>.<prop>]          :: describe property
print    [all | <setting>[.<prop>]]  :: print the connection
verify   [all | fix]                 :: verify the connection
save     [persistent|temporary]      :: save the connection
activate [<ifname>] [/<ap>|<nsp>]    :: activate the connection
back                                 :: go one level up (back)
help/?   [<command>]                 :: print this help
nmcli    <conf-option> <value>       :: nmcli configuration
quit                                 :: exit nmcli
------------------------------------------------------------------------------
		

Настройка полномочий NetworkManager

Помимо управления управления сетевыми средами в RHEL9, NetworkManager также позволяет определять для соединений полномочия. Например, следующая команда ограничивает профиль соединения для root и учётных записей пользователей с именами john и caitlyn:


# nmcli con mod static_ip connection.permissions user:root,john,caitlyn
		

После того как NetworkManager перезагрузил профили данного соединения, наше соединение static_ip будет доступным и активным для прочих пользователей только тогда, когда в активном сеансе данной системы зарегистрирован один из запланированных для него пользователей. Как только последний из таких пользователей покинет систему, данное соединение отключится и будет оставаться не активным до тех пор, пока один из указанных пользователь не зарегистрируется снова.

Кроме того, только обладающие полномочиями пользователи способны изменять значение состояния или конфигурации такого соединения.

Заключение

Служба NetworkManager обрабатывает сетевое управление в RHEL9. NetworkManager рассматривает сетевую среду, как состоящую из интерфейсов сетевых устройств и соединений. Некое сетевое устройство может быть физическим устройством Ethernet или WiFi, либо виртуальным устройством, применяемым некой виртуальной гостевой машиной. Соединения представляют собой собственно сетевую среду к которой такие устройства подключаются и настраиваются профилями соединений. Некий профиль соединения будет, помимо прочих установок, определять будет ли данное соединение иметь статический или динамический IP адрес, значение IP адреса любого шлюза, который применяется для данной сетевой среды и должно или нет такое соединение устанавливаться автоматически при всяком запуске своей системы.

Администрирование NetworkManager может осуществляться различными средствами, включая инструменты командной строки nmcli и nmtui, графическое средство nm-connection-editor, а также раздел сетевых настроек веб интерфейса Cockpit. В целом наибольшее число функциональных возможностей и гибкости предоставляет инструмент командной строки nmcli.