Как включить mDNS в Linux?

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

У меня есть 2 машины в одной сети. Машина 1 имеет хостнейм aaa и IP адрес 192.168.203.11, а машина 2 имеет хостнейм bbb и IP адрес 192.168.203.22.

Обе машины могут пинговать друг друга по IP адресу, например, ping 192.168.203.11, но они не могут пинговать друг друга по хостнейму, например, ping aaa (я получаю Name or service not known). Мне нужно использовать хостнеймы, потому что мне нужен TLS.

Обе машины работают с демоном avahi, и обе могут использовать, например, avahi-resolve -a 192.168.203.11 и avahi-resolve -n4 aaa для отображения mDNS хостнеймов друг друга.

Что мне нужно сделать, чтобы настроить mDNS в Linux?

Что я пробовал

Я спросил на stack overflow, и вопрос был закрыт, поэтому я спросил его более обще, и он был снова закрыт. Кто-то предложил мне спросить здесь.

  1. Я попробовал советы из (этого ответа и этого другого ответа) и добавил mdns4_minimal [NOTFOUND=return] на обеих системах.

  2. Я установил use-ipv6=no внутри /etc/avahi/avahi-daemon.conf на обеих системах. (См. этот комментарий)

  3. Я добавил .local. и .local в /etc/mdns.allow

  4. Я установил bind9 и включил сервис named-resolvconf.

Ни один из этих шагов не заставил mDNS работать.

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

Настройка mDNS (мультикастового DNS) в Linux может быть достаточно полезной для улучшения взаимодействия устройств в локальной сети без использования централизованных DNS-серверов. Ваша ситуация описывает классическую проблему, когда устройства видят друг друга по IP через ping, но не могут обнаружить по hostname с использованием mDNS. В данном ответе мы обсудим теорию mDNS, дам несколько примеров и рекомендаций для практического применения и устранения проблем.

Теория

mDNS позволяет устройствам в локальной сети сообщать свои имена и адреса без участия центрального DNS-сервера, используя протокол multicast. Этот протокол широко используется для простого подключения устройств в домашних и корпоративных сетях. Avahi — популярная реализация mDNS и интерфейса Zeroconf в Linux, которая автоматически управляет объявлениями о своем присутствии среди соседних устройств.

Типовая конфигурация

  1. Avahi Daemon: основной компонент, реализующий mDNS. Убедитесь, что демон Avahi установлен и запущен на обеих машинах.

  2. Правильная конфигурация NSS (Name Service Switch): необходимо, чтобы /etc/nsswitch.conf имел секцию hosts, в которой настроен корректный порядок разрешения имен, чтобы mDNS использовался до обращения к DNS серверам.

  3. Правила брандмауэра: mDNS использует порт 5353/UDP, который должен быть открыт для корректной работы.

Пример

Рассмотрим пример конфигурационного файла, который должен быть настроен на каждой из ваших машин (aaa и bbb).

  1. Убедитесь в наличии Avahi:

    sudo apt update
    sudo apt install avahi-daemon avahi-utils
  2. Проверьте конфигурацию /etc/nsswitch.conf:

    Эта строка должна выглядеть подобным образом:

    hosts: files mdns4_minimal [NOTFOUND=return] dns

    Это позволит системе использовать mDNS перед обращением к традиционным DNS-серверам.

  3. Настройка avahi-daemon.conf:

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

    [server]
    use-ipv6=no
  4. Правила для Firewall:

    Откройте порт 5353 UDP:

    sudo ufw allow in on <interface> to any port 5353 proto udp

    Замените <interface> на ваш сетевой интерфейс, например eth0 или wlan0.

Применение

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

ping aaa.local
ping bbb.local

Команда avahi-browse -r _services._dns-sd._udp также может помочь вам увидеть все объявленные сервисы в вашей сети, что подтвердит, что avahi работает правильно.

Устранение проблем

Несмотря на правильность вышеуказанных шагов, иногда можно столкнуться с проблемами:

  • Кэширование DNS: Убедитесь, что на вашей системе нет кэша, сохраняющего предыдущее разрешение на имена, которые не работали. Очистите кэш с помощью sudo systemd-resolve --flush-caches.

  • Конфликты с другими сервисами: Возможно, другие службы также использует порт 5353. Проверьте, не запущены ли другие приложения, конкурирующие за этот порт.

  • Проблемы аппаратного уровня: Старое оборудование или сетевые карты могут не поддерживать мультикаст корректно.

Если вышеизложенное не помогло и mDNS всё ещё не работает, попробуйте использовать системные логи, например, sudo journalctl -u avahi-daemon.service для диагностики работы Avahi.

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

Заключение

Настройка mDNS и Avahi в Linux может показаться сложной задачей, но следуя пошаговым инструкциям и используя правильные средства диагностики, можно успешно реализовать корректную работу именования в сети. Главное — обеспечить корректную работу Avahi и убедиться, что система имеет правильные разрешения имен, соответствующие вашим нуждам в локальной сети.

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

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