Что такое Zeroconf и с чем его едят

    Я, как старый линуксоид, когда впервые установил Ubuntu и увидел незнакомое слово avahi, конечно же сразу посмотрел в google. Потыкался в несколько ссылок, увидел другие непонятные слова, типа zeroconf, multicast dns, bonjour. Сразу понял, что это какая то мутная технология от Apple и нафиг мне ненужная.

    Однако, с ростом локальной сети внутри моей квартиры, подумал, что неплохо бы было полюбопытствовать, как можно приспособить zeroconf, чтобы облегчить себе жизнь.

    Давайте разберемся с терминологией:
    1. Zeroconf — это протокол, разработанный Apple и призванный решать следующие проблемы:
      • выбор сетевого адреса для устройства;
      • нахождение компьютеров по имени;
      • обнаружение сервисов, например принтеров.
    2. Avahi — открытая и свободная реализация протокола zeroconf.
    3. Bonjour — open-source реализация протокола zeroconf от Apple.


    Для назначения IP-адресов устройствам, zeroconf использует RFC 3927. Стандарт описывает назначение, так называемых link-local адресов, из диапазона 169.254.0.0/16. Технология называется IPv4 Link-Local или IPv4LL.

    Для разрешения имен (name resolving) используется протокол Multicast DNS или сокращено mDNS. Он позволяет устройству выбрать имя в зоне .local. Работает это почти как обычный DNS, но с нюансами. Каждый компьютер хранит записи своей зоны (A, MX, SRV) сам и сам же обслуживает запросы к ним. Когда какой либо компьютер хочет узнать запись зоны, скажем определить IP-адрес по имени (получить запись A для заданной зоны), он обращается по multicast-адресу 224.0.0.251. Соответственно, запрос получают все компьютеры в локальной сети, а отвечает тот, кто хранит зону для интересующего нас имени.

    Для поиска и обнаружения сервисов используется протокол DNS based Service Discovery или DNS-SD. Для того, чтобы прорекламировать, какие сервисы доступны на устройстве, используются DNS-записи типа SRV, TXT, PTR.

    Как все это заставить работать на Linux? Гораздо проще, чем кажется. Разберем по шагам:
    1. Поставить пакеты avahi-daemon, avahi-autoipd, libnss-mdns. Если у вас стоит Ubuntu, то скорее всего эти пакеты уже установлены.
    2. Включить IPv4LL. Этот шаг совершенно не обязателен. Если у вас есть любой IP-адрес, который нормально маршрутизируется в локальной сети, то использовать IPv4LL не нужно и даже вредно, так как по стандарту, маршрутизатуры не должны форвардить пакеты с link-local адресами (169.254.*). Иными словами, пробросить интернет через NAT скорее всего не удастся (мне не удалось). Но если вы уж решились, то достаточно для сетевого интерфейса локальной сети, в файле /etc/network/interfaces поставить тип ipv4ll. Что-то типа такого:
      iface eth0 inet ipv4ll

      Далее можно сделать sudo invoke-rc.d networking restart или даже перезагрузиться (avahi-autoipd не будет устанавливать на интерфейсе адрес 169.254.*, если там уже есть другой IP-адрес, а он после sudo invoke-rc.d networking restart скорее всего никуда не исчезнет).
    3. Разрешить в брандмауэре прохождение UDP-пакетов через порт 5353 по адресу 224.0.0.251 (это нужно для нормально работы mDNS) на интерфейсах, смотрящих в локальную сеть.

    На этом настройку можно считать завершенной. Какие бонусы после этого вы получите? Перечисляю: все компьютеры получат имена в домене *.local, без лишних телодвижений с вашей стороны; jabber-клиенты Gajim или Empathy будут показывать всех собеседников в локальной сети; Rhythmbox будет расшаривать всю музыку; Ekiga позволит находить и звонить всем, у кого она запущена в локалке; PulseAudio сможет находить все опубликованные звуковые устройства в сети; ну и многое, многое другое. Вы можете ознакомится со списком программ, поддерживающих avahi.

    Несколько замечаний.
    1. Просмотреть анонсированные сервисы в сети можно командой avahi-browse --all. Она же будет показывать в realtime подключение и отключение этих сервисов.
    2. Если у вас стоит брандмауэр, то сервисы могут видеть друг друга, но не общаться, если закрыты нужные для них порты.
    3. При помощи демона avahi-dnsconfd можно клонировать /etc/resolv.conf на все компьютеры локальной сети.
    4. Непременно проголосуйте за идею внедрения связки NFS+Zeroconf в Gnome.
    Share post

    Comments 27

      +3
      Спасибо за отличную статью!
        +3
        > Bonjour — проприетарная реализация протокола zeroconf от Apple.

        Где вы там проприетарность увидели? Там Apache License…

        developer.apple.com/opensource/internet/bonjour.html
          0
          Вы правы, не заметил.
            +1
            Ну так поправьте в статье ;)
              0
              Поправил.
          0
          Всё бы хорошо, но наверное дома то не имеет особого смысла мутить.
          Сколько у вас устройств подключено?
            0
            Дома удобно находить ноутбуки гостей по имени. Кроме того DVCS Git (и вроде бы Mercurial тоже) умеет клонить репозитории по Bonjour, что иногда удобно при работе.

            Ну и если домосеть посторена на базе техники Apple – то Bonjour просто неоценим (расшаривание музыки, видео, etc.)
              0
              Я использую дома mDNS для назначения имен десктопу и ноутбуку.
                0
                Если у вас есть сетевой принтер или принт сервев, то скорее всего неявно вы уже используете Bonjour. Он встроен в большинство современных сетевых принтеров. iTunes, Medial Player используют похожие реализации.
                  0
                  нет не сетевой у меня принтер.
                  Думаю, что всё же это подойдёт больше для небольших локальных сетей человек так на 5-10, а у меня 3 устройства дома и мутить смысла особого не вижу )
                    0
                    Ну вам никто не навязывает. Для меня бонжур это просто удобная фишка которая позволяет не настраивать каждый раз копъютеры гостей. Стоит себе, есть не просит.
                0
                А что там получается, если смешать в одной сети машины с Ubuntu и Windows? Настраивать avahi надо на каждой из машин в сети?
                  0
                  Для виндов Apple предоставляет сборку Bonjour (по дефолту умеет шарить принтеры)
                  0
                  Ооо! Вот оно, решение наших проблем! Завтра буду на работе пробовать, пока Главный Админ в отпуске ;)
                    +6
                    Не забудьте взять отпуск с той недели, когда Админ возвращается.
                      0
                      Обязательно.
                    +3
                    у меня в офисе нашелся сетевой принтер HP через бонжур :) удобно. Захотел распечатать, настроеных принтеров нету, просматривая список принтеров макось его нашла и предложила сама поставить драйвера. удобно :)
                      0
                      avahi-browse не работает без установления avahi-tools, по крайней мере в Fedor'e
                        0
                        Для линуксов и WinXP есть такая утилитка snorp.net/pages/tangerine. Расшаривает музыку через DAAP (iTunes) и объявляет себя через Zeroconf. Правда не работает под вистой (и наверное семёркой). Пытался перекомпилировать (она на .net), но состояние исходников невесёлое. У меня музыка играла по сети с убунты на винде (плагин для WinAmp).
                          0
                          Ну чтобы разсшарить под виндой можно и iTunes воспользоваться? Кроме того ещё есть Nero Media Home или как он там называется и много других.
                          0
                          Автор, допиши пожалуйста, что на некоторых роутеров нужно разрешить широковещательные запросы (для WiFi они иногда запрещены). Я на D-Link 320 долго мучался :)
                            0
                            Может быть надо разрешить multicast-запросы, а не широковещательные?
                              0
                              Оу. Я думал это синонимы. В чём разница?
                                +1
                                Broadcast пакет рассылается всем хостам сети (с учетом сетевой маски), multicast пакет рассылается только группе хостов, которые слушают опеределенный multicast-адрес.
                            0
                            интересно, но как-то очень мало…
                            а продолжение будет?
                              0
                              Можете по-подробнее про расшаривание музыки в Rhythmbox? Пользователи других компьютеров в сети видят вашу музыку?
                                0
                                Только в локальной сети.

                              Only users with full accounts can post comments. Log in, please.