Avahi (Русский)

Эта статья или раздел нуждается в
переводе
Примечания:
Section order does not match the English page, although most of the content still seems to be there. (обсуждение:
Talk:Avahi (Русский)#
)
Из
Wikipedia:Avahi (software)
:
Avahi
— система, производящая анализ локальной сети на предмет выявления различных сервисов. К примеру, вы можете подключить ноутбук к локальной сети и сразу получить информацию об имеющихся принтерах, разделяемых ресурсах, сервисах обмена сообщениями и прочих услугах. Подобная технология существует в Mac OS X (Rendezvous, Bonjour) и показала себя с лучшей стороны. Avahi во многом базируется на реализации протокола mDNS — flexmdns, которая в настоящий момент заброшена; все силы переключены на разработку нового продукта.
Установка
Установите
пакет
avahi
.
Вы можете управлять демоном Avahi
avahi-daemon.service
используя systemd
.
Примечание
systemd-resolved
имеет встроенную службу mDNS; перед использованием Avahi обязательно отключите широковещательный DNS из systemd-resolved (см.
resolved.conf(5)
) или же полностью
отключите
systemd-resolved.service
.
Настройка
Получение IP адреса (IPv4LL)
При использовании dhcpcd
This article or section is a candidate for merging with
dhcpcd
.
Notes:
should be merged into the main page (Discuss in
Talk:Avahi (Русский)
)
dhcpcd
-клиент пытается получить IPv4LL-адрес, если ему не удалось получить его через DHCP. По умолчанию эта опция отключена. Чтобы включить ее, зaкомментируйте строку noipv4ll:
/etc/dhcpcd.conf
...
#noipv4ll
...
Или запустите
avahi-autoipd
:
# avahi-autoipd -D
При использовании NetworkManager
При использовании NetworkManager, следует добавить альтернативную конфигурацию для получения IPv4LL-адреса, которая задействовалась бы, если не удалось получить IP через DHCP.
# nmcli connection add type ethernet ifname enp0s3 con-name enp0s3-auto
# nmcli connection modify enp0s3-auto connection.autoconnect-priority 100
# nmcli connection modify enp0s3-auto connection.autoconnect-retries 2 # reduce DHCP retries [since NM v1.6]
# nmcli connection modify enp0s3-auto ipv4.dhcp-timeout 3 # reduce timeout time for each DHCP probe [since NM v1.2]
# nmcli connection add type ethernet ifname enp0s3 con-name enp0s3-ll
# nmcli connection modify enp0s3-ll connection.autoconnect-priority 50 ipv4.method link-local
При использовании systemd-networkd
При использовании
systemd-networkd
, следует добавить в
конфигурационный файл
вида "/etc/systemd/network/wired.network" в раздел
Network
параметр для получения IPv4LL-адреса, в случае, если не удалось получить IP через DHCP:
LinkLocalAddressing=yes
Сопоставление имён хостов (DNS)
Avahi выполняет сопоставление имён хостов из local, имеющих вид "<имя хоста>.local". Для включения, установите пакет
nss-mdns
и
запустите/включите
avahi-daemon.service
.
Примечание
Судя по опыту, сопоставление имён из local работает по умолчанию, а вот для нестандартного доменного имени верхнего уровня, действительно нужно ставить nss-mdns и вносить соответствующие правки в конфиг avahi:
domain-name=<имя домена>
(например, alocal) и
enable-wide-area=no
.
Затем отредактируйте файл
/etc/nsswitch.conf
, в котором измените строку
hosts
, чтобы она включала
mdns_minimal [NOTFOUND=return]
перед
resolve
и
dns
:
hosts: mymachines
mdns_minimal [NOTFOUND=return]
resolve [!UNAVAIL=return] files myhostname dns
Примечание
Если у вас возникают сбои при разрешении
.local
хостов (или вы не хотите использовать IPv6), попробуйте использовать
mdns4_minimal
и
mdns4
вместо
mdns_minimal
и
mdns
соответственно.
Приведенная выше строка делает
nss-mdns
авторитетным для домена
.local
, если только ваш одноадресный DNS-сервер не отвечает на запросы
SOA
для имени верхнего уровня
local
, или если запрос содержит более двух меток. Смотрите
nss-mdns
примечания по активации
.
systemd-resolved
отвечает на эти запросы, даже если поддержка mDNS отключена. Смотрите
#systemd-resolved препятствует работе nss-mdns
.
Больше информации о конфигурировании nss можно найти в
nss-mymachines(8)
и
Avahi docs
.
Конфигурирование mDNS для произвольного домена верхнего уровня (TLD)
Модуль
mdns_minimal
обрабатывает запросы только для TLD
.local
. Обратите внимание на
[NOTFOUND=return]
, который указывает, что если
mdns_minimal
не может найти
.local
, он не будет продолжать поиск в
dns
,
myhostname
и т.д.
В случае, если вы хотите, чтобы Avahi поддерживал другие TLD, вы должны:
заменить
mdns_minimal [NOTFOUND=return]
на
mdns
(существуют модули только для IPv4 и только для IPv6
mdns[46](_minimal)
);
настроить в
/etc/avahi/avahi-daemon.conf
выбранное
domain-name
;
внести пользовательские TLD, используемые в Avahi, в белый список в
/etc/mdns.allow
.
Межсетевой экран
Обязательно откройте UDP-порт
5353
, если вы используете
брандмауэр
.
Использование
Утилиты обнаружения
Avahi включает в себя несколько утилит, которые помогут вам обнаружить сервисы, запущенные в сети. Например, запустите это, чтобы обнаружить сервисы в вашей сети:
$ avahi-browse --all --ignore-local --resolve --terminate
Если вы просто хотите выполнить запрос mDNS для преобразования имени хоста .local в IP-адрес (аналогично
ig
или
slookup
), используйте:
$ avahi-resolve-host-name
some-host-name
.local
Обратите внимание, что команда
getent host
может выполнять поиск как по DNS, так и по mDNS.
Avahi Zeroconf Browser
avahi-discover
отображает различные сервисы в вашей сети. Обратите внимание, что для этого нужны необязательные зависимости Avahi
gtk3
,
python-dbus
и
python-gobject
. Вы также можете просматривать SSH-серверы и VNC-серверы, используя соответственно
bssh
и
bvnc
.
Добавление сервисов
Avahi оповещает о сервисах, указанных в файлах
*.service
, которых находятся в
/etc/avahi/services
. Файлы в этом каталоге должны быть доступны для чтения пользователю/группе
avahi
.
Если вы хотите оповещать о сервисе, для которого нет файла
*.service
, очень легко создать свой собственный.
В качестве примера, допустим, вы хотите оповещать о присутствии на своём компьютере сервиса quote of the day (QOTD), работающего по
RFC:865
на TCP-порту
17
.
Первое, что нужно сделать, это определить
<type>
.
avahi.service(5)
указывает, что тип должен быть "типом службы DNS-SD для этой службы, например, '_http._tcp'". Поскольку
Реестр DNS-SD был объединен с реестром FIANNA в 2010 году
, мы ищем название службы в
Реестре IANA
или в файле
/etc/services
. Указанное там имя службы -
qotd
. Поскольку мы запускаем QOTD по протоколу tcp, теперь мы знаем, что сервис - это
_qotd._tcp
, а порт (для IANA и RFC 865) -
17
.
Соответствующий файл сервиса:
qotd.service
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>

  <name replace-wildcards="yes">%h</name>

  <service>
    <type>_qotd._tcp</type>
    <port>17</port>
  </service>

