Pagine

29 marzo 2017

QNAP NAS - Installazione di un DNS server usando BIND

Ma per quale assurdo motivo dovremmo mai installare un DNS all'interno di un NAS? Che c'entra un DNS con un NAS?
In effetti DNS e NAS sono due entità che sarebbe buona norma non fondere in un'unica macchina, questo per lo meno ha senso in ambito aziendale (esistono una miriade di validi motivi, dal banale traffico extra che rallenta le operazioni del NAS fino al failure dell'hardware: un NAS che si ferma per alcuni minuti non preclude a nessuno la navigazione WEB, ma un DNS si!). Ma che dire di tutte quelle realtà domestiche o di piccolo ufficio nelle quali può sorgere la necessità di dare un nome a servizi locali forniti da vari apparecchi come router, stampanti o applicazioni web e che di solito sono raggiungibili via IP? Magari solo per semplificarne l'accesso o aiutare la memoria a ricordarsi come raggiungerli usando un nome e non un indirizzo numerico di rete.

Idealmente sarebbe sempre il caso di usare una macchina dedicata allo scopo e installare un DNS locale su quella, ma per molti questo significa costi extra, e poi se abbiamo in ufficio già un NAS acceso 24 ore su 24 non possiamo estendere un pochino le sue funzionalità e farlo diventare anche un piccolo DNS?

Ebbene con un NAS QNAP è possibile!
Nell'interfaccia di gestione delle app (app center), nell'attuale versione del QTS (la 4.2.3), non esiste all'interno della lista delle app del repository di default (il QNAP Store) alcuna applicazione che ci permetta di installare un servizio di DNS. Ma per fortuna ci sono repository di terze parti che ci vengono in soccorso.
Come noto i due migliori servizi linux per implementare un DNS sono DNSMASQ e BIND.

In questo tutorial vediamo come installare BIND sul nostro NAS QNAP

