Как использовать .local-имена хостов в Arch Linux?

Если я использую Ubuntu или Linux Mint (единственные две версии, которые я пробовал и знаю, что они работают наверняка), я могу выполнить что-то подобное:

wayne@myhost$ ssh vasilipupkin@otherhost.local

И имя автоматически разрешается до IP-адреса otherhost в моей локальной сети.

Я решил попробовать другие дистрибутивы, и у меня на ноутбуке работает Arch, но если я пытаюсь использовать предыдущую команду, получаю Не удалось разрешить имя хоста otherhost.local: Имя или служба не известны.

Что нужно сделать, чтобы такое автоматическое разрешение имён происходило?

Собственный ответ Уэйна сейчас довольно старый. Arch с тех пор перешел на использование systemd вместо скриптов init. Страница Arch wiki по Avahi была обновлена и содержит информацию о том, почему нижеописанные шаги необходимы. Вкратце: Avahi — это zeroconf инструмент, что означает, что ему не требуется настройка для работы, как только он установлен на всех машинах в вашей локальной сети, но вы должны настроить остальное программное обеспечение так, чтобы оно фактически запрашивало информацию у Avahi.

Выполните эти действия от имени root или добавьте префикс sudo, где это уместно, в терминале и замените nano вашим любимым редактором.

  1. pacman -S avahi nss-mdns Устанавливает демон служб Avahi и резольвер Multicast DNS.
  2. nano /etc/nsswitch.conf Этот файл сообщает библиотеке C, как получать информацию об именах служб.
  3. Измените строку hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns на hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns, сохраните и выйдите. Служба mdns_minimal обрабатывает поиски .local и должна быть добавлена перед resolve и dns.
  4. systemctl start avahi-daemon Запускает службу Avahi вручную, так как мы уже загрузились.
  5. systemctl enable avahi-daemon Включает службу Avahi при загрузке.

Я только что выполнил эти шаги на ноутбуке с Arch, и не было необходимости перезапускать какие-либо другие службы или интерфейс Wi-Fi, чтобы другие машины могли обнаружить его в течение нескольких секунд, а также чтобы мой ноутбук обнаружил их службы.

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

Благодаря ссылке на статью Arch Wiki об Avahi от Ульриха Данжеля, вот что я сделал:

  1. Установите avahi и nss-mdns $ sudo pacman -S avahi nss-mdns
  2. Добавьте /etc/rc.d/avahi-daemon start в конец rc.local
  3. Поскольку я использую dhcpcd, в /etc/dhcpcd.conf я закомментировал строку noipv4ll.
  4. Я также выполнил $ sudo /usr/sbin/avahi-autopid -D wlan0. Поскольку я не люблю перезагружаться, я не уверен, был ли шаг 3 необходим.
  5. В /etc/nsswitch.conf я установил строку hosts: files mdns4_minimal dns mdns4.
  6. Затем я выполнил $ sudo /etc/rc.d/dbus restart для перезапуска dbus.

После этого выполнение ssh [email protected] просто заработало.

Я не думаю, что нам нужен avahi-daemon для использования .local. Вот что у меня в скрипте автозагрузки. Это гораздо проще по сравнению с методом Arch Wiki.

systemctl enable avahi-daemonavahi-set-host-name $(hostname)systemctl disable avahi-daemon

Другие ответы кажутся немного устаревшими, systemd-resolved теперь имеет поддержку mdns, и вам больше не нужен Avahi.

Однако есть одна оговорка. Если вы используете systemd-networkd, вам нужно включить mdns для каждого подключения. Вот моя текущая конфигурация Ethernet после того, как я выяснил это:

[root@bruno-desktop ~]# cat /etc/systemd/network/20-wired.network[Match]Name=enp6s0[Link]RequiredForOnline=routable[Network]DHCP=yesMulticastDNS=yes

PS.: Я использовал iwl ранее вместо systemd-networkd, и адреса .local автоматически разрешались systemd-resolved, и поэтому я был несколько удивлён, когда разрешение адресов .local перестало работать после перехода на systemd-networkd.

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

