Получить DHCP Gateway networkd-dispatcher

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

Для Ubuntu 24.04 Server, есть ли способ получить шлюз DHCP в скрипте networkd-dispatcher, когда интерфейс DHCP поднимается/обновляется (как $new_router в скрипте хуков dhclient)?
Обновление после оригинального поста:
Я нашел шлюз в переменной окружения $json, которая передается в networkd-dispatcher, но … (1) она может исчезнуть согласно странице разработчика и (2) мне нужно позволить netplan установить маршрут по умолчанию. Я надеялся, что смогу получить шлюз и обновить пользовательскую таблицу, не затрагивая маршрут по умолчанию – это возможно?

Ответ или решение

Чтобы получить шлюз DHCP в скрипте networkd-dispatcher на сервере Ubuntu 24.04, вам нужно учесть несколько важных моментов и возможностей, предоставляемых данной системой управления сетью.

Контекст и Задача

При использовании networkd-dispatcher, когда интерфейс с DHCP подключается или обновляется, система может передавать переменные окружения, которые содержат информацию о текущей конфигурации сети. Согласно вашему обновлению, вы уже знаете о наличии переменной $json, которая хранит информацию о маршрутизаторе, но беспокоитесь о ее будущей доступности и о влиянии на настройку маршрутов через Netplan.

Шаги для получения шлюза DHCP

  1. Создание скрипта: Рассмотрим, как вы можете создать bash-скрипт, который будет исполняться при событиях networkd-dispatcher. Поместите скрипт в /usr/lib/networkd-dispatcher/routable.d/.

    #!/bin/bash
    
    # Проверяем, если событие 'up' или 'renew' 
    if [ "$EVENT" == "up" ] || [ "$EVENT" == "renew" ]; then
        # Получаем информацию из переменной $json
        GATEWAY=$(echo "$json" | jq -r '.new.router')
    
        # Проверяем, получен ли шлюз
        if [ "$GATEWAY" != "null" ]; then
            # Выполняем команду для добавления пользовательского маршрута
            ip route add default via "$GATEWAY" table <custom_table_id>
            echo "Добавлен пользовательский маршрут через шлюз: $GATEWAY"
        else
            echo "Шлюз не найден в переменной \$json."
        fi
    fi
  2. JQ для обработки JSON: В данном случае используется jq, утилита для обработки JSON. Убедитесь, что она установлена на вашем сервере.

    sudo apt-get install jq
  3. Управление маршрутами: Чтобы добавить пользовательскую таблицу маршрутизации, вам нужно будет использовать команду ip route. Это позволит вам установить маршрут, не влияя на маршрут по умолчанию, который устанавливается посредством Netplan.

  4. Конфигурация Netplan: Убедитесь, что ваша конфигурация Netplan настроена так, чтобы не конфликтовать с установленными вами маршрутами. Например, вы можете настроить маршрутизацию таким образом, чтобы Netplan устанавливал основной маршрут и оставлял место для ваших пользовательских маршрутов, как показано ниже:

    network:
      version: 2
      ethernets:
        eth0:
          dhcp4: true

Итог

Следуя этим шагам, вы сможете эффективно получить шлюз DHCP при помощи networkd-dispatcher. Использование переменной $json для извлечения информации о маршрутизаторе позволит вам управлять маршрутами, не нарушая конфигурации, задаваемой Netplan. Как всегда, тестируйте изменения в контролируемой среде перед развертыванием в продакшен.

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

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