Как настроить systemd-resolved для mdns multicast dns в локальной сети?

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

Ubuntu 18

Я провел много исследований и близок к сборке этой картины, но не могу понять:

Как мне настроить systemd-resolved для mdns?

Моя конкретная цель:

  • поднять сервер в сети 10.0.0.0/16
  • чтобы новый сервер дал себе произвольное имя, например foo1
  • чтобы можно было подключиться к этому серверу с другого компьютера в той же сети, используя имя foo1

Может кто-нибудь сказать мне, как сделать это, используя systemd-resolved?

спасибо

На данный момент я настроил resolved.conf следующим образом

ubuntu@ip-10-0-0-229:/etc$ --> CHROME -> cat /etc/systemd/resolved.conf
#  Этот файл является частью systemd.
#
#  systemd - это свободное программное обеспечение; вы можете его перераспределять и/или изменять
#  в соответствии с условиями GNU Lesser General Public License, как это опубликовано
#  Фондом Свободного Программного Обеспечения; не ниже версии 2.1 Лицензии или
#  (по вашему выбору) любой более поздний версии.
#
# Записи в этом файле показывают значения по умолчанию на момент компиляции.
# Вы можете изменить настройки, отредактировав этот файл.
# Значения по умолчанию можно восстановить, просто удалив этот файл.
#
# См. resolved.conf(5) для получения дополнительных сведений

[Resolve]
#DNS=
#FallbackDNS=
#Domains=
LLMNR=yes
MulticastDNS=yes
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes
ubuntu@ip-10-0-0-229:/etc$ --> CHROME ->

Изменение /etc/systemd/resolved.conf – это только часть работы. После его изменения вам все еще нужно решить эту головоломку:

Multicast DNS будет включен на этапе только если по ссылке и
глобальная настройка включены.

И если вы знаете трюк… это просто.

sudo systemd-resolve --set-mdns=yes --interface=wlan0

wlan0 – это интерфейс, на котором запрашивается mDNS. После этого вы можете увидеть, что mDNS активирован:

$ sudo systemd-resolve --status wlan0            
Link 3 (wlan0)
      Текущие области: нет
 Установка DefaultRoute: нет
        Установка LLMNR: да
 Установка MulticastDNS: да #<--- БИНГО! 
   Установка DNSOverTLS: нет
       Установка DNSSEC: allow-downgrade
       Поддержка DNSSEC: да

Перезагрузите systemd-resolved через systemctl:

sudo systemctl restart systemd-resolved 

И mDNS работает!

(до)

~ ❯ ping homebridge.local                                    
ping: не удается разрешить homebridge.local: Неизвестный хост

(после)

~ ❯ ping homebridge.local                                    
PING homebridge.local (192.168.1.9): 56 байт данных
64 байт от 192.168.1.9: icmp_seq=0 ttl=64 время=21.721 мс
64 байт от 192.168.1.9: icmp_seq=1 ttl=64 время=22.429 мс

Я потратил много времени, пытаясь сделать так, чтобы system-resolve работал постоянно после перезагрузки, но не смог этого сделать с великой фрустрацией.

Шаги, которые я предпринял в соответствии с инструкциями и комментариями выше:

  • Установил MulticastDNS=yes в /etc/systemd/resolved.conf
  • Создал файл /etc/systemd/network/eth0.network со следующим содержимым.
[Match]
Name=eth0

[Network]
MulticastDNS=yes

Я пытался следовать этим инструкциям из архлинуксовой вики, используя NetworkManager.

Ничего не сработало. Поэтому я наконец решил сдаться и пойти по пути службы systemd.

Мое решение

Обновите настройки многоадресного DNS (mDNS) для systemd-resolve, чтобы mDNS был включен на сетевом соединении.

sudo nano /etc/systemd/resolved.conf

Обновите следующие настройки.

MulticastDNS=yes
LLMNR=no

Создайте службу, которая запускается после того, как systemd-resolved.service запускается, чтобы включить mDNS на сетевом соединении eth0. Это обеспечит сохранность многоадресного DNS между перезагрузками.

