Как сохранить конфигурацию «systemd-разрешения» для определенного сетевого интерфейса?

1396
quat

Я обновил свой рабочий стол Ubuntu до Bionic Beaver, который перешел на systemd-разрешения . С этим изменением перестало работать разрешение DNS LXD.

Чтобы сделать LXD-контейнеры доступными для обнаружения, я могу запустить приведенную ниже команду. Обратите внимание, что IP 10.78.38.1 - это IP- адрес моста lxdbr0 .

$ sudo systemd-resolve --interface lxdbr0 --set-dns 10.78.38.1 --set-domain lxd 

Имея это в виду, я могу обнаружить контейнер LXD по их имени, и конфигурация выглядит следующим образом.

$ systemd-resolve --status . . . Link 10 (lxdbr0) Current Scopes: DNS LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no DNS Servers: 10.78.38.1 DNS Domain: lxd . . . 

Однако после перезагрузки системы эта конфигурация исчезла.

$ systemd-resolve --status . . . Link 10 (lxdbr0) Current Scopes: none LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no . . . 

Чтобы сделать это выше, я просмотрел man - страницу systemd- resolver http://manpages.ubuntu.com/manpages/bionic/man8/systemd-resolved.service.8.html . Он предлагает создать файл /etc/systemd/resolved.conf.d/lxd.conf, но нет доступных параметров, которые позволили бы мне сделать такую ​​конфигурацию специфичной для одного конкретного сетевого адаптера.

0

2 ответа на вопрос

0
Lubo Diakov

Я понимаю, что этот вопрос был здесь 2 месяца, но, возможно, вам все еще нужны ответы?

1) Systemd-networkd хранит сетевые конфигурации в (как минимум) 3 каталогах, может быть, больше. То, что вам кажется наиболее актуальным:

/etc/systemd/network/ 

(он переопределяет другие 2, а именно / lib / s / n и / run / s / n.

Создайте текстовый файл, похожий на этот:

[Match] Name=enp0s4  [Network] DHCP=yes DNS=192.168.1.1 

Вы можете называть его так, как вы хотите, кажется, пока он находится в этом каталоге, мой называется enp0s4.network, правильное получение контента имеет решающее значение, если вы ошибаетесь, случаются плохие вещи, например, ваша сеть перестает работать, по крайней мере на этом интерфейсе, пока вы не восстановите рабочий конфиг. Что нелегко, я все испортил, и мне потребовался час, чтобы разобраться. Хорошо, что мой «сервер» находится в соседней комнате, а не в удаленном дата-центре!

Примеры того, как настроить мост, читайте здесь:

man systemd.network |grep -A 42 "Example 3" 

Примеры, приведенные там, плюс мой фрагмент кода можно настроить:

Current Scopes: DNS LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no DNS Servers: 10.78.38.1 

Не уверен, что синтаксис для домена DNS, это должно быть возможно, man-страница размером с 30 страниц! Если вы можете, пропустите это, попытавшись "Domain =" испортить мою систему, вот как я знаю, неправильно это понимать, это личный опыт. :-) Так что найдите правильный синтаксис или не вставляйте его, если вы не можете восстановить.

Восстановление это еще один пост, хотя я устал.

Вот ссылки, которые я использовал:

Как проверить, работает ли сеть: https://superuser.com/questions/1187633/how-to-debug-systemd-networkd?rq=1#comment1807294_1187633

Как включить, если он отключен: https://askubuntu.com/posts/681768/revisions

Перезапустите systemd-resolver без перезагрузки:

sudo systemctl restart systemd-resolved 

К вашему сведению: существует способ сообщить systemd, что Network-Manager должен обрабатывать интерфейс, а также оставить его «неуправляемым» и работать с конфигурациями плоских файлов, такими как /etc/resolv.conf. Но я бы сделал так, как если бы я был на твоем месте. И я просто пытаюсь настроить разные интерфейсы для другой цели, но мне нужна была вся эта информация. выше, чтобы помочь себе, поэтому я думал, что поделюсь. Так как вы поделились, как временно его изменить, что тоже полезно. :-)

НТН

0
ctx

Это звучит правдоподобно, но, похоже, не имеет никакого эффекта:

Согласно связанной man-странице man 8 systemd-resolved.service, вы должны использовать файл конфигурации для каждой ссылки в /etc/systemd/network:

DNS-серверы, с которыми установлено соединение, определяются на основе глобальных настроек в /etc/systemd/resolved.conf, статических настроек для каждой ссылки в /etc/systemd/network/*.networkфайлах, динамических настроек для каждой ссылки, полученных через DHCP, и любой информации DNS-сервера, доступной для других системных служб.

Чтобы сделать вашу конфигурацию постоянной, вы должны создать файл /etc/systemd/network/lxdbr0.conf:

[Match] Name=lxdbr0  [Resolve] DNS=10.78.38.1 Domains=lxd 
Это звучит правдоподобно, но этот параметр, похоже, не влияет на мою систему с LXD. После публикации исходного вопроса я создал службу Systemd, которая выполняет вышеупомянутую команду, чтобы настроить DNS для LXD, который запускается при загрузке. Это также не работает надежно, поскольку интерфейс lxdbr0 иногда еще не существует на данный момент. Поэтому мне приходится запускать пользовательский сервис Systemd вручную. Я думаю, это также может быть причиной того, что ваше решение не работает с LXD, хотя это, кажется, правильный путь ... quat 5 лет назад 0
Вы правы. Но каким-то образом мне удалось получить желаемый результат из `systemd-resolv --status`, не вводя эту команду. Другая проблема заключается в том, что разрешение имен не работает внутри контейнеров. Я исправлю свой ответ, если найду лучшее решение. ctx 5 лет назад 0