OpenWrt - Avahi
Rozgłaszanie usług w sieci
Ostatnia zmiana: 2013-11-26 18:43

1. Instalacja
2. Konfiguracja
 2.1. SSH
 2.2. FTP
 2.3. SAMBA
 2.4. SFTP
 2.5. NFS
 2.6. HTTP
 2.7. Drukarka
 2.8. Transmission
3. Zakończenie


Usługa Avahi (inne nazwy: Zeroconf, Bonjour - http://pl.wikipedia.org/wiki/Avahi_(program) ) służy do rozgłaszania innych usług dostępnych na urządzeniu. Mechanizm ten prawie nie znany nie jest użytkownikom systemów Windows (choć można doinstalować jego implementację), za to doskonale jest znany użytkownikom MacOS oraz nowszych dystrybucji Linuksa. W codziennym życiu, jeżeli mamy do czynienia tylko z jednym routerem i dobrze znanymi usługami działającymi na nim, avahi nie ma większego sensu (choć nadal można zainstalować). Możliwości tego mechanizmu pojawiają się dopiero w sieci z wieloma routerami lub przy połączeniu do nieznanej nam sieci - dzięki niemu jesteśmy w stanie poznać szybko jakie usługi dostępne są w sieci.

Jak to działa? W przypadku linuksa, jeżeli używamy np. gnome z nautilusem, w zakładce Sieci pojawiają się linki do znalezionych urządzeń. Wystarczy tylko kliknąć, wprowadzić tylko ew. dodatkowe parametry i już można się połączyć. Avahi używane jest głównie do rozgłaszania metod udostępnionych zasobów dyskowych oraz drukarek sieciowych, ale można także rozgłaszać serwery ssh czy usługi na www. Oczywiście samo rozgłaszanie nie spowoduje automatycznie możliwości dostępu do danej usługi, trzeba wcześniej ją normalnie zainstalować, skonfigurować i uruchomić. Avahi jest tylko mechanizmem pozwalającym na publikowanie w sieci informacji o uruchomionych usługach.



Prezentacja linków do udostępnionych zasobów w linuksie - FTP, Samba, SFTP - w przeglądarce plików (nautilus), połączenia SSH w przeglądarce zdalnych pulpitów (vinagre) oraz nowej drukarki w panelu konfiguracji drukarek.

Instalacja

    # opkg update
    # opkg install avahi-daemon dbus libavahi-dbus-support
    # /etc/init.d/dbus enable
    # /etc/init.d/dbus start
    # /etc/init.d/avahi-daemon enable
    # /etc/init.d/avahi-daemon start

Konfiguracja
Usługi rozgłaszane są przy pomocy odpowiednich plików umieszczonych w katalogu /etc/avahi/services. Mają one określoną postać i nazewnictwo; poniżej podane przykładowe pliki dla niektórych usług:
SSH
ssh.service

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
    <name replace-wildcards="yes">Secure Shell on %h</name>
    <service>
        <type>_ssh._tcp</type>
        <port>22</port>
        <txt-record>u=root</txt-record>
    </service>
</service-group>

FTP
ftp.service

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
    <name replace-wildcards="yes">FTP on %h</name>
    <service>
        <type>_ftp._tcp</type>
        <port>21</port>
    </service>
</service-group>

SAMBA
smb.service

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
    <name replace-wildcards="yes">Samba Share on %h</name>
    <service>
        <type>_smb._tcp</type>
        <port>139</port>
        <port>445</port>
        <txt-record>u=baduser</txt-record>
        <txt-record>p=badpass</txt-record>
    </service>
    <service>
        <type>_device-info._tcp</type>
        <port>0</port>
        <txt-record>model=AirPort</txt-record>
    </service>
</service-group>

SFTP
sftp.service

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
    <name replace-wildcards="yes">SFTP on %h</name>
    <service>
        <type>_sftp-ssh._tcp</type>
        <port>22</port>
        <txt-record>u=root</txt-record>
        <txt-record>path=/mnt/sda1</txt-record>
    </service>
</service-group>

NFS
nfs.service

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
    <name replace-wildcards="yes">NFS on %h</name>
    <service>
        <type>_nfs._tcp</type>
        <port>2049</port>
        <txt-record>path=/mnt/sda1</txt-record>                                  
    </service>
</service-group>

HTTP
http.service

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
    <name replace-wildcards="yes">HTTP on %h</name>
    <service>
        <type>_http._tcp</type>
        <port>80</port>
        <txt-record>path=/</txt-record>
    </service>
</service-group>

Drukarka
printer.service

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
    <name replace-wildcards="yes">Brother HL-2030 Laserprinter on %h</name>
    <service>
        <type>_pdl-datastream._tcp</type>
        <port>9100</port>
        <txt-record>qtotal=1</txt-record>
        <txt-record>note=room 2</txt-record>
        <txt-record>ty=Brother HL-2030 Laserdrucker</txt-record>
        <txt-record>product=(Brother HL-2030 series)</txt-record>
        <txt-record>usb_MFG=Brother</txt-record>
        <txt-record>usb_MDL=HL-2030 series</txt-record>
        <txt-record>Color=F</txt-record>
        <txt-record>Duplex=F</txt-record>
        <txt-record>Bind=F</txt-record>
        <txt-record>Collate=F</txt-record>
        <txt-record>Sort=F</txt-record>
        <txt-record>Staple=F</txt-record>
        <txt-record>Punch=F</txt-record>
        <txt-record>PaperMax=legal-A4</txt-record>
    </service>
</service-group>

Transmission
transmission.service

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<!--
    Text Record 
    This sets arbitary key-value pairs, which are interpreted on a
    per-service manner. For _http._tcp services the valid keys are u
    (username), p (password) and path.
-->
<service-group>
    <name replace-wildcards="yes">Torrents on %h</name>
    <service>
        <type>_http._tcp</type>
        <port>9091</port>
        <txt-record>path=/transmission/web/</txt-record>
    </service>
</service-group>

Plik o podanej nazwie i zawartości wystarczy umieścić w katalogu /etc/avahi/services a następnie zrestartować router lub sam demon avahi.
Zakończenie
Usługi mogą być rozgłaszane także przez serwer dns (dnsmasq, przez txt-record), w taki sposób wykonane jest np. rozgłaszanie drukarki w Gargoyle.
Odpowiednie rozgłaszanie konfiguracji drukarki przez Avahi w połączeniu z cupsem pozwala na realizację usługi AirPrint.