Как настроить IP-сеть с помощью «nmcli» в Linux
Как администратор Linux, вы можете использовать различные инструменты для настройки сетевых подключений, такие как nmtui, ваш NetworkManager с графическим пользовательским интерфейсом GNOME и, конечно же, nmcli (инструмент командной строки сетевого менеджера).
Я видел, как многие администраторы использовали nmtui из-за его простоты. Однако использование nmcli экономит ваше время, повышает вашу уверенность, позволяет интегрировать его в сценарии и является основным инструментом для устранения неполадок в сети серверов Linux, быстро восстанавливая его функциональность.
Заметив многочисленные комментарии с просьбой о помощи по nmcli, я решил написать эту статью. Конечно, вам всегда следует внимательно читать справочные страницы (для вас это ресурс № 1). Моя цель — сэкономить ваше время и дать несколько полезных советов.
Синтаксис команды nmcli
Синтаксис nmcli:
nmcli [OPTIONS] OBJECT {COMMAND | help}
Где OBJECT
— это один из следующих значений: «Общий», «Сеть», «Радио», «Подключение», «Устройство» и «Агент».
Проверьте состояние сетевого устройства в Linux
Хорошей отправной точкой будет проверка наших устройств:
nmcli dev status
DEVICE TYPE STATE CONNECTION
docker0 bridge connected docker0
virbr0 bridge connected virbr0
enp0s3 ethernet connected enp0s3
virbr0-nic ethernet disconnected --
lo loopback unmanaged --
Как мы видим в первом столбце, есть список наших сетевых устройств. У нас есть одна сетевая карта с именем enp0s3
. На вашем компьютере вы можете увидеть разные имена.
Именование зависит от типа сетевой карты (встроенная ли она, PCI-карта и т.п.). В последнем столбце мы видим наши файлы конфигурации, которые используются нашими устройствами для подключения к сети.
Легко понять, что наши устройства сами по себе ничего не могут сделать. Им нужно, чтобы мы создали файл конфигурации, чтобы проинструктировать их о том, как обеспечить сетевое подключение. Эти файлы также называются «профили подключения», и мы находим их в каталоге /etc/sysconfig/network-scripts.
cd /etc/sysconfig/network-scripts/
ls
Пример вывода
ifcfg-enp0s3 ifdown-isdn ifup ifup-plip ifup-tunnel
ifcfg-lo ifdown-post ifup-aliases ifup-plusb ifup-wireless
ifdown ifdown-ppp ifup-bnep ifup-post init.ipv6-global
ifdown-bnep ifdown-routes ifup-eth ifup-ppp network-functions
ifdown-eth ifdown-sit ifup-ib ifup-routes network-functions-ipv6
ifdown-ib ifdown-Team ifup-ippp ifup-sit
ifdown-ippp ifdown-TeamPort ifup-ipv6 ifup-Team
ifdown-ipv6 ifdown-tunnel ifup-isdn ifup-TeamPort
Как вы можете видеть здесь, файлы с именами, начинающимися с 'ifcfg-'
(конфигурация интерфейса), представляют собой профили подключения. Когда мы создаем новое соединение или изменяем существующее с помощью nmcli или nmtui, результаты сохраняются здесь в виде профилей подключения.
Я покажу вам два из них со своей машины: один с конфигурацией DHCP и один со статическим IP-адресом.
cat ifcfg-static1
cat ifcfg-Myoffice1
Мы понимаем, что некоторые свойства имеют разные значения, а некоторые не существуют, если они не нужны.
Давайте кратко рассмотрим наиболее важные из них.
TYPE
– здесь у нас есть тип Ethernet. Мы также могли бы иметь Wi-Fi, команду, связь и другие.DEVICE
– имя сетевого устройства, связанного с этим профилем.BOOTPROTO
— если он имеет значение “dhcp”, то наш профиль подключения получает динамический IP-адрес от DHCP-сервера. Если он имеет значение «none», то он не использует динамический IP-адрес, и мы, скорее всего, назначим статический IP-адрес.IPADDR
— статический IP-адрес, который мы присваиваем нашему профилю.PREFIX
– маска подсети. Значение 24 означает 255.255.255.0. Вы можете лучше понять маску подсети, записав ее двоичный формат. Например, значения 16, 24 и 26 означают, что первые значения 16, 24< или 26 бит соответственно имеют значение 1, а остальные равны 0. Это определяет сетевой адрес и диапазон IP-адресов, которые можно назначить.GATEWAY
– IP-адрес шлюза.DNS1
,DNS2
— два DNS-сервера, которые мы хотим использовать.ONBOOT
– если он имеет значение «да», это означает, что при загрузке наш компьютер прочитает этот профиль и попытается назначить его своему устройству.
Проверьте сетевое соединение в Linux
Теперь продолжим и проверим наши соединения:
nmcli con show
Последний столбец устройств помогает нам понять, какое соединение «UP» работает, а какое нет. На изображении выше вы можете видеть два активных подключения: Myoffice1 и enp0s8.
Подсказка. Если вы хотите видеть только активные подключения, введите:
nmcli con show -a
Подсказка. Вы можете использовать автозаполнение, нажав Tab
, когда используете nmcli, но лучше использовать минимальный формат команды.
Таким образом, следующие команды равны:
nmcli connection show
nmcli con show
nmcli c s
Проверить IP-адрес в Linux
Если я проверю IP-адреса своих устройств:
ip a
Я вижу, что мое устройство enp0s3
получило IP-адрес 192.168.1.6 от DHCP-сервера, поскольку профиль подключения Myoffice1
, который работает, имеет конфигурацию DHCP.
Если я подниму “up”
свой профиль подключения с именем static1
, то мое устройство примет статический IP-адрес 192.168.1.40, как он определен в профиль подключения.
nmcli con down Myoffice1 ; nmcli con up static1
nmcli con show
Давайте еще раз посмотрим IP-адрес:
ip a
Мы можем создать наш первый профиль подключения. Минимальные свойства, которые мы должны определить, — это type, ifname и con-name:
type
– тип соединения.ifname
— для имени устройства, присвоенного нашему соединению.con-name
– имя соединения.
Создание нового Ethernet-соединения в Linux
Давайте создадим новое Ethernet-соединение с именем Myhome1
, назначенным устройству enp0s3
:
nmcli con add type ethernet con-name Myhome1 ifname enp0s3
Проверьте его конфигурацию:
cat ifcfg-Myhome1
Как вы можете видеть, он имеет BOOTPROTO=dhcp
, поскольку мы не указали статический IP-адрес.
Подсказка. Мы можем изменить любое соединение с помощью команды “nmcli con mod“
. Однако, если вы измените соединение DHCP и измените его на статическое, не забудьте изменить его “ipv4.method”
с “auto”
на “manual”.
. В противном случае вы получите два IP-адреса: один от DHCP-сервера и статический.
Создадим новый профиль подключения Ethernet с именем static2
, который будет присвоен устройству enp0s3
, со статическим IP 192.168.1.50, подсетью. маска 255.255.255.0=24 и шлюз 192.168.1.1.
nmcli con add type ethernet con-name static2 ifname enp0s3 ip4 192.168.1.50/24 gw4 192.168.1.1
Проверьте его конфигурацию:
cat ifcfg-static2
Изменить DNS-серверы в Linux
Давайте изменим последний профиль подключения и добавим два DNS-сервера.
nmcli con mod static2 ipv4.dns “8.8.8.8 8.8.4.4”
Подсказка. Здесь следует обратить внимание на кое-что: свойства IP-адреса и шлюза имеют разные имена при добавлении и изменении соединения. При добавлении соединений вы используете “ip4”
и “gw4”
, а при их изменении вы используете “ipv4”
и “ gwv4 »
.
Подключите Ethernet-соединение в Linux
Теперь давайте вызовем этот профиль подключения:
nmcli con down static1 ; nmcli con up static2
Как видите, устройство enp0s3
теперь имеет IP-адрес 192.168.1.50.
ip a
Подсказка: вы можете изменить множество свойств. Если вы не помните их наизусть, вы можете помочь себе, набрав “nmcli con show”
и после этого имя соединения:
nmcli con show static2
Вы можете изменить все эти свойства, написанные строчными буквами.
Например: когда вы отключаете профиль подключения, NetworkManager ищет другой профиль подключения и автоматически открывает его. (Я оставляю это в качестве упражнения для проверки). Если вы не хотите, чтобы ваш профиль подключения автоматически подключался:
nmcli con mod static2 connection.autoconnect no
Последнее упражнение очень полезно: вы создали профиль подключения, но хотите, чтобы его использовали определенные пользователи. Классифицировать пользователей — это хорошо!
Установите разрешения на подключение Ethernet для пользователя в Linux
Мы разрешаем использовать этот профиль только пользователю stella:
nmcli con mod static2 connection.permissions stella
Подсказка. Если вы хотите предоставить разрешения более чем одному пользователю, вам необходимо ввести user:user1,user2
без пробела между ними:
nmcli con mod static2 connection.permissions user:stella,john
Если вы войдете в систему как другой пользователь, вы не сможете поднять этот профиль подключения:
nmcli con show
nmcli con up static2
ls /etc/sysconfig/network-scripts
В сообщении об ошибке говорится, что соединение static2’ не существует, даже если мы видим, что оно существует. Это связано с тем, что у текущего пользователя нет разрешения на создание этого соединения.
Вывод: без колебаний используйте nmcli. Это легко и полезно.