Integrazione in Dnsmasq della risoluzione dei nomi da Samba4 per Active Directory
Questo matrimonio difficile si puo` consumare in piu` modi. Nello specifico:
- Su due macchine diverse, con Dnsmasq come resolver per i client
- Su due macchine diverse, con Samba come resolver per i client
- Sulla stessa macchina, con Dnsmasq come resolver per i client
- Sulla stessa macchina, con Samba come resolver per i client
Nota bene: Se si usa samba come resolver per i client, c'e` un problema. Quando il DHCP (dnsmasq) fornisce un ip dinamico ad un client, automaticamente imposta anche nel suo DNS interno i record A e PTR in modo che sia possibile risolvere l' ip assegnato dinamicamente con il nome del client DHCP (fornito dal client stesso al momento della richiesta DHCP). Se lasciamo che sia Samba il DNS per i client, allora i nomi NON VERRANNO RISOLTI perche` Samba non inoltra a dnsmasq nessuna richiesta per gli host che sono parte del dominio interno di samba, che tipicamente coincide con quello locale del DNS. Samba di per se` riceve dai client windows joinati al dominio la richiesta di aggiornamento della zona DNS, e quindi risolve correttamente i client windows associati al dominio, ma comunque non risolve qualsiasi altro host che sia client del DHCP ma che non sia un pc windows joinato al dominio. La soluzione piu` ovvia per evitare questo problema e` usare una configurazione in cui dnsmasq e` il resolver DNS per i client, e samba viene interrogata da dnsmasq quando serve.
Due macchine, Dnsmasq come resolver per i client che inoltra le richieste a Samba e/o al DNS upstream del provider
La configurazione semplice per integrare il DNS fornito da Samba 4 per AD dentro al sistema della risoluzione dei nomi e` quella che prevede che Dnsmasq (o altro resolver) sia l' upstream per Samba, e che i client facciano le richieste DNS a Samba. Questo pero` non mi piace, perche` sono un vecchio rompicoglioni che vuole sempre fare di testa sua.
La mia idea e` quella di lasciare Dnsmasq come DNS per i client, e istruirlo a comportarsi come segue:
- Se la query riguarda il dominio locale, prima cerca in /etc/hosts e poi chiedi al DNS di Samba4
- Se la query NON riguarda il dominio locale, chiedi ai server upstream
Una configurazione adatta e` questa: (/etc/dnsmasq.conf)
# per integrare Samba AD (notare il punto all'inizio della stringa del dominio) server=/.dominio.locale/10.66.1.10
E` importante che alcune impostazioni non siano definite, altrimenti Dnsmasq non inoltra le query al server Samba. Le opzioni che non devono essere usate sono:
local=/<dominio>/ filterwin2k stop-dns-rebind
Se si vuole usare stop-dns-rebind occorre consentire con "rebind-ok" la zona che inoltriamo a Samba.
Per fare un test, abilitare il log delle query e poi vedere se Dnsmasq inoltra correttamente a Samba le richieste fatte come indicato nella sezione "Test" della pagina ../ConfigAD
Notare che la risoluzione dovrebbe essere tentata anche dal file hosts locale, e nei log questo si vede quando si abilita il log delle query.
Due macchine, Samba come resolver per i client che inoltra le richieste a Dnsmasq il quale le inoltra al DNS upstream del provider
In questa configurazione, che e` parecchio semplice, Dnsmasq ha il ruolo di server DHCP (volendo) e di cache DNS. Samba ha il ruolo di DNS per la rete interna (i client usano Samba come DNS) e si appoggia a Dnsmasq.
- In Samba, indicare l'indirizzo IP della macchina che esegue Dnsmasq:
dns forwarder = 10.66.1.1
- In Dnsmasq, ricordarsi di indicare ai client del DHCP che il DNS da interrogare non e` l'host su cui gira Dnsmasq (default) ma quello su cui gira Samba:
dhcp-option=6,10.66.1.10
In questo modo Samba rispondera` alle query a cui sa rispondere, e inoltrera` il resto a Dnsmasq. I client chiederanno a Samba di risolvere i nomi. Il limite di questa soluzione e` che se Samba ha problemi anche l'accesso a internet di fatto smette di funzionare, e che Samba e` molto limitata nella configurabilita` del DNS interno (dove "molto limitata" significa che NON C'E` ALCUNA CONFIGURAZIONE POSSIBILE).
Una sola macchina, Dnsmasq come resolver per i client che inoltra le richieste a Samba e/o al DNS upstream del provider
Qui la difficolta` e` che dobbiamo fare convivere Dnsmasq con Samba sulla stessa macchina. Come per il primo caso, Dnsmasq ha il ruolo di server DHCP (volendo) e di DNS per i client sulla rete interna, e inoltra a Samba le richieeste di risoluzione dei nomi che riguardano il funzionamento di AD.
Dato che i due convivono sulla stessa macchina, devo prima di tutto dare un alias alla scheda di rete della macchina che serve i client, in modo che Samba possa bindarsi a un alias e Dnsmasq all'altro alias. Non posso usare un paio di alias locali (127.0.0.x) perche` Dnsmasq, per fare da DHCP, deve potersi bindare alla scheda di rete sulla quale si trovano i client. Configuriamo quindi due alias:
- eth0 con ip 192.168.5.1 (per Samba)
- eth0:0 con ip 192.168.5.2 (per Dnsmasq)
- In Dnsmasq, devo bindare una sola interfaccia, e devo istruirlo a inviare a Samba le richieste che riguardano AD.
# per integrare Samba AD (notare il punto all'inizio della stringa del dominio) server=/.dominio.locale/192.168.5.1 # per bindarsi alla sola interfaccia dedicata a Dnsmasq listen-address=192.168.5.2 bind-interfaces dhcp-option=6,192.168.5.2
Sempre in Dnsmasq e` importante che alcune impostazioni non siano definite, altrimenti Dnsmasq non inoltra le query al server Samba. Le opzioni che non devono essere usate sono:
local=/<dominio>/ filterwin2k stop-dns-rebind
- Se si vuole usare stop-dns-rebind occorre consentire con "rebind-ok" la zona che inoltriamo a Samba.
- In Samba, dobbiamo dire a Samba di usare SOLO eth0 e non l'alias.
interfaces = lo 192.168.5.1 bind interfaces only = Yes
- Per finire, dobbiamo dire alla macchina (in /etc/resolf.conf) che il DNS e` Dnsmasq
nameserver 192.168.5.2
Una sola macchina, Samba come resolver per i client che inoltra le richieste a Dnsmasq il quale le inoltra al DNS upstream del provider
Qui la difficolta` e` che dobbiamo fare convivere Dnsmasq con Samba sulla stessa macchina. Dnsmasq ha il ruolo di server DHCP (volendo) e di cache DNS. Samba ha il ruolo di DNS per la rete interna (i client usano Samba come DNS) e si appoggia a Dnsmasq.
Dato che i due convivono sulla stessa macchina, devo prima di tutto dare un alias alla scheda di rete della macchina che serve i client, in modo che Samba possa bindarsi a un alias e Dnsmasq all'altro alias. Non posso usare un paio di alias locali (127.0.0.x) perche` Dnsmasq, per fare da DHCP, deve potersi bindare alla scheda di rete sulla quale si trovano i client. Configuriamo quindi due alias:
- eth0 con ip 192.168.5.1 (per Samba)
- eth0:0 con ip 192.168.5.2 (per Dnsmasq)
- In Samba, dobbiamo dire a Samba di usare SOLO eth0 e non l'alias, e di chiedere a Dnsmasq di risolvere i nomi upstream.
interfaces = lo 192.168.5.1 bind interfaces only = Yes dns forwarder = 192.168.5.2
- In Dnsmasq, dobbiamo bindare solo nostra interfaccia, e indicare ai client del DHCP che il DNS da interrogare e` invece l'interfaccia di Samba:
listen-address=192.168.5.2 bind-interfaces dhcp-option=6,192.168.5.1
- Per finire, dobbiamo dire alla macchina (in /etc/resolf.conf) che il DNS e` Samba
nameserver 192.168.5.1