Мультикастовый DNS применяется глобально, но не работает.

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

У меня есть домашний сервер, который доступен по адресу homeserver.local. Он внезапно перестал работать сегодня утром, и я пытаюсь его отладить, но не могу точно определить причину.

У сервера есть два сетевых адаптера, enp2s0 и enp3s0, но только enp3s0 активен и настроен.

Вот мой netplan:

network:
  version: 2
  ethernets:
    enp3s0:
      dhcp4: no
      dhcp6: no
      addresses:
        - 192.168.178.94/24
      nameservers:
        addresses: [1.1.1.1]
      dhcp4-overrides:
        use-dns: no

Согласно systemd-resolved и networkd, всё в порядке:

30 окт 11:42:13 homeserver systemd-networkd[14681]: veth00c2c8d: Получен IPv6LL
30 окт 11:42:13 homeserver systemd-networkd[14681]: veth4b68388: Получен IPv6LL
30 окт 11:42:13 homeserver systemd-networkd[14681]: veth477204f: Получен IPv6LL
30 окт 11:42:13 homeserver systemd-networkd[14681]: veth60c4872: Получен IPv6LL
30 окт 11:42:13 homeserver systemd-networkd[14681]: veth3f7c0d6: Получен IPv6LL
30 окт 11:42:13 homeserver systemd-networkd[14681]: tailscale0: Получен IPv6LL
30 окт 11:42:13 homeserver systemd-networkd[14681]: Перечисление завершено
30 окт 11:42:13 homeserver systemd[1]: Запущено systemd-networkd.service - Настройка сети.
30 окт 11:42:13 homeserver systemd-networkd[14681]: enp3s0: Конфигурирование с /run/systemd/network/10-netplan-enp3s0.network.
30 окт 11:42:13 homeserver systemd-networkd[14681]: enp3s0: DHCPv4 адрес 192.168.178.94/24, шлюз 192.168.178.1 получен от 192.168.178.1
30 окт 11:42:18 homeserver systemd[1]: Запуск systemd-resolved.service - Разрешение имен сети...
30 окт 11:42:18 homeserver systemd-resolved[14713]: Позитивные доверенные якоря:
30 окт 11:42:18 homeserver systemd-resolved[14713]: . IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
30 окт 11:42:18 homeserver systemd-resolved[14713]: Негативные доверенные якоря: home.arpa 10.in-addr.arpa 16.172.in-addr.arpa 17.172.in-addr.arpa 18.172.in>
30 окт 11:42:18 homeserver systemd-resolved[14713]: Используя системное имя 'homeserver'.
30 окт 11:42:18 homeserver systemd[1]: Запущено systemd-resolved.service - Разрешение имен сети.
30 окт 11:42:18 homeserver systemd-resolved[14713]: Очистил все кэши.

Здесь всё становится странным: resolvectl говорит, что Multicast включен для другого адаптера:

kowa@homeserver:~$ resolvectl mdns
Global: yes
Link 2 (enp2s0): yes
Link 3 (enp3s0): no
Link 5 (br-8f6820a83f6d): yes
Link 6 (docker0): yes
Link 8 (veth0d30cc2): yes
Link 10 (veth340868c): yes
Link 12 (vetha47528b): yes
Link 14 (vethebc06f0): yes
Link 18 (veth00c2c8d): yes
Link 20 (veth4b68388): yes
Link 22 (veth477204f): yes
Link 30 (veth60c4872): yes
Link 32 (veth3f7c0d6): yes
Link 35 (tailscale0): no

Вся эта конфигурация управляется Ansible, и поэтому я создал файл по пути /run/systemd/network/10-netplan-enp3s0.network.d/override.conf и добавил следующее:

[Network]
MulticastDNS=yes

После этого сервер снова заработал, но этот файл просто исчезает после перезагрузки, и я снова оказываюсь на нулевой отметке, так что это не постоянное решение.

Я заметил одну вещь: у меня запущен Home Assistant через контейнер Docker. Когда он включён, systemd-resolved жалуется, что уже запущен mDNS:

30 окт 11:49:48 homeserver systemd[1]: Запуск systemd-resolved.service - Разрешение имен сети...
30 окт 11:49:49 homeserver systemd-resolved[17681]: Позитивные доверенные якоря:
30 окт 11:49:49 homeserver systemd-resolved[17681]: . IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
30 окт 11:49:49 homeserver systemd-resolved[17681]: Негативные доверенные якоря: home.arpa 10.in-addr.arpa 16.172.in-addr.arpa 17.172.in-addr.arpa 18.172.in>
30 окт 11:49:49 homeserver systemd-resolved[17681]: Используя системное имя 'homeserver'.
30 окт 11:49:49 homeserver systemd-resolved[17681]: mDNS-IPv4: Похоже, что уже запущен другой mDNS-ответчик, или ранее произошёл сбой systemd-resolved>
30 окт 11:49:49 homeserver systemd-resolved[17681]: mDNS-IPv6: Похоже, что уже запущен другой mDNS-ответчик, или ранее произошёл сбой systemd-resolved>
30 окт 11:49:49 homeserver systemd[1]: Запущено systemd-resolved.service - Разрешение имен сети.

