Глава 12. Сетевое управление RHEL9
Содержание
Трудно представить себе систему RHEL9, которая не обладает хотя бы одним сетевым подключением, а ещё труднее представить как такая изолированная система может оказаться полезной на практике. Простой факт состоит в том, что RHEL9 предназначена для предоставления услуг корпоративного уровня через сетевую среду и подключения Интернет. Поэтому важной частью обучения администрированию системы RHEL9 является изучение того как настраивать установленные в данной системе сетевые интерфейсы и управлять ими.
В данной главе представлен обзор управления сетевой средой в RHEL9, включая службу 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 должен устанавливаться по умолчанию для большинства установок 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
будет установлено как часть всего пакета 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
------------------------------------------------------------------------------
Помимо управления управления сетевыми средами в 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
.