Hlavní navigace

Avahi: bez konfigurace na síť

16. 3. 2012
Doba čtení: 6 minut

Sdílet

Zařízení firmy Apple spolu komunikují v rámci jedné sítě, aniž museli uživatelé něco zdlouhavě nastavovat. Může za to zeroconf, které v sobě schovává DNS-SD a mDNS protokoly, kterými se jednotlivé počítače baví, aniž by se předtím znaly. Jde o zajímavý koncept, který najdeme i na Linuxu v implementaci Avahi.

Možná jste si někdy všimli, že vám na pozadí, kromě mnoha jiných procesů, běží avahi-daemon. Proces zdánlivě bez činnosti a člověka by mohlo napadnout, k čemu tam vlastně je a co se stane, když se odstraní? Pokud si myslíte, že váš systém může žít bez Avahi, máte s největší pravděpodobností pravdu a můžete ho klidně odinstalovat a přestat číst. Na druhou stranu, Avahi má svou funkci, moc se o ní nemluví a hlavně současné trendy ji moc nepřejí. Nicméně dokáže trochu usnadnit správu lokální sítě, třeba pokud si nepamatujete adresy svých strojů nebo chcete jednoduše komunikovat se členy rodiny či sdílet soubory.

Avahi je implementace tzv. zeroconf, což je podle Wikipedie technika, díky které se počítače na lokální síti sami domluví tak, aby mezi sebou mohli komunikovat. V praxi to pak funguje třeba tak, že si otevřete třeba svůj oblíbený správce souborů, kliknete na nějaká „místa v síti“ a zobrazí se vám všechny adresáře, které uživatelé ve vaší lokální síti sdílí. Podobně na tom může být vzdálený desktop, tiskárny, IM komunikace a třeba i přehrávání hudby, videa či vyhledávání web serverů. Zeroconf se má postarat o to, aby uživatel měl přístup k těmto službám, aniž by musel udělat něco víc než zapojit kabel nebo se připojit k WiFi.

Největší zastoupení zeroconf mají sítě s hardwarem od firmy Apple, která přinesla například protokoly mDNS/DNS-SD. Po serverové stránce je Linux na zeroconf připravený, Avahi se postará o adresu, povídá si s okolními počítači, umí rychle najít, co se na síti nachází a umožňuje uživateli zpřístupnit další služby. Ale zeroconf nestojí jen na dobře fungující serverové části, ale i té klientské. Pokud má mít zeroconf nějaký smysl, musím otevřít správce souborů a vidět sdílené adresáře nebo otevřít přehrávač a podívat se, co kdo na síti přehrává za hudbu a třeba se připojit. V tom je pravá síla zeroconf, připojit se a mít vše k dispozici.

Na čem zeroconf stojí

Ve světě Applu a Linuxu, resp. Avahi, se o tu nejdůležitější část fungování zeroconf stará mDNS (Multicast DNS) a DNS-SD (DNS Service Discovery). Protokol mDNS se od DNS moc neliší, používá také A/AAAA/SRV záznamy a největším rozdílem je způsob komunikace, která probíhá přes multicast. Když chce nějaký počítač zjistit IP na doméně „foo.local“, pošle na adresu 224.0.0.251 nebo FF02::FB v případě IPv6, dotaz, který přijde všem počítačům na lokální podsíti. Když toto jméno patří některému z nich, odpoví a adresa je na světě. Multicast dotazy lze rozesílat i mezi více podsítěmi, takže můžete mít třeba jinou podsíť na WiFi a jinou na kabel a pořád vám bude Avahi fungovat. Podmínkou je podpora na routeru.

Multicast DNS pochází přímo od Applu a stejně na tom je druhý důležitý protokol, a to DNS-SD. Každé zařízení, které má co na síti nabídnout, používá SRV, TXT a PTR záznamy. Když se začne zařízení shánět po službách na síti, rozešle dotazy na PTR záznamy a jednotlivé stanice vrátí, co mohou nabídnout. Výsledek je na zařízení zpracován a uživateli jsou nabídnuty možnosti. Avahi neposílá do sítě něco jako svůj stav nebo podobné věci, aniž by o to byl požádán. To znamená, že je Avahi nečinné, dokud není požádáno o informace. V kombinaci s tím, že je DNS protokol nenáročný na přenosy, můžeme o Avahi prohlásit, že váš počítač ani síť nezatěžuje žádným způsobem, kterým byste to mohli reálně poznat. Z tohoto pohledu není důvod ho ani dávat pryč.