Чтобы использовать .local имена хостов в Arch Linux, необходимо настроить систему для поддержки Multicast DNS (mDNS) через инструменты, такие как Avahi или systemd-resolved. На других дистрибутивах, таких как Ubuntu или Linux Mint, такая функциональность, как правило, работает «из коробки», но в Arch Linux требуется дополнительная настройка. Далее я подробно объясню теоретическую часть, приведу пример выполнения настроек, а затем покажу их применение на практике.

Теория

MDNS (Multicast DNS) — это протокол, основанный на DNS, который позволяет обнаруживать устройства в локальной сети без необходимости в централизованном DNS-сервере. Это важно для среды, где устройства часто подключаются и отключаются, такие как домашняя или офисная сеть.

Avahi

Avahi — это реализация Zeroconf, которая позволяет устройствам в локальной сети находить друг друга без предварительной настройки. Avahi работает путем объявления и обнаружения служб в рамках локальной сети с использованием mDNS.

systemd-resolved

Системный компонент systemd-resolved также поддерживает mDNS и может использоваться для той же цели, что и Avahi. Однако он идет более интегрированно с systemd и может быть более предпочтительным выбором, если вы используете systemd-networkd для управления сетевыми интерфейсами.

Пример

Установка и настройка Avahi:

  1. Установка пакетов:sudo pacman -S avahi nss-mdns

    Здесь устанавливается служба Avahi и библиотека для поддержки mDNS.

  2. Настройка nsswitch.conf:Откройте файл /etc/nsswitch.conf в вашем любимом текстовом редакторе (например, nano):

    sudo nano /etc/nsswitch.conf

    Найдите строку, начинающуюся с hosts:, и замените ее на следующее:

    hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns

    Это указывает системе использовать mDNS для разрешения имен .local перед обращением к DNS.

  3. Запуск и включение Avahi:Запустите службу Avahi:

    sudo systemctl start avahi-daemon

    Включите службу для автоматического запуска при загрузке:

    sudo systemctl enable avahi-daemon

Настройка systemd-resolved с systemd-networkd:

Если вы предпочитаете использовать systemd для управления сетями и именами хостов, выполните следующие шаги:

  1. Включение MulticastDNS в конфигурации сети:Создайте или отредактируйте конфигурацию для вашего сетевого интерфейса, например:

    sudo nano /etc/systemd/network/20-wired.network

    Заполните файл следующим образом:

    [Match]Name=your_interface_name[Network]DHCP=yesMulticastDNS=yes

    Замените your_interface_name на имя вашего интерфейса, например enp6s0 или wlan0.

  2. Перезапуск служб:Перезагрузите службы для применения изменений:

    sudo systemctl restart systemd-networkdsudo systemctl restart systemd-resolved

Убедитесь, что systemd-resolved активен:

sudo systemctl enable systemd-resolvedsudo systemctl start systemd-resolved

После выполнения этих настроек, ваша система Arch Linux должна поддерживать разрешение .local имен хостов, аналогично Ubuntu или Linux Mint. Теперь вы можете использовать ssh или другие сетевые программы для подключения к устройствам в локальной сети по их именам .local, например: ssh [email protected].

Применение

Настройка использования .local хостов имеет несколько важных преимуществ в вашей ежедневной работе с Arch Linux:

  1. Упрощенное подключение устройств: Вы сможете легко подключаться к другим устройствам в вашей локальной сети без необходимости помнить их IP-адреса или выполнять дополнительные конфигурации.
  2. Упрощенная автоматизация: Скрипты и автоматизация которые используют устройства в локальной сети могут использовать .local имена, что упрощает процесс написания и поддержки таких скриптов.
  3. Совместная работа с другими системами: Если в вашей сети есть устройства, уже настроенные для работы с mDNS, вы сможете без проблем интегрироваться с ними.

Эти шаги и понимание того, как работает mDNS в Arch Linux, позволят вам эффективно использовать .local имена хостов и улучшать работу сети.