- Вопрос или проблема
- Ответ или решение
- Шаг 1: Настройка конфигурационного файла resolved.conf
- Шаг 2: Настройка .network файла для интерфейса
- Шаг 3: Включение mDNS на интерфейсе после перезагрузки
- Шаг 4: Включение и запуск сервиса
- Шаг 5: Перезапуск systemd-resolved
- Шаг 6: Проверка конфигурации
- Шаг 7: Тестирование подключения
- Заключение
Вопрос или проблема
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:
- Проверьте, установлен ли network-manager:
apt list --installed | grep network-manager
. Продолжайте, если он установлен, иначе попробуйте чисто системные решения, предложенные в других ответах. - Получите имя устройства, на котором вы хотите включить mDNS, запустив
ifconfig
илиip link show
. Обратите внимание на это имя для последнего шага, но часто имя –eth0
(у некоторых моих машин почему-то былоenp0s25
). - Отключите avahi, если он установлен (или удалите его):
sudo systemctl disable avahi-daemon
илиsudo apt remove avahi-daemon
- Отредактируйте resolved.conf (как описано выше)
sudo nano /etc/systemd/resolved.conf
и раскомментируйте и установитеMulticastDNS=yes
- Показать сетевые соединения
nmcli connection show
и посмотрите на столбец «Имя», запомните имя соединения, которое вы хотите отредактировать. На моем компьютере этоWired connection 1
. - Включить mDNS на этом соединении, используя это имя (заметьте, что имя должно быть заключено в двойные кавычки для обработки пробелов)
sudo nmcli connection modify "Wired connection 1" connection.mdns yes
- перезагрузите
sudo shutdown -r now
- проверьте, что имя устройства теперь имеет включенный 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.
- Откройте файл
resolved.conf
с помощью текстового редактора:
sudo nano /etc/systemd/resolved.conf
- Найдите и обновите следующие параметры:
[Resolve]
LLMNR=yes
MulticastDNS=yes
Обратите внимание, что сначала могут быть комментарии перед этими строками. Убедитесь, что они активны, удалив символ #
.
Шаг 2: Настройка .network файла для интерфейса
Для того чтобы mDNS работал, необходимо также внести изменения в конфигурацию сетевого интерфейса.
- Создайте или откройте файл
.network
для вашего интерфейса. Например, для интерфейсаeth0
это будет:
sudo nano /etc/systemd/network/eth0.network
- Добавьте следующие строки:
[Match]
Name=eth0
[Network]
MulticastDNS=yes
Если у вас другой интерфейс, замените eth0
на имя вашего сетевого интерфейса. Чтобы узнать имя интерфейса, выполните команду:
ip link show
Шаг 3: Включение mDNS на интерфейсе после перезагрузки
Поскольку вам также важно, чтобы настройки mDNS сохранялись после перезагрузки системы, вы можете создать системный сервис для автоматической настройки.
- Создайте новый файл сервиса:
sudo nano /etc/systemd/system/multicast-dns.service
- Вставьте следующие строки:
[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-адресов. Это упростит доступ к ресурсам сети и сделает вашу работу более продуктивной.