Ho preferito BIND a DNSMASQ per il semplice motivo che BIND nasce come DNS server. DNSMASQ, pur essendo più semplice da configurare e con alcune caratteristiche in più come il DHCP, lo lascerò a qualcuno di voi che potrebbe scrivere un tutorial su come configurarlo così che lo possa linkare da questo articolo.
  1. Il primo punto è naturalmente l'installazione di BIND che possiamo trovare già comodamente in formato .QPKG all'interno del repository di qnapclub.eu (vi rimando a un mio precedente post per aggiungerlo se già non l'avete tra i repository dell'app center). Quindi per installarlo basta cliccare su installa.
  2. Al termine entrare nel terminale e verificare che bind sia attivo:
    ps -aef | grep named
    Deve dare come risultato qualcosa del tipo:
    17344 admin     30348 S   ./named
  3. Verificare che il pacchetto bind sia in autoesecuzione anche dopo il riavvio del nas
    grep -A 5 Bind /etc/config/qpkg.conf
    Il risultato è qualcosa del tipo:
    [Bind]
    Name = Bind
    Class = null
    Status = complete
    Build = 20161029
    Version = 9.11.0.0
    Author = Guerithault Stephane (QoolBox)
    QPKG_File = Bind.qpkg
    Date = 2017-03-10
    Shell = /share/CACHEDEV1_DATA/.qpkg/Bind/Bind.sh
    Volume_Select = 3
    Install_Path = /share/CACHEDEV1_DATA/.qpkg/Bind
    RC_Number = 101
    Enable = TRUE
    La riga con scritto Enable = TRUE è quella importante. Se così non fosse è possibile modificare  a mano il file /etc/config/qpkg.conf e correggere la riga.
  4. La riga Install_Path = /share/CACHEDEV1_DATA/.qpkg/Bind ci dice dove è stato installato Bind, quindi spostiamoci in quella directory e creiamo una nuova directory "log" che useremo per archiviare permanentemente i file di log di BIND.
    mkdir /share/CACHEDEV1_DATA/.qpkg/Bind/log
  5. La versione di BIND distribuita da qnapclub.eu non porta con se molti dei file di configurazione che si possono trovare normalmente nelle distribuzioni più famose di linux come debian o ubuntu. Quindi ci dobbiamo personalizzare la configurazione partendo dal file /share/CACHEDEV1_DATA/.qpkg/Bind/etc/named.conf
    vi /share/CACHEDEV1_DATA/.qpkg/Bind/etc/named.conf
    Aggiungiamo queste righe
    // This is the primary configuration file for the BIND DNS server named.

    options {
      directory "/share/CACHEDEV1_DATA/.qpkg/Bind";
      forwarders {
        //Google DNS
        8.8.8.8;
        8.8.4.4;
      };

      auth-nxdomain no;    # conform to RFC1035
    };


    //Configuro il logging
    logging {
      channel default_file {
        file "log/default.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel general_file {
        file "log/general.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel database_file {
        file "log/database.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel security_file {
        file "log/security.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel config_file {
        file "log/config.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel resolver_file {
        file "log/resolver.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel xfer-in_file {
        file "log/xfer-in.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel xfer-out_file {
        file "log/xfer-out.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel notify_file {
        file "log/notify.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel client_file {
        file "log/client.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel unmatched_file {
        file "log/unmatched.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel queries_file {
        file "log/queries.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel network_file {
        file "log/network.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel update_file {
        file "log/update.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel dispatch_file {
        file "log/dispatch.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel dnssec_file {
        file "log/dnssec.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };
      channel lame-servers_file {
        file "log/lame-servers.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
      };

      category default { default_file; };
      category general { general_file; };
      category database { database_file; };
      category security { security_file; };
      category config { config_file; };
      category resolver { resolver_file; };
      category xfer-in { xfer-in_file; };
      category xfer-out { xfer-out_file; };
      category notify { notify_file; };
      category client { client_file; };
      category unmatched { unmatched_file; };
      category queries { queries_file; };
      category network { network_file; };
      category update { update_file; };
      category dispatch { dispatch_file; };
      category dnssec { dnssec_file; };
      category lame-servers { lame-servers_file; };
    };


    //Configuro le zone
    zone "home.lan" {
      type master;
      file "etc/db.home";
    };

    zone "0.168.192.in-addr.arpa" {
      type master;
      file "etc/db.192.168.0";
    };
    Quindi salviamo e chiudiamo il file.
    Quello che si può notare dalla configurazione qui sopra è che abbiamo attivato e separato tutti i canali di log in file indipendenti che vengono archiviati sotto la cartella log/ che a sua volta viene cercata nella posizione definita dalla direttiva options - directory. Inoltre abbiamo impostato come forwarders i DNS di Google così che quando BIND non conosce come risolvere un indirizzo lo vada a chiedere a Google.
    Nella configurazione si possono poi notare le due zone locali: una chiamata "home.lan" e l'altra che esegue il reverse degli indirizzi a partire dall'IP di rete locale 192.168.0.X.
    Quello che dobbiamo fare ora quindi è creare ed editare i due file delle zone.
  6. Creare il file /share/CACHEDEV1_DATA/.qpkg/Bind/etc/db.home e inserivi:
    ;
    ; BIND data file for local loopback interface
    ;
    $TTL    604800
    @   IN  SOA QNAP-TS-253A.home.lan. admin.QNAP-TS-253A.home.lan. (
                      1     ; Serial
                 604800     ; Refresh
                  86400     ; Retry
                2419200     ; Expire
                 604800 )   ; Negative Cache TTL
    ;
    @   IN  NS  localhost.
    @   IN  A   127.0.0.1

    QNAP-TS-253A IN  A   192.168.0.2
    NS  IN  CNAME   QNAP-TS-253A
    router  IN  A   192.168.0.2
  7. Creare il file per il reverse /share/CACHEDEV1_DATA/.qpkg/Bind/etc/db.192.168.0 e inserirvi:
    ;
    ; BIND reverse data file for empty rfc1918 zone
    ;
    $TTL    604800
    @   IN  SOA QNAP-TS-253A.home.lan. admin.QNAP-TS-253A.home.lan. (
                      1     ; Serial
                 604800     ; Refresh
                  86400     ; Retry
                2419200     ; Expire
                 604800 )   ; Negative Cache TTL
    ;
    @   IN  NS  localhost.
    2  IN  PTR router.home.lan
  8. I due file db.home e db.192.168.0 permettono di definire indirizzi locali del tipo blabla.home.lan e associare ad essi un indirizzo IP della propria rete locale. Nell'esempio è stato definito l'indirizzo router.home.lan, quindi quando BIND sarà interrogato a riguardo risponderà con l'IP 192.168.0.2. Per aggiungere nuovi indirizzi è sufficiente aggiungerli uno sotto l'altro.
  9. Ora verifichiamo il buon funzionamento della configurazione.
    Riavviamo il servizio utilizzando il l'app center nel QTS e assicuriamoci di avere come DNS del nostro PC l'ip del NAS.
    Da linea di comando sul nostro PC eseguire il comando
    dig router.home.lan
    Se esce qualcosa di questo genere
    ; <<>> DiG 9.8.3-P1 <<>> router.home.lan
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57971
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

    ;; QUESTION SECTION:
    ;router.home.lan.        IN    A

    ;; ANSWER SECTION:
    router.home.lan.    604800    IN    A    192.168.0.2

    ;; AUTHORITY SECTION:
    home.lan.        604800    IN    NS    localhost.

    ;; Query time: 2 msec
    ;; SERVER: 192.168.0.2#53(192.168.0.2)
    ;; WHEN: Mon Mar 20 15:06:21 2017
    ;; MSG SIZE  rcvd: 72
    allora siamo stati bravi e possiamo goderci tranquillamente la navigazione in rete locale e in internet utilizzando il nostro nuovo e fiammante DNS. In caso di errore o non funzionamento non c'è altro da fare che scartabellare i file di log alla ricerca di cosa sia andato storto.

Nessun commento:

Posta un commento