Настройка сетевых подключений в Network Manager с использованием nmcli и bash

Модераторы: flash, mordor

Ответить
Аватара пользователя
flashdeath
Администратор
Сообщения: 25
Зарегистрирован: 08 ноя 2007, 14:22

Настройка сетевых подключений в Network Manager с использованием nmcli и bash

Сообщение flashdeath »

1. Одиночный сетевой интерфейс на отдельной машине

Допустим вы с образа залили чистую операционку OEL9/RHEL9/Centos9 (далее OEL) на хост и при этом не настроили сетевой интерфейс

В OEL network-scrips канул в лету, теперь остался только NetworkManager. Так же допустим что у вас 1 сетевой интерфейс eth0 который надо настроить.

Логинимся на сервер через консоль и начинаем работу.

Надо выяснить какие интерфейсы есть у вас в системе кроме lo, для этого выполняем команду видим что-то вроде

Код: Выделить всё

IP LINK OUTPUT
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0 <BROADCAST,MULTICAST,DOWN> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether 08:00:27:f1:eb:13 brd ff:ff:ff:ff:ff:ff
Проверяем наличие подключений в Нэтворк Менеджере командой

Код: Выделить всё

nmcli connection show
так же можно использовать

Код: Выделить всё

nmcli c s
nmcli c show
nmcli con show
Это одно и то же

Команда выдает нам дефолтное погашенное соединение, что-то вроде

Код: Выделить всё

Wired connection 1  2c6c3672-021b-3739-a675-d9c452cf27bf  ethernet  --
для настройки нашей сети 1 убиваем автоматически сгенерированный коннекшен

Код: Выделить всё

nmcli connection delete ${UUID}
где UUID 2c6c3672-021b-3739-a675-d9c452cf27bf из команды nmcli c show
команда может быть и в сокращенном виде

Код: Выделить всё

nmcli c del $UUID
Теперь создаем наш интерфейс, чтобы не путать какой интерфейс к чему принадлежит рекомендую название интерфейса делать по имени интерфейса

Код: Выделить всё

nmcli connection add type ethernet con-name eth0 ifname eth0 ip4 10.99.13.15/24 gw4 10.99.13.254
где

type = тип подключения (ethernet, Vlan, bond ...)

con-name = название нашего подключения

ifname = имя сетевого адаптера

ip4 = ip адрес который мы хотим назначить на наш адаптер с маской подсети в формате CIDR

gw4 = наш сетевой шлюз по умолчанию

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

отключаем ipv6 на сетевом интерфейсе

Код: Выделить всё

nmcli connection modify eth0 ipv6.method "disabled"
добавляем DNS и домен поиска

Код: Выделить всё

nmcli con mod eth0 ipv4.dns "10.99.5.1 10.99.5.2"
nmcli con mod eth0 ipv4.dns-search "test.local"
Добавляем интерфейс в автостарт

Код: Выделить всё

nmcli con mod eth0 connection.autoconnect "yes"
запускаем сеть

Код: Выделить всё

nmcli con up id eth0
результат выполнения команды должен быть что-то вроде

Код: Выделить всё

Connection successfully activated (D-Bus active path: ...)
Проверяем наше созданное соединение командой

Код: Выделить всё

nmcli c show
Вывод следующий

Код: Выделить всё

NAME        UUID                                  TYPE      DEVICE
eth0      01c20128-4641-4294-a902-9baa8dfbd4d7  ethernet  eth0
При этом команда должна вывести что-то вроде

Код: Выделить всё

2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 08:00:27:f1:eb:13 brd ff:ff:ff:ff:ff:ff
    inet 10.99.13.15/24 brd 10.99.13.255 scope global noprefixroute enp0s9
       valid_lft forever preferred_lft forever
ip route
default via 10.99.13.254 dev enp0s9 proto static
посмотреть список всех параметров можно выполнив команду

Код: Выделить всё

nmcli c s eth0
или

Код: Выделить всё

nmcli connection show eth0
что одно и тоже.

Есть дополнительные команды, например с помощью одной из них можно изменить MTU

Код: Выделить всё

nmcli con mod eth0 ethernet.mtu "9000"
так же можно соединение можно настроить в интерактивном режиме

Код: Выделить всё

nmcli connection edit

2. Конфигурация агрегированнового интерфейса

Тут есть 2 пути 1 стандартный BOND и TEAM поскольку teamd у нас не стандартизирован начнем настраивать бонд
Ну и конечно сначала выясняем какие интерфейсы есть в системе допустим у нас 2 интерфейса с одной пропускной способностью enp0s3 и enp0s8 подключенные к 2 свичам без LACP

