Проблемы зоны .local в современных Linux дистрибутивах

    Многие интернет провайдеры предоставляют для своих абонентов такой сервис, как торрент-ретрекер. Некоторые торрент-трекеры (в том числе и rutracker.org) в свои торрент-файлы добавляют информацию о таком таком универсальном ретрекер как retracker.local. Но в современных дистрибутивах (таких как Ubuntu, openSUSE и т.д.) этот адрес не резолвится правильно.

    Проблема заключается в использовании сервиса avahi для анонсирования ресурсов компьютера в локальной сети, так как для этих целей используется зона .local. Чтобы решить эту проблему не обязательно избавляться от avahi. Достаточно указать, что если не удается найти поддомен, спросить об этом dns.

    Для этого под рутом открываем файл /etc/nsswitch.conf и ищем в нем строчку, отвечающую за хосты.
    В openSUSE 11.3 она выглядит так:
    hosts: files mdns4_minimal [NOTFOUND=return] dns

    В Ubuntu 10.04 она выглядит так:
    hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4

    Все что нам надо сделать, это избавиться от опции [NOTFOUND=return], приведя строчку к виду:
    openSUSE 11.3
    hosts: files mdns4_minimal dns

    Ubuntu 10.04
    hosts: files mdns4_minimal dns mdns4

    Перезапускаем avahi-daemon и наслаждаемся совместной работой avahi и ретрекера (или других сервисов в зоне .local) вашего провайдера.

    Опубликовано по просьбе и от имени юзера vovochka404
    Share post

    Similar posts

    Comments 42

      +5
      Благодарю!
      • UFO just landed and posted this here
          +3
          Я avahi вообще убрал, он не нужен. А ретрекер прописал жестко в хостах и все дела.
            +11
            Данное решение лишает части перспективных плюшек — это раз, а во вторых, прописывать что-либо жестко в hosts — какое-то сомнительное решение.
              +2
              > прописывать что-либо жестко в hosts — какое-то сомнительное решение.
              Не соглашусь с Вами. Нормальное решение. Тем более, что hosts, в общем-то, для этого и существует.
                +12
                У нас провайдер порой меняет адреса своих сервисов.
                Мне лень следить за этим. Тем более что именно для этого и существует dns ;-)
                  –1
                  Ну у меня провайдер сильно не изголяется, мне хватает. А вообще я откуда можно, вырезаю avahi и ipv6. Например, собранный mplayer c inet6 очень долго резолвит нужный адрес.
                    +1
                    У вас неправильно настроен резолвер или у провайдера DNS серверы кривые. Зря выпиливаете, через год-два будете впиливать обратно.
              0
              я его тоже убрал он ещё на 4-м дебиане подвешивал загрузку системы на пару минут, а так dnsmasq без проблем все резолвит и лишних вопросов не задает, самое то для домашнего сервака.
              +3
              серьезная проблема, сталкивался. Только сталкивался, если не ошибаюсь
              с таким в puppet-e под убунтой. на все машинках нсссвич конфигурировать не хотелось, в итоге перевели
              домен.локал в.лан (дхцп). На етом и порешили.

              Довольно веселые грабли )
                –12
                Avahi не нужен.
                  +1
                  Э… А как запустить демон Avahi то? А то он ругается на этот retracker.local и не запускается
                    +3
                    Вы бы хоть поделились выводм консоли, логами, названием дистрибутива…
                    А то, знаете ли, опробовано на двух дистрибутивах, проблем нет.
                    +3
                    осталось только найти провайдера с ретрекером…
                      +2
                      retracker.local/ — работает
                      А у вас? =)
                        +2
                        — подними сам
                        — попроси провайдера чтоб прописали твой ip
                        — получай благодарности от юзеров

                        я так сделал, все довольны :)
                          0
                          У нас заблокирован обмен трафиком между юзерами, единственный вариант, который возможно (sic! не проверял, остальные три проверял — не пашут, как всегда аргументируют «по просьбам трудящихся», чтобы вирусы в локалке не ползали) работает — два юзера с белыми IP, то есть поднимать публичные сервисы по большому счёту только можно.
                            0
                            > У нас заблокирован обмен трафиком между юзерами

                            Значит и ретрекер вам никчему.
                            При таком запрете, даже если у вас в локалке будет битторрент-ретрекер, и BT-клиенты через него смогут находить пиров в локалке по внутрилокальным адресам, то обмен самим контентом между пирами в локалке по протоколу bittorrent будет невозможен (т.к. обмен трафиком между клиентами по вашим словам запрещён).
                              0
                              Я понимаю, я к тому, что совет «подними сам… все довольны» не является универсальным, а сильно зависит от провайдера
                              0
                              В принципе, если трафик не заблокирован, то и без ретрекера работает local peer discovery
                                0
                                Дальше вашего роутера local peer discovery работать не будет, увы.

                                До тех пор, пока везде не будет ipv6, от ретрекеров мы никуда не денемся.
                          +3
                          да что же вы обманываете!

                          убунта при запуске проверяет, есть ли юникастовая зона локал, и если она есть, то авахи не стартует.

                          кстати, использование авахи — тема для отдельного поста
                            +4
                            > убунта при запуске проверяет, есть ли юникастовая зона локал, и если она есть, то авахи не стартует.

                            Значит вы в принципе не испытываете подобной проблемы. ;-)
                            А вот как запустить в вашем случае avahi совместно с .local — это уже немного другая проблема и другая статья ;-)
                              +2
                              >Значит вы в принципе не испытываете подобной проблемы

                              такой проблемы в дефолтной установке убунте нет, и я тут вообще не при чем, у меня может вообще убунты нет. твикеры, блин.

                              чтобы запустить авахи при наличии юникастовой зоны local, достаточно отредактировать конфиг инитскрипта:

                              % cat /etc/default/avahi-daemon
                              AVAHI_DAEMON_DETECT_LOCAL=0
                                0
                                а у меня нет такого файла ((
                                  +1
                                  так создайте
                                    0
                                    хм, вилл трай
                              0
                              > убунта при запуске проверяет, есть ли юникастовая зона локал, и если она есть, то авахи не стартует.

                              Значит вы в принципе не испытываете подобной проблемы. ;-)
                              А вот как запустить в вашем случае avahi совместно с .local — это уже немного другая проблема и другая статья ;-)
                                0
                                кстати, использование авахи — тема для отдельного поста
                                С нетерпением жду. Стали его пихать всюду по дефолту, а что мне с этого — непонятно, по-этоу выключаю, а вдруг можно действительно какие-то практические удобства с него поиметь… Надо правильно настроить и понять как пользоваться. Пока нашёл вот это, тут написано хотя бы в принципе что это.
                              +22
                              Такая «проблема» есть не только в Linux-дистрибутивах.
                              На самом деле это заложено в самом наборе протоколов Zeroconf и описано в частности в RFC 3927.
                              Соответственно и в Avahi (реализация протоколов Zeroconf в Linux/BSD), и в Bonjour (реализация протоколов Zeroconf в Apple MacOSX), которые придерживаются RFC 3927, это работает примерно одинаково.

                              В Zeroconf (в реализациях Avahi/Bonjour) зона .local используется по умолчанию только для link-local адресов (IPv4LL: 169.254.0.0/16, IPv6LL: FE80::/10). И адреса хостов из этой зоны по умолчанию ресолвятся не через обычный DNS, а по протоколу LLMNR (Link Local Multicast Name Resolution), который иногда также называют mDNS (Multicast DNS), т.е. мультикастовыми запросами по сети (UDP-пакеты на порт 5353 по адресу 224.0.0.251).

                              Поэтому машины с MacOSX/Linux/BSD по умолчанию не могут ресолвить имена из доменной зоны .local через DNS в локальной сети, т.к. пытаются это сделать по другому протоколу.

                              И держать DNS-зону .local на DNS-серверах по-хорошему не нужно, это дурной тон, нарушающий принятые стандарты. Поэтому предложить для ретрекеров имя retracker.local — это была плохая идея с точки зрения следования стандартам. Т.е. этим сами создали себе проблемы, которые потом приходится решать всякими костылями. Лучше было придумать для этого (для ретрекеров в частности) любую другую DNS-зону, но не уже зарезервированную в Zeroconf зону .local.

                              А вот Microsoft не слишком-то следует RFC 3927, поэтому у майкрософтовской реализации протокола Zeroconf — APIPA (Automatic Private IP Addressing) такой проблемы с разрешением имён хостов из зоны .local через DNS, насколько я знаю, нет.
                                +1
                                >В Zeroconf (в реализациях Avahi/Bonjour) зона .local используется по умолчанию только для link-local адресов (IPv4LL: 169.254.0.0/16, IPv6LL: FE80::/10)

                                неправда ваша. авахи анонсирует через mDNS любые адреса:

                                % avahi-resolve-address -n $(hostname).local
                                hakobune.local 192.168.1.106

                                за счет этого, в локальной сети, состоящей из убунтовых машин, можно адресоваться по имени машины без дополнительных настроек и без юникастового dns-сервера
                                  –1
                                  > неправда ваша. авахи анонсирует через mDNS любые адреса:

                                  Да вообще через dns-sd можно аннонсировать любые адреса, в принципе то:
                                  % ping Thunderlight.local
                                  PING thunderlight.local (192.168.7.112): 56 data bytes

                                  ^^^ это был резолв айпада макбуком (по сути – и там и там bonjour). Насколько я помню, zeroconf и dns-sd здесь просто неплохо используют возможности друг друга.
                                +1
                                Элегантно!
                                • UFO just landed and posted this here
                                    0
                                    Этот вариант в принципе исключает mdns. Т.е. zeroconf, как таковой не используется в резолвинге зон.
                                    • UFO just landed and posted this here
                                    –1
                                    Недавно столкнулся с аналогичной проблемой на debian. Решил просто вырубить avahi-daemon.

                                    За представленное в статье решение автору большое спасибо!
                                      –1
                                      в ubunt server edition у меня изначально так.
                                        0
                                        > Перезапускаем avahi-daemon…

                                        Вообще-то после редактирования /etc/nsswitch.conf перезапускать avahi-daemon не требуется.

                                        Это же не файл конфигурации avahi, это конфиг-файл «переключалки» системных баз данных и сервисов имён.
                                        И применительно к разрешениям имён хостов этот надпротокольный переключатель просто определяет, через какие механизмы (файл hosts, протокол mDNS, запрос к DNS-серверу) и в каком порядке следует разрешать имена хостов. И обрабатывается этот выбор при каждом новом разрешении имён согласно данному файлу.
                                          0
                                          Для пришедших через поисковики.
                                          В современных linux дистрибутивах может использоваться dnsmasq и можно воспользоваться его директивой server, чтобы явно указать что retracker.local нужно резолвить определённым сервером DNS.

                                          Команда echo «server=/retracker.local/IP_адрес_DNS_провайдера_или_вашего_роутера» | sudo tee /etc/NetworkManager/dnsmasq.d/retracker.conf поможет сделать требуемое.
                                          vasilisc.com/tips_ubuntu#retracker

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