установка статического IP по MAC-адресу для автоматической установки 24.04 рабочего стола

Вопрос или проблема

Меня интересует, есть ли рекомендованный метод установки уникальных статических 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

Не уверен, является ли это идеальным способом решения ситуации, но это, похоже, работает:

  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
  1. Обновлен user-data, чтобы включить early-commands, которые копируют скрипт, делают его исполняемым и запускают его.
  early-commands:
    - wget -O /mac.sh http://[pxeserver]/mac.sh
    - chmod +x /mac.sh
    - /mac.sh
    - sleep 3
  1. Секция 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-загрузки.

Вы можете улучшить этот процесс, интегрировав дополнительные проверки и функции логирования для обеспечения надежности и диагностики потенциальных проблем.

Оцените материал
Добавить комментарий

Капча загружается...