V celém systému hraje roli funkční síť, což dnes není díky DHCP serveru i v hodinkách problém, ale i tak se může stát, že budete chtít komunikovat třeba v rámci nějaké AD-HOC sítě. V takovém případě se Avahi postará o to, abyste dostali tzv. link-local adresu. U IPv6 není co řešit, LL adresy jsou implementované v jádře a má je každé rozhraní, ať už se mu to líbí nebo ne. U IPv4 nic takového není a musí zasáhnout uživatelský prostor. Na Linuxu to je avahi-autoipd. Pokud běží, tak vaše rozhraní dostane adresu, se kterou bude moci komunikovat, aniž by v síti existoval nějaký DHCP server. Dále může LL adresu rozdávat daemon dhcpcd, ale to už má k zeroconf daleko.

Daemona avahi-autoipd spustíte pomocí:

# avahi-autoipd -D eth0 

Pokud už zařízení má nějakou fungující adresu, žádná se nepřidělí a daemon čeká. Pokud nemáte rádi řádku, NetworkManager umožňuje LL adresu rozhraní nakliknout.

První krůčky

Základem je mDNS a schopnost komunikace a tím musíme začít. S mDNS si linuxový resolver poradí po nainstalování knihovny libnss-mdns a úpravě souboru /etc/nsswitch­.conf. V něm z řádku:

hosts: files dns 

Udělejte řádek:

hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 

Pokud neuvedete číslo 4 za mdns, tak se použije jak IPv4, tak IPv6. Tohle je příklad z Ubuntu, kde by nemělo být potřeba cokoli měnit. Jiné distribuce nastavují resolver trochu jinak, třeba:

hosts: files mdns4_minimal dns mdns 

Pozor na sítě, kde by mohl dělat problémy router, který není s IPv6 kompatibilní ani vzdáleně, to znamená, že šestku nepropustí ani v rámci bridge. Tam by mohlo dělat mdns neplechu a je lepší použít mdns4. Pokud máte Ubuntu, nemusíte na nsswitch.conf vůbec sahat, protože je vše již nastavené. U ostatních distribucí si nejsem jistý, jak se balíčkovací systém staví k takovýmto úpravám. Také si dejte pozor na špatné nastavení, které může velmi zpomalit dotazování na DNS servery.

Avahi používá ve výchozím stavu doménu local a počítače v síti mají jméno .local. Takže když máte na síti počítač s hostname foo, zjistíte jeho adresu pomocí foo.local. Pro resolvování adres i jmen slouží nástroj avahi-resolve.

cx@bimbo:~$ avahi-resolve -n godie.local
godie.local     192.168.1.101
cx@bimbo:~$ avahi-resolve -a 192.168.1.101
192.168.1.101   godie.local 

Pokud máte rádi klikátka a navíc chcete zjistit, jaké služby máte na síti k dispozici, použijte avahi-discover.

Instalace

Schválně jsem přeskočil část věnující se instalaci a snažil se nejdříve vysvětlit, co to Avahi a zeroconf je. Pokud v systému Avahi nemáte, hledejte tyto balíčky (seznam je Ubuntu/Debiano centrický):

  • avahi-autoipd
  • avahi-daemon
  • avahi-utils

Přitom platí, že avahi-autoipd pravděpodobně nebudete potřebovat, bez avahi-daemon se neobejdete a avahi-utils se vám bude hodit, když budete potřebovat vyzkoušet funkčnost. Jiné distribuce nepoužívají stejné rozdělení a třeba Archlinux má všechno v balíčku Avahi. Fedora dělí ještě víc než Ubuntu/Debian:

  • avahi
  • avahi-autoipd
  • avahi-compat-libdns_sd
  • avahi-glib
  • avahi-gobject
  • avahi-tools
  • nss-mdns
  • nss-mdns.i?86

Podle wiki by se po instalaci na Fedoře měl upravit i soubor /etc/nsswitch­.conf.

CS24_early

Pokud je vše nainstalováno a avahi-daemon běží, měli byste být schopni se dopingnout na jiný počítač s Avahi. S Avahi přichází i nějaká ta konfigurace, která se nachází v souboru /etc/avahi/avahi-daemon.conf. Výchozí hodnoty by měly běžnému použití na síti vyhovovat. V opačném případě vás zatím odkážu na manuálovou stránku avahi-daemon.conf.

$ man avahi-daemon.conf 

Instalací bych tedy tento článek ukončil a určitě se k tématu ještě vrátíme. Avahi není jen o mDNS, to šťavnaté se schovává v DNS-SD.

Zdroje

Seriál: Avahi

Byl pro vás článek přínosný?

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.