начинаем конфигурацию бонда - создаем интерфейс

Код: Выделить всё

nmcli connection add type bond con-name bond0 ifname bond0
настраиваем опции нашего агрегированного интерфейса

Код: Выделить всё

nmcli connection modify bond0 bond.options "mode=1,miimon=100"
для лацп команда выглядеть будет так

Код: Выделить всё

nmcli connection modify bond0 bond.options "mode=4,miimon=100,lacp_rate=1"
Автоматическое подключение физических интерфейсов в бонд

Код: Выделить всё

nmcli connection modify bond0 connection.autoconnect-slaves 1
Добавляем физические линки

Код: Выделить всё

nmcli connection add type ethernet slave-type bond con-name bond0-if1 ifname enp0s3 master bond0
nmcli connection add type ethernet slave-type bond con-name bond0-if2 ifname enp0s8 master bond0
где

type = тип подключения (ethernet, Vlan, bond ...)

slave-type = тип агрегации (bond или team)

con-name = название нашего подключения

ifname = имя сетевого адаптера

master = имя агрегирующего интерфейса

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

Дальше конфигурация параметров ip

Код: Выделить всё

nmcli connection modify bond0 ipv6.method "disabled"
nmcli con mod bond0 ip4 10.99.50.15/24 gw4 10.99.50.254
nmcli con mod bond0 ipv4.dns "10.99.5.1 10.99.5.2"
nmcli con mod bond0 ipv4.dns-search "test.local"
Добавляем интерфейс в автостарт

Код: Выделить всё

nmcli con mod bond0 connection.autoconnect "yes"
Если есть несколько дефолтных маршрутов то советую указать метрику интерфейса, но это не обязательно

Код: Выделить всё

nmcli connection modify bond0 ipv4.route-metric 5
Поднимаем интерфейс

Код: Выделить всё

nmcli con up id bond0

3. Бонд с использованием VLAN, следует отметить что порты в свичах должны быть в транке и туда должны быть добавлены нужные vlan

Сначала делаем все как в примере 2, но не настраиваем сетьевые параметры

начинаем конфигурацию бонда - создаем интерфейс

Код: Выделить всё

nmcli connection add type bond con-name bond0 ifname bond0
настраиваем опции нашего агрегированного интерфейса

Код: Выделить всё

nmcli connection modify bond0 bond.options "mode=1,miimon=100"
для лацп команда выглядеть будет так

Код: Выделить всё

nmcli connection modify bond0 bond.options "mode=4,miimon=100,lacp_rate=1"
Автоматическое подключение физических интерфейсов в бонд

Код: Выделить всё

nmcli connection modify bond0 connection.autoconnect-slaves 1
Добавляем физические линки

Код: Выделить всё

nmcli connection add type ethernet slave-type bond con-name bond0-if1 ifname enp0s3 master bond0
nmcli connection add type ethernet slave-type bond con-name bond0-if2 ifname enp0s8 master bond0
и поднимаем bond0

Код: Выделить всё

nmcli con up id bond0
Начинаем настройку VLAN интерфейса

Создаем интерфейс VLAN

Код: Выделить всё

nmcli c add type vlan con-name bond0.1915 ifname bond0.1915 dev bond0 id 1915 ip4 10.99.50.16/24 gw4 10.99.50.254
где

type = тип подключения (ethernet, Vlan, bond ...)

con-name = название нашего подключения

ifname = имя сетевого адаптера

dev = имя интерфейса на котором делаем VLAN интерфейс

id = vlan_id

ip4 = ip адрес который мы хотим назначить на наш адаптер

gw4 = наш сетевой шлюз по умолчанию


Дальше настраиваем сетевые протоколы как обычно в других интерфейсах

Код: Выделить всё

nmcli connection modify bond0.1915 ipv6.method "disabled"
nmcli con mod bond0.1915 ipv4.dns "10.99.5.1 10.99.5.2"
nmcli con mod bond0.1915 ipv4.dns-search "test.local"
nmcli connection modify bond0.1915 ipv4.route-metric 10
nmcli con mod bond0.1915 connection.autoconnect "yes"
И поднимаем интерфейс

Код: Выделить всё

nmcli con up id bond0.1915

PS. Текстовые файлы с конфигурацией сети находятся здесь

Код: Выделить всё

/etc/NetworkManager/system-connections
Ответить