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

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