Interface failed to bring up Could not set MTU — Сбой сети systemd-networkd
Архитектура ошибки и симптомы сбоя
Сообщение «systemd-networkd: Interface eth0 failed to bring up: Could not set MTU (Invalid argument / Numerical result out of range)» генерируется сетевым демоном systemd-networkd. Ошибка означает, что значение максимального размера передаваемого блока данных (MTU), указанное в конфигурационном файле .network (директива MTUBytes=), превышает аппаратные возможности физического сетевого адаптера, лимиты родительского интерфейса (для VLAN/Bridge) или конфликтует с ограничениями гипервизора виртуализации.
Диагностическая таблица параметров сбоя
| Параметр | Значение | Инженерный смысл сбоя |
|---|---|---|
| MTUBytes | 1500 / 9000 (Jumbo) | Максимальный размер полезной нагрузки Ethernet-фрейма без фрагментации. |
| EINVAL (Invalid Argument) | Hardware Max Exceeded | Аппаратный драйвер сетевой карты физически не поддерживает запрошенный размер кадра. |
| VLAN MTU Constraint | VLAN MTU <= Parent MTU | Размер MTU виртуального интерфейса (VLAN) не может превышать MTU физического интерфейса. |
Пошаговое дерево решений и сценарии траблшутинга
Сценарий 1: Проверка максимального аппаратного MTU сетевой карты
# Просмотр диапазона поддерживаемых MTU для сетевого интерфейса (minmtu / maxmtu):
ip --details link show eth0Обратите внимание на значения minmtu (обычно 68) и maxmtu (например, 1500 или 9000).
Сценарий 2: Корректировка директивы MTUBytes в файле .network
Приведите конфигурацию к безопасному стандартному размеру (1500 байт) или допустимому лимиту:
# Отредактируйте /etc/systemd/network/10-eth0.network:
[Match]
Name=eth0
[Link]
MTUBytes=1500
[Network]
DHCP=yesСценарий 3: Настройка Jumbo Frames для связки Physical Interface -> VLAN
Если для VLAN требуется MTU 9000, сначала увеличьте MTU на физическом родительском адаптере:
# 1. Физический интерфейс (/etc/systemd/network/10-eth0.network):
[Match]
Name=eth0
[Link]
MTUBytes=9000
[Network]
VLAN=eth0.100
# 2. Виртуальный VLAN (/etc/systemd/network/20-vlan100.network):
[Match]
Name=eth0.100
[Link]
MTUBytes=9000
[Network]
Address=192.168.100.10/24Сценарий 4: Применение сетевой конфигурации
# Перезапуск сетевого демона systemd:
sudo networkctl reload
sudo systemctl restart systemd-networkd
# Проверка статуса интерфейса:
networkctl status eth0ITSTM выполнит проектирование сетевых топологий Jumbo Frames, агрегаций LACP (Bonding) и отладку systemd-networkd.
Частые вопросы (FAQ)
Почему нельзя задать MTU 9000 на интерфейсе, подключенном к стандартному коммутатору?
Если коммутатор (или облачный провайдер) не поддерживает Jumbo Frames (MTU 9000), входящие и исходящие пакеты размером более 1500 байт будут молча отбрасываться оборудованием (Blackhole MTU).
В чем разница между секциями [Link] и [Network] для MTUBytes?
В секции [Link] директива MTUBytes устанавливает аппаратный MTU на сетевом линке до его активации. В секции [Network] директива задает рабочий MTU для уровня протокола IP.
Как посмотреть текущий MTU всех интерфейсов одной командой?
Выполните команду: ip link show или networkctl list.
Какой MTU должен быть у VPN туннелей WireGuard/OpenVPN?
MTU туннеля всегда должен быть меньше физического на размер инкапсулирующих заголовков: для WireGuard обычно 1420 байт, для OpenVPN — 1400 байт.