sudo nano /etc/systemd/system/multicast-dns.service

Добавьте следующее.

[Unit]
Description=Включить MulticastDNS на сетевом соединении eth0
After=systemd-resolved.service

[Service]
ExecStart=systemd-resolve --set-mdns=yes --interface=eth0

[Install]
WantedBy=multi-user.target

Включите службу multicast-dns.

sudo systemctl enable multicast-dns
sudo systemctl start multicast-dns
sudo systemctl status multicast-dns
sudo systemctl restart systemd-resolved

Давайте проверим это.

# Протоколы должны показывать '+mDNS' вместо '-mDNS'
sudo systemd-resolve --status eth0
# Та же информация для всех сетевых интерфейсов
resolvectl status
# Проверьте, разрешено ли имя хоста с добавленным .local
resolvectl query `hostname`.local

Теперь перезагрузите, и system-resolve должен работать с самого начала 🙂

Надеюсь, это избавит кого-то от разочарования.

Чтобы включить mDNS на интерфейсе, вам нужно установить опцию MulticastDNS= в разделе [Network] файла .network для интерфейса в сети 10.0.0.0/16.

Эта опция по умолчанию отключена и должна быть включена для каждого интерфейса.

Вы также можете использовать команду systemd-resolve --status (доступно в версии systemd v237, поставляемой с Ubuntu 18.04, более новые версии systemd заменили эту команду на resolvectl), чтобы запросить статус resolved, включая доступные параметры для каждого сетевого интерфейса. Если вы видите MulticastDNS setting: no для интерфейса Link, где находится сеть 10.0.0.0/16, это означает, что она еще не включена.

В дополнение к MulticastDNS=yes в вашем .network файле, такая же настройка также должна быть установлена в resolved.conf. Из документации resolved.conf:

Multicast DNS будет включен на этапе только если настройка по ссылке и глобальная настройка включены.

Мой способ взаимодействия с mDNS (avahi) таков

• sudo apt install ifupdown
• sudo apt install avahi-utils

идея из текста в

• cat /etc/network/interfaces 
• # ifupdown был заменен на netplan(5) в этой системе. См.
• # /etc/netplan для текущей конфигурации.
• # Чтобы повторно включить ifupdown в этой системе, вы можете выполнить:
• # sudo apt install ifupdown

Я пытался решить эту проблему несколько раз за эти годы, но всегда прибегал к использованию avahi…

Однако я обнаружил в документации Ubuntu https://ubuntu.com/core/docs/networkmanager, что там сказано:

Тем не менее, когда NetworkManager установлен, он будет контролировать все
сетевые устройства в системе, создавая файл конфигурации netplan,
в котором устанавливается в качестве рендерера сети по умолчанию.

Это сработало для меня на Ubuntu 20.04.6:

  1. Проверьте, установлен ли network-manager: apt list --installed | grep network-manager. Продолжайте, если он установлен, иначе попробуйте чисто системные решения, предложенные в других ответах.
  2. Получите имя устройства, на котором вы хотите включить mDNS, запустив ifconfig или ip link show. Обратите внимание на это имя для последнего шага, но часто имя – eth0 (у некоторых моих машин почему-то было enp0s25).
  3. Отключите avahi, если он установлен (или удалите его): sudo systemctl disable avahi-daemon или sudo apt remove avahi-daemon
  4. Отредактируйте resolved.conf (как описано выше) sudo nano /etc/systemd/resolved.conf и раскомментируйте и установите MulticastDNS=yes
  5. Показать сетевые соединения nmcli connection show и посмотрите на столбец «Имя», запомните имя соединения, которое вы хотите отредактировать. На моем компьютере это Wired connection 1.
  6. Включить mDNS на этом соединении, используя это имя (заметьте, что имя должно быть заключено в двойные кавычки для обработки пробелов) sudo nmcli connection modify "Wired connection 1" connection.mdns yes
  7. перезагрузите sudo shutdown -r now
  8. проверьте, что имя устройства теперь имеет включенный MulticastDNS/mDNS sudo systemd-resolve --status eth0

