Вопрос или проблема
У меня есть домашний сервер, который доступен по адресу 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
. Давайте разберемся в причинах и возможных решениях данной проблемы.
Анализ Проблемы
-
Настройки Сетевого Интерфейса: У вас есть два сетевых адаптера:
enp2s0
иenp3s0
. Адаптерenp3s0
активен и успешно получает IP-адрес (192.168.178.94/24). Однако настройки mDNS дляenp3s0
неактивны, что видно из вывода командыresolvectl mdns
— Multicast DNS для этого интерфейса отключен. -
Конфигурация Systemd-resolved: Вы также упомянули, что
systemd-resolved
сообщает о наличии другого mDNS-ресурсодателя, когда вы запускаете ваш контейнер Home Assistant. Это может вызвать конфликт, поскольку несколько сервисов не могут одновременно обрабатывать mDNS-запросы. -
Проблемы с Перезаписью Конфигурации: Вы создали временный файл в
/run/systemd/network
, который не сохраняется после перезагрузки. Это еще одна причина, по которой ваш сервер может не видетьhomeserver.local
после перезагрузки.
Рекомендованные Решения
-
Глобальная Настройка mDNS:
Проверьте, чтобы в конфигурационном файле/etc/systemd/resolved.conf
была включена следующая настройка:[Resolve] MulticastDNS=yes
-
Настройка На Уровне Интерфейса:
Поскольку настройки в/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
- Определите главный файл конфигурации сети, который у вас сейчас загружен:
-
Перезапуск Sервисов:
После внесения изменений перезагрузите ваши сервисы или сам сервер для применения конфигурации:$ sudo systemctl restart systemd-resolved
Или перезагрузите систему:
$ sudo reboot
-
Проверка После Перезагрузки:
После перезагрузки повторно выполните команду проверки mDNS:$ resolvectl mdns
Убедитесь, что для интерфейса
enp3s0
отображается статусyes
.
Заключение
Применение данных шагов поможет вам восстановить работоспособность Multicast DNS в вашей домашней сети. Следите за возможными конфликтами с запущенными сервисами, такими как ваш контейнер Home Assistant, который также может пытаться использовать mDNS. Устранение этих конфликтов обеспечит стабильный доступ к вашему серверу по имени. Если проблема сохранится, проведите более глубокую отладку сетевых настроек и просмотрите соответствующие логи systemd
для выявления дополнительных источников неполадок.