Вопрос или проблема
Для 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
-
Создание скрипта: Рассмотрим, как вы можете создать 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
-
JQ для обработки JSON: В данном случае используется
jq
, утилита для обработки JSON. Убедитесь, что она установлена на вашем сервере.sudo apt-get install jq
-
Управление маршрутами: Чтобы добавить пользовательскую таблицу маршрутизации, вам нужно будет использовать команду
ip route
. Это позволит вам установить маршрут, не влияя на маршрут по умолчанию, который устанавливается посредством Netplan. -
Конфигурация Netplan: Убедитесь, что ваша конфигурация Netplan настроена так, чтобы не конфликтовать с установленными вами маршрутами. Например, вы можете настроить маршрутизацию таким образом, чтобы Netplan устанавливал основной маршрут и оставлял место для ваших пользовательских маршрутов, как показано ниже:
network: version: 2 ethernets: eth0: dhcp4: true
Итог
Следуя этим шагам, вы сможете эффективно получить шлюз DHCP при помощи networkd-dispatcher. Использование переменной $json
для извлечения информации о маршрутизаторе позволит вам управлять маршрутами, не нарушая конфигурации, задаваемой Netplan. Как всегда, тестируйте изменения в контролируемой среде перед развертыванием в продакшен.