Вопрос или проблема
У меня есть Raspberry Pi CM4, которому я хочу назначить статический IPv4 адрес. Он работает на Raspbian 11 (bullseye).
Однако, когда я использую настройки беспроводной и проводной сети в графическом интерфейсе для назначения статического IP-адреса, при перезагрузке устройство пытается получить IP через DHCP, что не удается, потому что в этой сети нет DHCP-сервера. В итоге он получает APIPA IP (169.254.x.x).
Я также пробовал напрямую изменить /etc/dhcpcd.conf, но кажется, что это тоже не работает.
Кроме того, у меня все еще есть IPv6, по которому я могу подключиться к Pi, хотя я установил отключение IPv6 в своих сетевых настройках.
Цель на будущее — иметь один .img, который можно будет записать на Pi и потом вручную изменить IPv4.
Мой вопрос: что заставляет Pi пытаться получить IP через DHCP, хотя я установил его статически IPv4, и как я могу решить эту проблему?
ОБНОВЛЕНИЕ: Использование NetworkManager вместо dhcpcd решило мою проблему. Вот мои шаги:
- Systemctl enable NetworkManager
- Systemctl status NetworkManager (чтобы проверить статус)
- Nmcli c show (чтобы увидеть имя соединения)
- Nmcli modify “{ваше имя соединения}” ipv4.method manual ipv4.addresses {ваш желаемый IP}/24 ipv4.gateway {ваш IP, но последняя цифра 0 (например, 192.168.1.0)} ipv4.dns “8.8.8.8 8.8.4.4”
- Nmcli c down {ваше имя соединения} && nmcli c up {ваше имя соединения}
Дополнительно я сделал:
Ifconfig eth0 down
Ifconfig eth0 up
Примечание: Убедитесь, что вы можете подключиться к Pi через другой сетевой интерфейс или напрямую через hid, так как интерфейсы будут сброшены.
Использование NetworkManager вместо dhcpcd решило мою проблему. Вот мои шаги:
- Systemctl enable NetworkManager
- Systemctl status NetworkManager (чтобы проверить статус)
- Nmcli c show (чтобы увидеть имя соединения)
- Nmcli modify “{ваше имя соединения}” ipv4.method manual ipv4.addresses {ваш желаемый IP}/24 ipv4.gateway {ваш шлюз (например, 192.168.1.0)} ipv4.dns “8.8.8.8 8.8.4.4”
- Nmcli c down {ваше имя соединения} && nmcli c up {ваше имя соединения}
Дополнительно я сделал:
Ifconfig eth0 down
Ifconfig eth0 up
Примечание: Убедитесь, что вы можете подключиться к Pi через другой сетевой интерфейс или напрямую через hid, так как интерфейсы будут сброшены.
Ответ или решение
Ваша проблема с получением Raspberry Pi CM4 APIPA-адреса вместо статического IP-адреса после перезагрузки связана с рядом возможных факторов. Чтобы разобраться в этой ситуации, давайте рассмотрим теорию, практические примеры и шаги по решению данной проблемы.
Теория
Raspberry Pi CM4, работающий под управлением Raspbian 11 (bullseye), как и многие операционные системы семейства Linux, по умолчанию использует демона DHCP (dhcpcd) для управления IP-адресацией сетевых интерфейсов. APIPA (Automatic Private IP Addressing) используется, когда интерфейс не может получить IP-адрес через DHCP. Ваша ситуация связана с отсутствием DHCP-сервера в сети, в результате чего происходит присвоение APIPA-адреса, начиная с 169.254.x.x.
Когда вы назначаете статический IP через GUI, вы можете столкнуться с ситуацией, когда настройки не сохраняются должным образом, или существуют конфликты между различными менеджерами сетевых подключений. Одной из ключевых причин может быть неполная настройка конфигурационных файлов или же выключенные интерфейсы.
Пример
Как вы уже указали, корректировка файла /etc/dhcpcd.conf
не дала результата. Основными ошибками в таких ситуациях чаще всего являются:
- Неправильная конфигурация файла: Попытка указания статического IP-адреса может быть неправильной или несовместимой с сетевыми требованиями.
- Конфликтующие процессы: Dualstack (IPv4/IPv6) может создавать конфликт, когда параллельно работает dhcpcd и NetworkManager или другие процессы.
- Отключение интерфейса: Часто после конфигурации сетевой интерфейс необходимо перезагрузить, чтобы изменения применились.
Применение
Вы решили проблему, перейдя на использование NetworkManager вместо dhcpcd, что оказалось удачным шагом. Этот менеджер сетевых подключений обеспечивает более гибкую настройку и управление сетевыми соединениями. Позвольте мне подробно объяснить процесс, который вы использовали, и некоторые дополнительные рекомендации.
-
Активируйте NetworkManager:
sudo systemctl enable NetworkManager
Это позволит NetworkManager автоматически запускаться при загрузке системы.
-
Проверка статуса:
sudo systemctl status NetworkManager
Убедитесь, что демон запущен и работает корректно.
-
Просмотр текущих подключений:
nmcli c show
Эта команда отобразит список всех сетевых подключений, чтобы вы могли точно указать нужное соединение.
-
Настройка статического IP-адреса:
nmcli modify "{your connection name}" ipv4.method manual ipv4.addresses {your desired ip}/24 ipv4.gateway {your gateway} ipv4.dns "8.8.8.8 8.8.4.4"
Убедитесь, что вы точно указали все параметры, особенно обращая внимание на подмаски и шлюзы.
-
Переподключение интерфейса:
nmcli c down {your connection name} && nmcli c up {your connection name}
Это действие позволит применить изменения без необходимости перезагрузки всей системы.
-
Ручное обновление интерфейса:
Используйте команды:sudo ifconfig eth0 down sudo ifconfig eth0 up
Эти команды перезагрузят интерфейс, обеспечив применение всех конфигураций.
Дополнительные рекомендации
-
Проверка конфигурационных файлов: Убедитесь, что в
/etc/network/interfaces
и/etc/dhcpcd.conf
нет конфликтующих данных. -
Отключение IPv6: Если IPv6 все еще активен, проверьте конфигурационные файлы и командами настройки сети убедитесь в его полном отключении, если он не требуется.
-
Единое изображение (.img) для массовой настройки: При создании единого образа для флешек Raspberry Pi убедитесь в правильной настройке сетевого скрипта, который будет запускаться при первом запуске, для корректной адаптации сетевых параметров под конкретные условия.
Заключение
Зачастую проблемы с сетевыми настройками на Raspberry Pi возникают из-за конфликтов между разными менеджерами или неправильных конфигураций. Ваша успешная миграция на NetworkManager показывает, что использование единых и стабильных инструментов для управления сетью может существенно улучшить управление IP-адресацией. Совместно с коллегами вы можете развить данное решение для массового развертывания, что является отличной практикой для стабильной и единообразной работы устройства в сетевой среде.