</service-group>
Для более сложных сценариев, таких как оповещение о сервисах, работающие на другом сервере, подтипах DNS и т.д., обратитесь к
avahi.service(5)
.
Имейте в виду, что Avahi не поддерживает произвольные строки в поле <type>, вы можете задавать только значения, присутствующие в
перечень сервисов Avahi
. Если вы хотите зарегистрировать что-то своё, вам, скорее всего, придется отредактировать перечень, создать обновленную версию ПО и установить его на своих машинах.
SSH
Avahi поставляется с примером служебного файла для оповещения о доступности SSH-сервера. Чтобы включить его:
# cp /usr/share/doc/avahi/ssh.service /etc/avahi/services/
Общий доступ к файлам
NFS
Если у вас настроен общий доступ с использованием
NFS
, вы можете использовать Avahi для автомонтирования в браузерах с поддержкой Zeroconf (таких как Konqueror на KDE и Finder на macOS) или файловых менеджерах, таких как
GNOME/Files
.
Создайте файл
.service
в
/etc/avahi/services
со следующим содержимым:
/etc/avahi/services/nfs_Zephyrus_Music.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">NFS Music Share on %h</name>
  <service>
    <type>_nfs._tcp</type>
    <port>2049</port>
    <txt-record>path=/data/shared/Music</txt-record>
  </service>
