Avahi kasutamine Debian Lennyga
Sisukord
Sissejuhatus
Avahi http://avahi.org/ on vaba Apple Zeroconf http://en.wikipedia.org/wiki/Zeroconf spetsifikatsiooni implementatsioon, mille kasutamine on levinud vabades operatsioonisüsteemides ja mida märkimisväärselt tunnustab ka Apple ise.
Avahi kasutamise eesmärk on lihtsustada seadmete, eelkõige nö mobiilsete töökohaarvutite, võrku seadistamist ning teenuste leidmist võrgust. Tavaliselt peetakse võrgu all silmas kohtvõrku ja teenuste all nö lõppkasutajale olulisi teenuseid, nt võrgust printeri leidmine.
Avahi pakub sellist funktsionaalsust
- IPv4LL (IPv4 Link-Local) - võrku ühendatud arvutid nö automaatselt seadistavad ennast käima samasse võrku
- mDNS (multicast DNS) - nimede päri-ja pöördteisenduste lahendamine
- DNS-SD (DNS Service Discovery) - teenuste kohta info levitamine
Kusjuures tingimata ei pea kasutama kõiki loetletud komponente, nt võib vajadusel kasutada ainult viimaseid kahte.
Kui Avahit ei ole kavatsus otseselt ka kasutada, on kasulik olla sellega kursis, et olla nt teadlik võimalikest asjaomastest turvaprobleemidest ning mõista võrgus muidu anomaalsena näivaid nähtusi
- arvuti võrguseade muudab ip aadressi
- võrgus esineb nö imelik multiedastuse liiklus
- arvutid tutvustavad ja pakuvad teenuseid, mida nad ei peaks tutvustama ega pakkuma
Avahi on iseensest tuntud ka kui leemur ja tema nime hääldatakse kõlaliselt nagu mõnes eesti murdes öeldakse 'ära vaata' - 'ää vahi'.
Arvuti võrguühenduse seadistamine IPv4LL abil
Avahi abil sobib võrguühendust seadistada, kui võrgus puuduvad muud automaatsed võimalused nt DHCP server ja käsitsi mingil põhjusel on seda ebasobiv teha, nt nö ad-hoc võrku mitme arvuti automaatseks ühendamiseks. Arvutite võrguseadmete seadistamisega tegeleb Avahi IPv4LL komponent.
Tavaliselt ei kasutata avahi-autoipd http://avahi.org/wiki/AvahiAutoipd tarkvara iseseisvalt, vaid DHCP kliendi lisana, st teda kasutatakse kui DHCP server ei ole parasjagu kliendile kättesaadav.
avahi-autoipd omistab seadmetele aadresse nn local-link kasutuseks eraldatud vahemikust 169.254.0.0/16 (tundub, et see on see sama vahemik, millest kasutavad ka Windows operatsioonisüsteemid võrguseadmete aadresse, kui võrk on nö katki).
Tarkvara paigaldamiseks tuleb öelda
# apt-get install avahi-autoipd
Kui kasutada läbi DHCP kliendi, siis on eelduseks DCHP kliendi (nt pakett dhcp3-client) olemasolu ning /etc/network/interfaces peab sisaldab võrgukaardi sellist seadistust
auto eth0 iface eth0 inet dhcp
Tulemusena võrku ühendatud arvuti käivitamisel omandab võrguseade local-link aadressi, eth0 on füüsiline seade ja eth0:avahi vastav Avahi seade
eth0 Link encap:Ethernet HWaddr 70:01:68:01:01:51 inet6 addr: fe80::7201:68ff:fe01:151/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:10204 errors:0 dropped:0 overruns:0 frame:0 TX packets:933 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:716609 (699.8 KiB) TX bytes:194701 (190.1 KiB) eth0:avahi Link encap:Ethernet HWaddr 70:01:68:01:01:51 inet addr:169.254.184.10 Bcast:169.254.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Otseselt saab nt testimiseks käivitada avahi-autoipd selliselt, kuid eelnevalt tuleb ip aadress eemaldada vastavalt võrguseadmelt, nt ip programmi abil
# avahi-autoipd eth0 Found user 'avahi-autoipd' (UID 104) and group 'avahi-autoipd' (GID 109). Successfully called chroot(). Successfully dropped root privileges. Starting with address 169.254.184.10 Callout BIND, address 169.254.184.10 on interface eth0 Successfully claimed IP address 169.254.184.10
mDNS nimelahendus
Avahi mDNS komponent tegeleb nimelahendusega ja kasutab andmevahetuseks multiedastust (ingl. k. multicast), vaikimisi address 224.0.0.251 ja port 5353. Vaikimis moodustatakse nimed domeeni .local alla, nt loomaaed.local.
mDNS kasutavatel osalised arvutid on tavaliselt samaaegselt nii mDNS nö serverid kui ka kliendid.
mDNS server
Üle võrgu tulevatele mDNS päringutele vastab avahi-daemon, tarkvara paigaldamiseks tuleb öelda
# apt-get install avahi-daemon
Vaikimisi publitseeritakse võrku ainult arvuti enda olemasolu, st .local domeeni nime ja ip aadressi.
Avahi deemoni käivitamiseks tuleb öelda
# /etc/init.d/avahi-daemon start
Avahi deemonile vastab protsess
# ps aux | grep avahi-daemon avahi 2708 0.0 1.8 31732 1208 ? Ss 17:37 0:00 avahi-daemon: running [post-relee.local] avahi 2710 0.0 0.6 31600 412 ? Ss 17:37 0:00 avahi-daemon: chroot helper
ning võrgusoketid
# netstat -anp | grep 5353 udp 0 0 0.0.0.0:5353 0.0.0.0:* 2664/avahi-daemon: udp6 0 0 :::5353 :::* 2664/avahi-daemon
Olulised seadistusfailid on
- /etc/avahi/avahi-daemon.conf - põhiline seadistusfail
- /etc/avahi/hosts - saab kirjeldada liskaks teisendatavate nimede-aadresside vahelisi seoseid
- /etc/avahi/services - mDNS-SD abil publitseeritavate teenuste kirjeldused
- /etc/default/avahi-daemon
Kui mingil põhjusel on vaja arvutis tutvustada võrgule mõnda muud nime-aadressi vahelist seost, sobib seda teha /etc/avahi/hosts faili abil
mDNS liiklus on multicast liiklus ja paistab võrgus sarnaselt (konkreetselt on kasutatud Xen virtuaalseid arvuteid)
17:45:26.731223 70:01:68:01:01:51 > 01:00:5e:00:00:fb, ethertype IPv4 (0x0800), \ length 121: 169.254.184.10.5353 > 224.0.0.251.5353: 0*- [0q] 2/0/0 (Cache flush) PTR[|domain] 17:45:26.972295 70:01:68:01:01:51 > 01:00:5e:00:00:fb, ethertype IPv4 (0x0800), \ length 133: 169.254.184.10.5353 > 224.0.0.251.5353: 0 [2q] [2n] ANY (QM)? 246.2.254.169.in-addr.arpa.[|domain]
mDNS klient
mDNS kliendiks olemiseks on tarvis lisada süsteemi NSSile mDNS tugi
# apt-get install libnss-mdns
ning kasutada failis /etc/nsswitch.conf rida
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
Praktiliselt paigaldatakse aga ka mDNS serveri osa, st avahi-daemon pakett ning muudetakse /etc/nsswitch.conf faili.
Kui võrgus on mõni mDNS server veel, saab küsida nt nii (NB! dig ja nslookup ei kasuta NSSi) päriteisendust
# getent hosts loomaaed.local 169.254.184.10 loomaaed.local
ning pöördteisendust
# getent hosts 169.254.184.10 loomaaed.local 169.254.184.10
DNS-DS abil teenuste kasutamine
Selleks, et mDNS abil publitseeritud teenuseks saaks võrgus kasutada tuleb nad esmalt avahi-daemon abil võrku publitseerida. Teenuste publitseerimisega tegeleb Avahi DNS-DS komponent.
Teenuste publitseerimine
Teenuste publitseerimine toimub avahi-deemoni abil, täpsemalt kataloogi /etc/avahi/services sisalduvate seadistusfailide abil. avahi-daemoniga on kaasas ssh serveri kohta näide, kasutamiseks tuleb seadistusfail kopeerida
# cp /usr/share/doc/avahi-daemon/examples/ssh.service /etc/avahi/servics
kusjuures selle xml formaadis faili sisu on selline
<?xml version="1.0" standalone='no'?> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name replace-wildcards="yes">%h</name> <service> <type>_ssh._tcp</type> <port>22</port> </service> </service-group>
Faili lisamisel muudatus kehtestatakse, avahi-daemonit ei ole tarvis restartida vms.
Publitseeritud teenuste kasutamine
Üldiselt saab võrgus olevate arvutite ja teenuste nimekirja küsida avahi-discover paketist paigaldatud programmiga avahi-discover
$ avahi-discover
On näha neli arvutit, ühel arvutil töötav print-server ja teisel arvutil töötav SSH server.
Konkreetselt Avahi abil publitseeritud SSH ja VNC serveri poole pöördumiseks sobib kasutada paketist avahi-ui-utils programmi bshell
$ bshell
Avahi utiliidid
Pakett avahi-utils sisaldab mitmesuguseid utiliite, mida saab nt diagnostikaks kasutada
# apt-get install avahi-utils
IPv4 nime aadressiks lahendamiseks sobib öelda
# avahi-resolve -4 -n loomaaed.local loomaaed.local 169.254.184.10
Paketist mdns-scan samanimelise programmiga saab skaneerida võrku avahi teenustes suhtes, nt selliselt
# mdns-scan + moraal [00:0e:0c:b0:96:b6]._workstation._tcp.local + hp LaserJet 1300 @ moraal.auul._ipp._tcp.local + kopka [00:1b:21:1d:f6:06]._workstation._tcp.local + kopka._ssh._tcp.local + post-lenny [70:01:68:01:01:51]._workstation._tcp.local + post-relee [70:01:68:01:01:50]._workstation._tcp.local ^Cowsing ... |
Avahi-võimeline tarkvara
- NSS - http://0pointer.de/lennart/projects/nss-mdns/
- Konqueror - kdnssd
- Apache - libapache2-mod-dnssd