Рейтинг:2

Заказ конфигурации интерфейса с помощью systemd-networkd

флаг pl

Я использую Ubuntu 20.04 с systemd-networkd и Netplan. У меня есть два физических интерфейса (ens3 и энс4), которые настроены по DHCP (с оговорками, поэтому у меня всегда получаются одни и те же адреса).

Кроме того, у меня есть два туннельных устройства. Они находятся вне контроля Netplan/networkd (они созданы Strongswan, но во всех смыслах и целях они создаются вручную, запустив что-то вроде ip туннель добавить...). Эти туннельные устройства имеют IP-маршрут добавлены для отправки трафика на них. При первоначальном создании они работают нормально, но systemd-networkd в конечном итоге удалит маршруты.

Чтобы противостоять этому, я успешно настроил туннельные устройства в systemd-networkd, но маршрут не может быть создан, потому что он был предпринят ранее. ens3/энс4 настроены (я вижу туннель1: не удалось установить маршрут: неверный адрес prefsrc. Недопустимый аргумент в системном журнале). Я подтвердил заказ, включив журнала отладки.

Я могу добавить маршрут вручную:

ip route add 10.0.32.0/20 dev Tunnel1 Scope Link SRC 10.0.16.170 Метрика 100

... который отлично работает, но через какое-то время будет удален systemd-networkd.

документация говорит: «Все файлы конфигурации коллективно сортируются и обрабатываются в лексическом порядке, независимо от каталогов, в которых они находятся», поэтому я искал другие файлы конфигурации и нашел их в /запустить/системд/сеть:

10-netplan-ens3.link
10-netplan-ens3.network
10-netplan-ens4.link
10-netplan-ens4.network

Я пытался назвать свой netdev и сеть файлы как 99-tunnel1.netdev или же zzzz-tunnel1.netdev и т. д., и даже пробовал с 00- и т. д. тоже. Что бы я ни делал, мне всегда кажется, что ens3 и энс4 настраиваются после туннельных интерфейсов, поэтому маршрут всегда не добавляется.

Я также пытался настроить свои устройства в Netplan. Это усложняет некоторые вещи, но в конечном итоге имеет ту же проблему. Несмотря на то, что он создает файлы, такие как 10-netplan-tunnel1.network (которые лексически идут после файлов ens3/ens4), они по-прежнему применяются сетью в неправильном порядке.

Я уверен, что я что-то упускаю здесь, но я не вижу, что. Любые идеи?

Мой туннель1.netdev выглядит так:

[NetDev]
Имя=туннель1
Вид=ВТИ
МТУБайт=1419

[Туннель]
Пульт = 1.2.3.4
Местный = 2.3.4.5
Ключ=100

... и .сеть выглядит так:

[Соответствовать]
Имя=туннель1

[Соединять]
RequiredForOnline=нет
МТУБайт=1419

[Адрес]
Адрес=169.254.102.162/30
Пир = 169.254.102.161/30

[Маршрут]
Пункт назначения = 10.0.32.0/20
Предпочтительный источник = 10.0.16.170
Метрика=100
Область = ссылка
флаг us
Ожидается, что networkd не будет касаться конфигурации, включая маршруты, на устройствах, о которых ему не было сказано. Но мне интересно, это ядро ​​автоматически удаляет маршрут для вас? Я заметил, что для рассматриваемого маршрута указан «src», который не является IP-адресом, указанным как связанный с интерфейсом. (И, следовательно, я бы не ожидал, что этот маршрут действительно будет работать, как определено.) Какого поведения вы ожидаете от этого, учитывая, что 10.0.16.170 не является IP-адресом на интерфейсе?
флаг pl
Я согласен с тем, что сеть не должна связываться с вещами, для которых она не настроена. Однако да, маршрут включает в себя src, который находится на сетевом управляемом интерфейсе, поэтому маршрут должен выходить, когда интерфейс «не работает» (но в противном случае маршрут необходим и работает нормально). Любопытно то, что при настройке устройств `ens` и `tunnel` (vti) networkd настаивает на том, чтобы туннели выполнялись первыми, что, как я не могу себе представить, когда-либо было бы правильным, особенно если бы они были сконфигурированы так, чтобы делать их последними, и я этого не делаю. кажется, не в состоянии изменить это поведение.
Nate T avatar
флаг it
Не могли бы вы написать сценарий оболочки для настройки в ручном стиле, а затем настроить задание cron для проверки маршрута. Если маршрут не найден, может ли он не запускать скрипт? или перенастроить любым способом, который вы выберете? Я использую диспетчер сети через nmcli для реконф. , но мой пятнистый, и я с этим справился.
флаг pl
Спасибо за мысль, но я не сторонник решения cron script - если маршрут удаляется сразу после запуска скрипта, то будет минута простоя, пока скрипт снова не запустится. Не говоря уже о бесполезном запуске сценария тысячи раз. Это решение последней инстанции, и я думаю, что удаление systemd предпочтительнее.
Рейтинг:1
флаг cn

Я думаю, что у нас есть две проблемы здесь:

1/ Удаление вашего src-route может быть связано с периодической потерей несущей на интерфейсе ens3/4. Когда интерфейс выходит из строя (даже если ненадолго), он сбрасывает IP-адрес, а также src-маршруты, связанные с этим IP-адресом. Затем он перенастраивает IP-адрес через DHCP, но теряет src-маршрут, который вы добавили вручную. Попробуйте создать раскрывающийся список переопределения конфигурации, например: /etc/systemd/network/10-netplan-ens3.network.d/override.conf:

[Сеть]
ConfigureWithoutCarrier=true
Игнорекерриерлосс = истина

2/ systemd-networkd обрабатывает файлы .network в лексическом порядке, но предоставленный DHCP IP-адрес принимается только асинхронно после получения аренды DHCP. networkd не блокирует настройку других интерфейсов (например, вашего туннельного интерфейса) в этом ответе DHCP, поэтому маршрут не может быть добавлен, так как этот src IP еще не существует в этот момент времени.

Вы говорите, что у вас есть конфигурация, которая всегда предоставляет вам один и тот же IP-адрес через DHCP. Почему бы вам не указать этот самый IP-адрес статически (например, адреса: [10.0.16.170/30] в netplan — или как там маска сети)? Таким образом networkd сможет добавить ваш Предпочтительный источник = адрес без проблем и перенастроить его после того, как оператор был потерян.

флаг pl
Потеря несущей звучит как очень правдоподобная причина проблемы - я не думал об этом и действительно вызовет все проблемы, о которых вы упомянули. Неблокирующая природа networkd действительно выглядит моей проблемой - я полагаю, что нет способа сказать «подождите, пока не будет настроено» или «не делайте этого, пока X не будет выполнено», но я действительно мог бы использовать фиксированный IP-адрес - это почти наверняка решит проблему (хотя и поднимает другие, а именно разрешение DNS, но это тоже довольно легко решаемо в моей среде). Большое спасибо за идеи - действительно полезные (технически и для моего здравомыслия!)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.