Gestione DNS con OpenVPN su linux

From RVM Wiki
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

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
  • Riavviare il dns
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
  • Verificare se serve nel file della vpn il riferimento agli script up e down, o se basta script-securty


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