Вопрос или проблема
Меня интересует, есть ли рекомендованный метод установки уникальных статических IP-адресов по MAC-адресу при автоматической установке Ubuntu Desktop 24.04.
Мы тестируем настройку PXE-загрузки с образом 24.04.1 для рабочего стола, загружаемым по HTTP, и файл автопостановки user-data
в формате YAML, размещенный на HTTP-сервере.
Я надеялся, что наличие сетевого блока с несколькими ключами match:
в user-data
позволит применить уникальные статические адреса, но с дублирующимися ключами, похоже, что только последний набор записывается в файл netplan YAML в среде установки. Например, только детали для xx:xx:xx:xx:xx:ab
/10.0.0.3/16
извлекаются из приведенного ниже кода.
Не уверен, не пропустил ли я что-то очевидное, или же это неправильный подход. Буду признателен за любую помощь.
network:
version: 2
ethernets:
enp0s31f6:
match:
macaddress: xx:xx:xx:xx:xx:aa
dhcp4: false
addresses:
- 10.0.0.2/16
routes:
- to: default
via: 10.0.0.1
nameservers:
search:
- domain.local
addresses:
- 10.0.0.1
match:
macaddress: xx:xx:xx:xx:xx:ab
dhcp4: false
addresses:
- 10.0.0.3/16
routes:
- to: default
via: 10.0.0.1
nameservers:
search:
- domain.local
addresses:
- 10.0.0.1
Не уверен, является ли это идеальным способом решения ситуации, но это, похоже, работает:
- Создан скрипт
mac.sh
для проверки массива MAC-адресов на соответствие MAC-адресу в среде установки. Он затем обновляет/autoinstall.yaml
соответственно с соответствующим MAC-адресом и IP-адресом (из второго массива). Примечание:/autoinstall.yaml
создается в среде установки изhttp://[pxeserver]/user-data
.
#!/bin/bash
mac=("xx:xx:xx:xx:xx:aa" "xx:xx:xx:xx:xx:ab")
ip=("10.0.0.2\/16" "10.0.0.3\/16")
for i in "${!mac[@]}"; do
if [ "$(ip a | grep ether | cut -d ' ' -f6)" == "${mac[i]}" ]; then
sed -i -e "s/ macaddress: null/ macaddress: ${mac[i]}/" /autoinstall.yaml
sed -i -e "s/ - ipaddress/ - ${ip[i]}/" /autoinstall.yaml
fi
done
- Обновлен
user-data
, чтобы включитьearly-commands
, которые копируют скрипт, делают его исполняемым и запускают его.
early-commands:
- wget -O /mac.sh http://[pxeserver]/mac.sh
- chmod +x /mac.sh
- /mac.sh
- sleep 3
- Секция
network
вuser-data
сделана универсальной. Примечание: когда это копируется в/autoinstall.yaml
,macaddress:
устанавливается какmacaddress:null
.
network:
version: 2
ethernets:
enp0s31f6:
match:
macaddress:
dhcp4: false
addresses:
- ipaddress
routes:
- to: default
via: 10.0.0.1
nameservers:
search:
- domain.local
addresses:
- 10.0.0.1
Ответ или решение
Настройка статических IP-адресов по MAC-адресам при автоподключении Ubuntu Desktop 24.04
Вопрос о настройке уникальных статических IP-адресов для сетевых интерфейсов по MAC-адресам во время автоподключения Ubuntu Desktop 24.04 актуален для многих администраторов, использующих PXE-загрузку и автоматизацию установки. В этой статье мы рассмотрим рекомендованные методы настройки статических IP-адресов и уточним слушание проблемы с дублированием ключей в конфигурационных файлах.
Проблема с конфигурацией
Вы отметили, что при использовании нескольких ключей match
в блоке network
вашего user-data
YAML файла система игнорирует все, кроме последнего указанного MAC-адреса. Это поведение связано с тем, как интерпретируется YAML-файл и как работает обработка сетевых конфигураций сетевой подсистемы в Ubuntu 24.04.
Рекомендации по настройке
1. Использование скриптов для выбора конфигурации
Ваш подход с использованием Bash-скрипта mac.sh
для проверки MAC-адресов и автоматического обновления конфигурационной YAML-файла /autoinstall.yaml
является эффективным и гибким решением. Такой метод позволяет динамически генерировать сетевые настройки в зависимости от уникального MAC-адреса устройства, что идеально подходит для сценариев с PXE-бутом.
Пример скрипта mac.sh
:
#!/bin/bash
mac=("xx:xx:xx:xx:xx:aa" "xx:xx:xx:xx:xx:ab")
ip=("10.0.0.2/16" "10.0.0.3/16")
for i in "${!mac[@]}"; do
if [ "$(ip a | grep ether | cut -d ' ' -f6)" == "${mac[i]}" ]; then
sed -i -e "s/ macaddress: null/ macaddress: ${mac[i]}/" /autoinstall.yaml
sed -i -e "s/ - ipaddress/ - ${ip[i]}/" /autoinstall.yaml
fi
done
2. Обновление user-data
Добавление блока early-commands
в ваш user-data
YAML файл для загрузки и выполнения скрипта также является хорошим решением. Это позволяет подготовить конфигурационный файл напрямую в процессе установки, что сокращает количество шагов, необходимых для достижения конечного результата.
Пример блока early-commands
:
early-commands:
- wget -O /mac.sh http://[pxeserver]/mac.sh
- chmod +x /mac.sh
- /mac.sh
- sleep 3
3. Общая конфигурация сети
Для блока конфигурации network
в user-data
файла настоятельно рекомендуется использовать общие настройки, оставляя поля macaddress
и ipaddress
для заполнения вашим скриптом.
Общая структура блока network
:
network:
version: 2
ethernets:
enp0s31f6:
match:
macaddress: null
dhcp4: false
addresses:
- ipaddress
routes:
- to: default
via: 10.0.0.1
nameservers:
search:
- domain.local
addresses:
- 10.0.0.1
Заключение
Таким образом, ваш способ, основанный на динамическом изменении конфигурации, представляет собой оптимальное решение для настройки статических IP-адресов в процессе автоподключения Ubuntu Desktop 24.04. С помощью скриптов вы сможете избежать проблем, связанных с дублированием ключей, и значительно упростите задачу управления сетевыми настройками в условиях PXE-загрузки.
Вы можете улучшить этот процесс, интегрировав дополнительные проверки и функции логирования для обеспечения надежности и диагностики потенциальных проблем.