Link 2 (eth0)
Текущие области: DNS mDNS/IPv4 mDNS/IPv6
Установка DefaultRoute: да
Установка LLMNR: да
Установка MulticastDNS: да <—– ура!
Установка DNSOverTLS: нет
Установка DNSSEC: нет
Поддержка DNSSEC: нет
Текущий DNS-сервер: 192.168.1.1
DNS-серверы: 192.168.1.1
DNS-домен: ~.

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

Конфигурация systemd-resolved для использования mDNS (Multicast DNS) в локальной сети на Ubuntu 18 является многошаговым процессом, который включает в себя настройку как глобальных, так и интерфейсовых параметров. Ниже приведены детальные инструкции для достижения вашей цели, с фокусом на использование systemd-resolved.

Шаг 1: Настройка конфигурационного файла resolved.conf

Первым делом вам нужно настроить файл конфигурации resolved.conf, чтобы включить поддержку mDNS.

  1. Откройте файл resolved.conf с помощью текстового редактора:
sudo nano /etc/systemd/resolved.conf
  1. Найдите и обновите следующие параметры:
[Resolve]
LLMNR=yes
MulticastDNS=yes

Обратите внимание, что сначала могут быть комментарии перед этими строками. Убедитесь, что они активны, удалив символ #.

Шаг 2: Настройка .network файла для интерфейса

Для того чтобы mDNS работал, необходимо также внести изменения в конфигурацию сетевого интерфейса.

  1. Создайте или откройте файл .network для вашего интерфейса. Например, для интерфейса eth0 это будет:
sudo nano /etc/systemd/network/eth0.network
  1. Добавьте следующие строки:
[Match]
Name=eth0

[Network]
MulticastDNS=yes

Если у вас другой интерфейс, замените eth0 на имя вашего сетевого интерфейса. Чтобы узнать имя интерфейса, выполните команду:

ip link show

Шаг 3: Включение mDNS на интерфейсе после перезагрузки

Поскольку вам также важно, чтобы настройки mDNS сохранялись после перезагрузки системы, вы можете создать системный сервис для автоматической настройки.

  1. Создайте новый файл сервиса:
sudo nano /etc/systemd/system/multicast-dns.service
  1. Вставьте следующие строки:
[Unit]
Description=Enable MulticastDNS on eth0 network link
After=systemd-resolved.service

[Service]
ExecStart=systemd-resolve --set-mdns=yes --interface=eth0

[Install]
WantedBy=multi-user.target

Шаг 4: Включение и запуск сервиса

Теперь, когда ваш сервис создан, вам нужно его включить и запустить:

sudo systemctl enable multicast-dns
sudo systemctl start multicast-dns

Шаг 5: Перезапуск systemd-resolved

Для применения всех изменений перезапустите службу systemd-resolved:

sudo systemctl restart systemd-resolved

Шаг 6: Проверка конфигурации

Чтобы убедиться, что mDNS был успешно активирован, выполните следующую команду:

sudo systemd-resolve --status eth0

В выводе вы должны увидеть строку MulticastDNS setting: yes, что свидетельствует о том, что mDNS включен.

Шаг 7: Тестирование подключения

Теперь можно проверить, работает ли mDNS. Вам нужно установить имя для вашего сервера. Например, чтобы задать имя foo1, выполните:

sudo hostnamectl set-hostname foo1

Затем, с другого устройства в той же локальной сети, попробуйте пинговать сервер:

ping foo1.local

Если все настроено правильно, вы должны получить ответ от вашего сервера.

Заключение

Настройка systemd-resolved для mDNS на Ubuntu 18 требует внимательности к деталям, но следуя указанным шагам, вы сможете успешно настроить вашу локальную сеть для работы с именами хостов вместо IP-адресов. Это упростит доступ к ресурсам сети и сделает вашу работу более продуктивной.

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

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