Gestione DNS con OpenVPN su linux

From RVM Wiki
Revision as of 15:49, 6 May 2015 by Gabriele.vivinetto (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Verifica impostazione resolver

SE NON SI FA QUESTO, LA RISOLUZIONE DEI NOMI CON host funzionerà, ma tutti gli altri programmi, come ping, telnet e firefox, non risolveranno i nomi:


  • Impostare il corretto ordine di risoluzione dei nomi
 sudoedit /etc/nsswitch.conf 
...
hosts:          files dns mdns4_minimal [NOTFOUND=return] mdns4
...

Riferimenti

Ubuntu 15.04

  • In questa versione di Ubuntu, basta solo specificare lo script di update nella configurazione della vpn.
  • Se si upgrada, disinstallare openresolv, installare resolvconf, disinstallare il pacchetto dnsmasq (lasciare dnsmaq-common)
  • Riavviare, o killare dnsmasq e restartare network-manager

Ubuntu precedenti 15.04

Gestione con openresolv

Questo è il metodo più semplice

In pratica openresolv invia a dnsmasq via dbus la configurazione dei dns da usare.

Openresolv provvede a generare le configurazioni per il server dns locale che si usa. Con dnsmasq funziona, con pdnsd non si riesce a far funzonare bene con più vpn.

  • Installare openresolv e la versione completa di dnsmasq
sudo apt-get install openresolv dnsmasq
  • Killare le istanze di dnsmaq avviate da NetworkManager
sudo killall dnsmasq
  • Configurare openresolv (Sì. Il suo file di cfg è resolvconf.conf. Infatti sostituisce resolvconf :)
sudoedit /etc/resolvconf.conf
#...
# togliere questo !!!
#resolv_conf=/etc/resolv.conf
...
name_servers=127.0.0.1
#...
  • Attivare il support dbus in dnsmaq
sudoedit /etc/dnsmasq.conf 
#...
enable-dbus
  • QUESTO NON VA FATTO IN UBUNTU 15.04: Impostare il comportamento per l'upstream server di dnsmasq (se non si fa questo, spesso sbaglia a impostare i DNS server presi via DHCP, e Virtualbox non risolve i nomi dalle vm in nat):
sudoedit /etc/default/dnsmasq 
...
IGNORE_RESOLVCONF=yes
  • Riavviare il dns
sudo invoke-rc.d dnsmasq restart
  • Verificare che sia attivo il proprio dnsmasq, oltre a quello di networkmanager:
ps auxw | grep /var/run/dnsmasq/dnsmasq.pid
  • Se non è attivo, riscrivere la configurazione init.d e riavviarlo:
sudo update-rc.d -f dnsmasq remove
sudo update-rc.d -f dnsmasq defaults
sudo invoke-rc.d dnsmasq stop
sudo invoke-rc.d dnsmasq restart
  • Controllare che vengano scritti i dns ed i domini in
/etc/resolv.conf
  • Testare e risolvere i nomi che servono con le vpn attive
  • Inserire nella configurazione della vpn il riferimento agli script up e down e a script-security=2 VEDI SEZIONE SUCCESSIVA


Riferimenti

Attivazione dello script Openvpn

La vpn deve lanciare lo script di aggiornamento di resolvconf.

  • Aggiungere quindi i parametri
vi ~/local/bin/vpn-rvm
...
               --script-security 2 \
               --up /etc/openvpn/update-resolv-conf \
               --down /etc/openvpn/update-resolv-conf \
...


Gestione manuale di dnsmasq

In questo modo è più complicato ...

Customizzazione script dns openvpn

  • Customizzare lo script di aggiornamento:
sudoedit /etc/openvpn/update-resolv-conf 

Per la parte up):

...
        echo -n "$R" | /sbin/resolvconf -a "${dev}.inet"

        # update dnsmasq config
        echo -n "server=/$IF_DNS_SEARCH/$IF_DNS_NAMESERVERS" > /etc/dnsmasq.d/$I
        invoke-rc.d dnsmasq restart
        ;;

Per la parte down):

down)
        for optionname in ${!foreign_option_*} ; do
                option="${!optionname}"
                echo $option
                part1=$(echo "$option" | cut -d " " -f 1)
                if [ "$part1" == "dhcp-option" ] ; then
                        part2=$(echo "$option" | cut -d " " -f 2)
                        part3=$(echo "$option" | cut -d " " -f 3)
                        if [ "$part2" == "DNS" ] ; then
                                IF_DNS_NAMESERVERS="$IF_DNS_NAMESERVERS $part3"
                        fi
                        if [ "$part2" == "DOMAIN" ] ; then
                                IF_DNS_SEARCH="$part3"
                        fi
                fi
        done
        R=""

        /sbin/resolvconf -d "${dev}.inet"

        # update dnsmasq config
        rm  -f /etc/dnsmasq.d/$IF_DNS_SEARCH
        invoke-rc.d dnsmasq restart
        ;;

Installazione di resolvconf

  • Installare
sudo apt-get install resolvconf
  • Configurare le priorità con cui vengono inseriti i parametri in /etc/resolv.conf, mettendo i device tun e tap dopo eth e wlan e NetworkManager prima di tutto
sudoedit /etc/resolvconf/interface-order
# interface-order(5)
NetworkManager*
lo.inet*
lo.dnsmasq
lo.pdnsd
lo.!(pdns|pdns-recursor)
lo
hso*
eth*
ath*
wlan*
ppp*
tun*
tap*
*

ATTENZIONE: NetworkManager deve essere il primo, perchè eth e wlan sono gestiti solo da /etc/init.d/networking

  • Testare rescolvconf:
    • togliere rimettere il cavo di rete e verificare che venga riscritto il file /etc/resolv.conf
    • avviare la vpn e verificare che DNS e SEARCH vengano inseriti dopo quelli di rete
    • Scollegare la VPN
  • Impostare come DNS primario localhost:
sudoedit /etc/resolvconf/resolv.conf.d/head
...
nameserver 127.0.0.1
...
  • Ritestare e vedere che viene messo per primo 127.0.0.1
    • Scollegare la VPN

Installazione DNSMASQ

  • Installare
sudo apt-get install dnsmasq
  • Testare collegando la VPN, verificando che sia creato il file:
/etc/dnsmasq.d/rvmgroup.local
che deve contenere
server=/rvmgroup.local/ 192.168.254.100
    • Scollegare la VPN: il file deve sparire.

Note

  • Non basta inserire i DNS nel corretto ordine, perchè quando il primo ritorna NXDOMAIN, la query si ferma
  • Non si può gestire la cosa nemmeno mettendo in
/etc/nsswitch.conf 
hosts: files dns [SUCCESS=return NOTFOUND=continue TRYAGAIN=3 UNAVAIL=continue]
per lo stesso motivo
  • Non si può inserire in
/etc/resolv.conf

options rotate

per lo stesso motivo.
  • Non si può usare l'opzione --all-servers di dnsmasq per lo stesos motivo
  • Si potrebbe patchare dnsmasq per ritornare FAILED invece di NXDOMAIN (vedi note)

Riferimenti