Сеть - это то, что администратор настраивает на каждом сервере, и то, что ломается чаще всего. В этом уроке разбираем, как поднять интерфейс, повесить на него IPv4 и IPv6 адрес статикой или по DHCP, сделать настройки постоянными в разных дистрибутивах, а заодно собрать агрегацию каналов (bonding) и завести VLAN. Главный инструмент диагностики - утилита ip, а инструмент управления в современных системах - NetworkManager через nmcli. Понимание разницы между состоянием ядра здесь и сейчас и конфигурацией на диске - ключ ко всему уроку.

Как это работает
Сетевая подсистема Linux живёт в ядре. У каждого интерфейса есть состояние канала (link): подключён ли кабель, договорилась ли карта о скорости. Поверх link навешиваются адреса L3 - IPv4 и IPv6, причём на одном интерфейсе их может быть несколько. Маршруты решают, куда отправлять пакеты для конкретной сети. Команда ip из пакета iproute2 показывает и меняет всё это прямо в ядре, но её изменения живут только до перезагрузки.
Чтобы настройки пережили ребут, нужен слой постоянной конфигурации. Тут дистрибутивы расходятся. В RHEL 10 и Fedora всем заведует NetworkManager, профили лежат в /etc/NetworkManager/system-connections/ в виде keyfile (раньше были ifcfg-файлы, теперь это легаси). В Ubuntu 24.04 на сервере правит netplan: вы пишете YAML в /etc/netplan/, а он генерирует конфиг для бэкенда - systemd-networkd или NetworkManager. В Debian 13 базовый способ - /etc/network/interfaces с ifupdown, но в десктопных установках тоже стоит NetworkManager.
Разница IPv4 и IPv6 важна. IPv6 умеет автоконфигурацию: роутер шлёт RA (Router Advertisement), и хост сам строит адрес из префикса плюс свой идентификатор (SLAAC). Поэтому глобальный IPv6 может появиться без всякого DHCP. Link-local адрес fe80::/10 ядро вешает на каждый интерфейс автоматически.
Bonding (агрегация) объединяет несколько физических карт в один логический интерфейс bond0 ради отказоустойчивости или суммарной полосы. Режим задаёт логику: active-backup держит одну карту активной, остальные в резерве; 802.3ad (LACP) распределяет трафик и требует поддержки на коммутаторе. VLAN же позволяет на одном физическом порту разделить трафик по тегам 802.1Q - получаются интерфейсы вида eth0.100, каждый в своей подсети.
Команды и примеры
Смотрим состояние. Утилита ip - универсальна для всех дистрибутивов:
Код: Выделить всё
ip link show # интерфейсы и состояние link (UP/DOWN, LOWER_UP = есть линк)
ip -br address # краткая сводка адресов
ip -6 addr show # только IPv6
ip route show # таблица маршрутов IPv4
ip -6 route # маршруты IPv6
ip neigh # ARP/NDP соседи
Код: Выделить всё
ethtool eth0 # Link detected: yes/no, Speed, Duplex
Код: Выделить всё
ip link set eth0 up
ip address add 192.0.2.10/24 dev eth0
ip address add 2001:db8::10/64 dev eth0
ip route add default via 192.0.2.1
Код: Выделить всё
nmcli con add type ethernet con-name lan ifname eth0 \
ipv4.method manual ipv4.addresses 192.0.2.10/24 ipv4.gateway 192.0.2.1 \
ipv4.dns 1.1.1.1 ipv6.method auto
nmcli con up lan
nmcli -f GENERAL,IP4,IP6 device show eth0
Код: Выделить всё
nmcli con mod lan ipv4.method auto
nmcli con up lan
Код: Выделить всё
# /etc/netplan/01-lan.yaml (отступы - пробелы, не табы!)
network:
version: 2
ethernets:
eth0:
addresses: [192.0.2.10/24, "2001:db8::10/64"]
routes:
- to: default
via: 192.0.2.1
nameservers:
addresses: [1.1.1.1]
Код: Выделить всё
netplan try # применит с откатом через 120 с, если связь не подтвердить
netplan apply
Код: Выделить всё
auto eth0
iface eth0 inet static
address 192.0.2.10/24
gateway 192.0.2.1
iface eth0 inet6 auto
Код: Выделить всё
nmcli con add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=100"
nmcli con add type ethernet ifname eth0 master bond0
nmcli con add type ethernet ifname eth1 master bond0
nmcli con mod bond0 ipv4.method manual ipv4.addresses 192.0.2.10/24 ipv4.gateway 192.0.2.1
nmcli con up bond0
cat /proc/net/bonding/bond0 # активная карта, статус slave-ов
Код: Выделить всё
nmcli con add type vlan con-name vlan100 ifname eth0.100 dev eth0 id 100 \
ipv4.method manual ipv4.addresses 10.100.0.10/24
- Настроили адрес через ip, перезагрузились - всё пропало. ip меняет только ядро, постоянство - это NetworkManager/netplan/interfaces.
- В netplan вставили табы вместо пробелов - YAML не парсится. Только пробелы.
- netplan apply без netplan try на удалённом сервере: ошибка в gateway - и вы отрезали себе SSH. try даёт автооткат.
- Команда ifconfig из net-tools во многих сборках уже не ставится по умолчанию и не видит часть адресов IPv6 - забудьте, используйте ip.
- Bond поднялся, а трафик не идёт: на стороне коммутатора не настроен LACP для режима 802.3ad. active-backup коммутатор не требует.
- VLAN не работает - порт коммутатора в режиме access вместо trunk, тегированный трафик отбрасывается.
- Правят ifcfg-файлы руками при работающем NetworkManager - он их может перезаписать. В RHEL 10 источник истины это keyfile и nmcli.
- Забыли, что link-local fe80:: есть всегда, и приняли его за рабочий глобальный IPv6.
- Посмотрите ip -br link и ip -br addr, запишите текущее состояние интерфейса и его адреса.
- Через ethtool проверьте, есть ли линк и какая скорость согласована.
- Временно (через ip) добавьте на интерфейс тестовый адрес 198.51.100.5/24 и проверьте его через ip addr, затем удалите.
- Создайте постоянный профиль со статическим IPv4 и автоконфигом IPv6: на RHEL/Fedora через nmcli, на Ubuntu через netplan try.
- Переключите профиль на DHCP и обратно, проверяя, какой адрес выдан.
- Соберите bond0 в режиме active-backup из двух интерфейсов и посмотрите /proc/net/bonding/bond0.
- Поднимите VLAN с id 100 поверх основного интерфейса и убедитесь, что появился eth0.100.
- Чем отличается изменение адреса командой ip от настройки через nmcli с точки зрения постоянства?
- Где физически лежат профили соединений NetworkManager в современном RHEL и в каком они формате?
- Какой механизм позволяет хосту получить глобальный IPv6 без DHCP и как называются сообщения роутера?
- Чем режим bonding active-backup отличается от 802.3ad по требованиям к коммутатору?
- Какой файл показывает текущий статус агрегированного интерфейса и активную карту?
- Почему на удалённом сервере предпочтительнее netplan try, а не сразу netplan apply?