Вопрос или проблема
Нужен совет. У меня есть два сетевых интерфейса, я настраиваю отдельные IP-адреса и маршруты для каждого.
network:
ethernets:
enp4s0:
dhcp4: нет
dhcp6: нет
addresses:
- 192.168.0.222/24
enp2s5:
dhcp4: нет
dhcp6: нет
addresses:
- 192.168.1.5/24
version: 2
renderer: networkd
Я нажимаю sudo netplan –debug apply и вижу, что настройки не применяются к одному из интерфейсов, что я делаю не так?
DEBUG:no netplan generated NM configuration exists
DEBUG:enp4s0 not found in {}
DEBUG:enp2s5 not found in {'enp4s0': {'dhcp4': False, 'dhcp6': False, 'addresses': ['192.168.0.222/24']}}
DEBUG:Merged config:
network:
bonds: {}
bridges: {}
ethernets:
enp2s5:
addresses:
- 192.168.1.5/24
dhcp4: false
dhcp6: false
enp4s0:
addresses:
- 192.168.0.222/24
dhcp4: false
dhcp6: false
ovs_ports: {}
vlans: {}
wifis: {}
Почему настройки для сетевого адаптера enp4s0 не применяются? Почему настройки для этого адаптера оказываются в другом адаптере (enp2s5)?
У меня есть ошибка DEBUG: enp3s0 not found in {}
, но я решил продолжить и оставить все как есть.
Структура состояний интерфейсов должна определять наличие работающей конфигурации.
И вам, возможно, стоит рассмотреть возможность внесения этих изменений после перезагрузки.
Обходной путь: создайте представление текущей конфигурации для перезагрузки и доступа к представлениям.
Сначала вам нужно выполнить команды для подтверждения конфигурации и перезагрузки.
Но перед этим вам нужно убедиться, что конфигурация подходит для этого.
В поисках этой проблемы я наткнулся на несколько подсказок, что подобный DEBUG:
может быть вызван отсутствием взаимодействия
между интерфейсами. Это отсутствие моста или туннеля между ними. Когда события в конечном итоге обрабатываются,
вы получаете сбой, потому что отправитель должен ссылаться на висячий указатель существования самого моста или туннеля в конфигурации netplan.
Отправителю не нужно знать о каких-либо получателях. Получатель, конечно, знает о отправителе; по крайней мере он знает тип сообщения, которое ему отправляется, так же как и в вашей предыдущей конфигурации, перед перезагрузкой, слушатель знает о событии, на которое он должен подписаться.
В данном случае следует указать, что использование генератора для двоичных данных является своего рода натяжкой без учета. Механизм перехода от одного типа к другому должен быть каким-то образом понятен (он не может содержать непечатаемые части). Если вы хотите иметь конфигурацию, которая может использоваться для обработки двоичных данных или всего остального, что не связано с указателями, то рано или поздно вы столкнетесь с монстром. Генератор может это сделать и сделает это охотно, если разработчики не использовали меры предосторожности по предупреждению/ошибке.
sudo netplan --debug generate
показывает:
DEBUG: 18: 16: 37.189: У нас есть некоторые netdefs, пропустите их через последний раунд проверки
DEBUG: 18: 16: 37.189: enp3s0: установка значения по умолчанию для бэкенда на 1
DEBUG: 18: 16: 37.189: Конфигурация действительна
DEBUG: 18: 16: 37.189: lo: установка значения по умолчанию для бэкенда на 1
DEBUG: 18: 16: 37.189: Конфигурация действительна
DEBUG: 18: 16: 37.190: Генерация выходных файлов..
DEBUG: 18: 16: 37.190: NetworkManager: определение enp3s0 не для нас (бэкенд 1)
DEBUG: 18: 16: 37.190: NetworkManager: определение lo не для нас (бэкенд 1)
Вышеупомянутая исходная код является упрощенной частичной реализацией моего netplan, я предоставляю его, чтобы более наглядно показать, какая часть неверна, и хочу упростить ответ на решение проблемы. Я думаю, что основная проблема заключается в Конфигурация действительна
и она работает так, как я хочу. Это означает, что ваш генератор включил обрезку netdefs без предварительного уведомления. Чтение, запись в конфигурацию yaml
не вызывает никаких проблем. Вот почему я не нашел проблемы несоответствия из-за отсутствия найденных интерфейсов в источнике -_-!
Связывание является частью фиксированного конвейера, так что если вы хотите его использовать, вам нужно наследоваться от другого набора, созданного после перезагрузки.
Я хочу оставить DEBUG: enp4s5 not found in {}
как есть, я думаю, что все зависит от вашей интерпретации пустоты. Используйте эти команды, чтобы заявить, что этот код является сокращенным, но действительным:
sudo netplan try
sudo netplan generate
sudo netplan apply
reboot
Преобразование в целое число также “разумно” в том смысле, что вы получаете обрезанное значение.
Затем посмотрите на ошибки. Если вы используете systemd-networkd:
networkctl
journalctl -b -u systemd-networkd
============================================================================
Есть подсказки, из-за которых может возникнуть ошибка DEBUG: enp3s0 не найден в {}
, это связано с
настройкой Kind =
. Это означает, что неправильное присвоение привело к ошибке генератора.
Проверьте эту внутреннюю ошибку:
NetDev has no Kind configured in /etc/systemd/network/10-netplan-lo.netdev. Ignoring
NetDev has no Kind configured in /etc/systemd/network/10-netplan-enp3s0.netdev. Ignoring
Рабочая теория, основанная на стеке вызовов Kind =
методов, таких как gre, veth
, недействительна для всей области (включая область взаимодействия) и таким образом предотвращает сбой метода маршрутизации трафика. В этот момент сцена, на которую ссылается элемент, не инициализирована (по-видимому), но обязательна на основе:
Name = - имя интерфейса. Этот параметр обязателен.
Kind = - тип интерфейса. Например, мост, связь, vlan, veth, sit и т.д. Этот параметр обязателен.
Мой обходной путь заключается в том, чтобы сделать Kind =
вызываемым между интерфейсами и сделать так, чтобы источник был найден с добавленным элементом, так что в зависимости от ваших потребностей это может быть вариантом. Для проверки концепции дизайна, после перезагрузки, маршрутизируйте между интерфейсами, но на ваше усмотрение и в конечном итоге
DEBUG: enp3s0 not found in {}
будет в итоге.
Ответ или решение
Когда настройки в Netplan не применяются, это может быть связано с несколькими факторами. В вашем случае мы видим, что конфигурация содержит две сетевые карты — enp4s0
и enp2s5
— с заданными статическими IP-адресами. Несмотря на то, что конфигурация выглядит корректной, возникают сообщения об ошибках, которые указывают на проблемы при применении настроек. Давайте разберем ваш случай подробнее и предложим возможные решения.
1. Проверьте наличие интерфейсов
Сообщение DEBUG: enp4s0 not found in {}
указывает на то, что Netplan не обнаруживает интерфейс enp4s0
. Это может произойти по следующим причинам:
-
Несоответствующее имя интерфейса: Убедитесь, что интерфейсы действительно называются
enp4s0
иenp2s5
. Вы можете проверить это с помощью команды:ip link show
-
Отсутствие интерфейса: Если ваш дистрибутив использует драйверы, которые не поддерживают автоматическое определение интерфейсов, интерфейс
enp4s0
может не распознаваться. Убедитесь, что драйвера для вашей сетевой карты правильно установлены и загружены.
2. Проверьте синтаксис конфигурации
Ваш файл конфигурации в формате YAML выглядит корректным, но важно гарантировать, что он полностью соответствует требованиям формата. Я рекомендую проверить следующее:
-
Отступы и пробелы: Убедитесь, что отступы сделаны пробелами, а не табуляцией. Убедитесь, что каждый уровень отступа соответствует 2 пробелам.
-
Версия: Ваша версия установлена как
version: 2
, что является стандартным значением для Netplan. Убедитесь, что у вас установлен Netplan версии 0.99 или выше, чтобы избежать конфликтов.
3. Используйте отладку
Вы уже используете sudo netplan --debug apply
, что является правильным подходом. Это дает вам более полное понимание того, что происходит. Если отладка показывает, что конфигурация валидна (Configuration is valid
), но настройки по-прежнему не применяются, стоит проверить:
- Системные логи: Дополнительно обратитесь к логам сетевых служб, чтобы выявить какие-либо ошибки или предупреждения:
journalctl -u systemd-networkd
4. Проверьте конфликты с NetworkManager
В вашем сообщении отладки указано, что DEBUG:no netplan generated NM configuration exists
. Это может свидетельствовать о том, что Netplan конфликтует с NetworkManager. Если у вас в системе установлен NetworkManager, убедитесь, что для управляемых интерфейсов используется правильный рендерер. В случае если NetworkManager не требуется, можно его отключить:
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
5. Перезагрузка и тестирование
После внесения изменений в конфигурацию необходимо применить настройки и перезагрузить систему:
sudo netplan apply
sudo reboot
Также вы можете использовать sudo netplan try
для временного применения конфигурации, чтобы убедиться, что все работоспособно, прежде чем окончательно применить изменения.
6. Убедитесь в корректности настроек Kind
Проблема может быть связана и с неправильным определением Kind
для Интерфейсов. Убедитесь, что для каждой сетевой карты определено корректное значение. Например, в конфигурации для bridge или bond необходимо явно указывать Kind
.
Заключение
Совокупность предложенных методов поможет вам определить и устранить проблемы с применением настроек для Netplan
. Убедитесь в правильности имен интерфейсов, конфигурационного файла и в отсутствии конфликтов с другими сетевыми управляющими программами, такими как NetworkManager. Применив все эти рекомендации, вы, вероятно, устраните возникшие проблемы и установите стабильную сетевую конфигурацию.