Но даже если я остановлю контейнер и перезапущу сервер, я всё равно не вижу homeserver.local, поэтому не думаю, что это только Home Assistant, что-то другое также может влиять на это. Это также не может быть avahi, так как он даже не установлен.

Я использую Ubuntu Server 24 (Linux homeserver 6.8.0-47-generic #47-Ubuntu SMP PREEMPT_DYNAMIC Пт Сен 27 21:40:26 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux)

Чтобы mDNS был включён на линке, его нужно включить как для линка, так и глобально. Эта функция была добавлена в версии Systemd 234. См. здесь.

Похоже, что он уже включён глобально, но для полноты картины включите его глобально, отредактировав /etc/systemd/resolved.conf и установив следующее:

[Resolve]
...
MulticastDNS=yes
...

Ваш пост указывает на то, что вы создали файл /run/systemd/network/10-netplan-enp3s0.network.d/override.conf. Но файлы в /run/systemd/network/ эфемерны и создаются Netplan при каждой загрузке. Поэтому вам нужно создать файл переопределения в /etc/systemd/network вместо этого.

Начните с определения имени основного сетевого файла:

$ ls /run/systemd/network
10-netplan-enp3s0.network

Создайте директорию для переопределений на основе имени основного сетевого файла:

$ mkdir /etc/systemd/network/10-netplan-enp3s0.network.d

Создайте файл переопределения: /etc/systemd/network/10-netplan-enp3s0.network.d/override.conf со следующим содержимым:

[Network]
MulticastDNS=yes

Перезагрузите компьютер и проверьте.

$ resolvectl mdns
Global: yes
Link 2 (enp3s0): yes

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

Причины Неисправности Multicast DNS и Решения

Введение

В вашем случае проблема с Multicast DNS (mDNS) заключается в том, что хотя вы настроили его глобально, он не работает для определенного сетевого интерфейса. Это может вызвать трудности в доступе к вашему домашнему серверу по имени homeserver.local. Давайте разберемся в причинах и возможных решениях данной проблемы.

Анализ Проблемы

  1. Настройки Сетевого Интерфейса: У вас есть два сетевых адаптера: enp2s0 и enp3s0. Адаптер enp3s0 активен и успешно получает IP-адрес (192.168.178.94/24). Однако настройки mDNS для enp3s0 неактивны, что видно из вывода команды resolvectl mdns — Multicast DNS для этого интерфейса отключен.

  2. Конфигурация Systemd-resolved: Вы также упомянули, что systemd-resolved сообщает о наличии другого mDNS-ресурсодателя, когда вы запускаете ваш контейнер Home Assistant. Это может вызвать конфликт, поскольку несколько сервисов не могут одновременно обрабатывать mDNS-запросы.

  3. Проблемы с Перезаписью Конфигурации: Вы создали временный файл в /run/systemd/network, который не сохраняется после перезагрузки. Это еще одна причина, по которой ваш сервер может не видеть homeserver.local после перезагрузки.

Рекомендованные Решения

  1. Глобальная Настройка mDNS:
    Проверьте, чтобы в конфигурационном файле /etc/systemd/resolved.conf была включена следующая настройка:

    [Resolve]
    MulticastDNS=yes
  2. Настройка На Уровне Интерфейса:
    Поскольку настройки в /run/systemd/network/ временные, создайте перманентный файл для mDNS. Сделайте следующее:

    • Определите главный файл конфигурации сети, который у вас сейчас загружен:
      $ ls /run/systemd/network
    • Создайте директорию для переопределения конфигурации:
      $ sudo mkdir /etc/systemd/network/10-netplan-enp3s0.network.d
    • Создайте файл: /etc/systemd/network/10-netplan-enp3s0.network.d/override.conf и добавьте следующее:
      [Network]
      MulticastDNS=yes
  3. Перезапуск Sервисов:
    После внесения изменений перезагрузите ваши сервисы или сам сервер для применения конфигурации:

    $ sudo systemctl restart systemd-resolved

    Или перезагрузите систему:

    $ sudo reboot
  4. Проверка После Перезагрузки:
    После перезагрузки повторно выполните команду проверки mDNS:

    $ resolvectl mdns

    Убедитесь, что для интерфейса enp3s0 отображается статус yes.

Заключение

Применение данных шагов поможет вам восстановить работоспособность Multicast DNS в вашей домашней сети. Следите за возможными конфликтами с запущенными сервисами, такими как ваш контейнер Home Assistant, который также может пытаться использовать mDNS. Устранение этих конфликтов обеспечит стабильный доступ к вашему серверу по имени. Если проблема сохранится, проведите более глубокую отладку сетевых настроек и просмотрите соответствующие логи systemd для выявления дополнительных источников неполадок.

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

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