</service-group>
Порт указан правильно, если у вас есть
insecure
как опция в вашем
/etc/exports
; в противном случае его необходимо изменить (учтите, что
insecure
необходим для клиентов с macOS). 'path' - это путь к вашему 'export' или его подкаталогу.
По какой-то причине функция автоматического монтирования была удалена из Leopard, однако
доступен соответствующий скрипт
. См.
этот пост
.
Samba
Если демон Avahi запущен как на сервере, так и на клиенте, файловый менеджер на клиенте автоматически найдёт сервер.
Vsftpd
Вы также можете автоматически обнаруживать обычные FTP-серверы, такие как
vsftpd
. Установите пакет
vsftpd
и измените настройки vsftpd в соответствии с вашими личными предпочтениями (смотрите
эту тему на ubuntuforums.org
или
vsftpd.conf(5)
).
Создайте файл
.service
в
/etc/avahi/services
со следующим содержимым:
/etc/avahi/services/ftp.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name>FTP file sharing</name>
  <service>
    <type>_ftp._tcp</type>
    <port>21</port>
  </service>
</service-group>
Теперь Avahi должен оповещать о FTP-сервере, и вы сможете найти FTP-сервер с помощью файлового менеджера на другом компьютере в вашей сети. Возможно, вам потребуется включить
#Сопоставление имён хостов (DNS)
на клиенте.
Мессенджеры, поддерживающие Link-Local (Bonjour/Zeroconf)
Avahi можно использовать для поддержки протокола Bonjour в Linux. Cписок клиентов, поддерживающих протокол Bonjour можно посмотреть в
Сравнение клиентов обмена мгновенными сообщениями
или
Клиенты обмена мгновенными сообщениями
.
Устранение ошибок
К имени хоста добавляются инкрементирующиеся числа
Это
известная ошибка
, вызванная состоянием гонки имен хостов. Одним из возможных обходных путей является
отключение IPv6
, чтобы попытаться предотвратить состояние гонки. Если присутствует несколько интерфейсов
используйте allow-interfaces
, чтобы ограничить Avahi одним интерфейсом. Другим возможным обходным решением является
отключить кэш
, чтобы вообще запретить Avahi проверять наличие конфликтов имен хостов, но это не позволит Avahi выполнять поиск.
systemd-resolved препятствует работе nss-mdns
nss-mdns
работает только в том случае, если DNS-сервер, указанный в
/etc/resolv.conf
, возвращает
NXDOMAIN
на запросы SOA для "локального" домена.
[1]
Прежде всего, проверьте отвечает ли ваш DNS-сервер, после настройки, на запрос SOA для домена "local" именно "
NXDOMAIN
". Например:
$ host -t SOA local
Примечание
Если
host
нет в системе, её можно добавить, установив пакет
bind
.
Если DNS-сервер отвечает "
NXDOMAIN
", вам не нужно выполнять приведенные ниже действия.
Avahi должен иметь возможность нормально находить ресурсы в сети, даже если используется
systemd-resolved
.
В более старых версиях
systemd-resolved
глобальная настройка "
MulticastDNS=no
" в
resolved.conf(5)
приводила к кодам ответа, несовместимым с Avahi, для домена "local". Это приводило к тому, что Avahi не смог правильно найти ресурсы (принтеры). См.
системная проблема 21659
.
Однако, если приведенный выше запрос DNS не возвращает "
NXDOMAIN
" для домена "local", вы можете использовать полный
mdns
-nss модуль вместо
mdns_minimal
и создать
/etc/mdns.allow
, где разрешить доступ только к "локальному" домену. Например:
/etc/nsswitch.conf
hosts: mymachines
mdns [NOTFOUND=return]
resolve [!UNAVAIL=return] files myhostname dns
/etc/mdns.allow
.local.
.local
Примечание
Приведенное выше решение нарушит обратный поиск в сетевых утилитах, таких как
mtr
и
traceroute
. Эти приложения попытаются выполнить обратный поиск через Avahi, который завершится тайм-аутом вместо перехода к другим службам DNS. Это похоже на
Ошибка Debian 433943
, где, к сожалению, рекомендуется использовать
mdns_minimal
вместо
mdns
.
ECONNREFUSED (Connection refused) на сокете avahi
Если ваш Avahi запускается и работает корректно, но nss, похоже, не перенаправляет запросы в dns, это может быть вызвано зависанием сокета
/run/avahi-daemon/socket
. В этом можно убедиться, например, с помощью strace. Если это подтвердится, возможно, придется
перезапустить
как
avahi-daemon.service
, так и
avahi-daemon.socket
, чтобы заставить его работать корректно.
Смотри также
Avahi
- Official project website
Wikipedia:Avahi (software)
iTunes (includes Bonjour)
- Enable Zeroconf on Windows
http://www.zeroconf.org/