Gestione DNS con OpenVPN su linux

From RVM Wiki
Revision as of 11:50, 3 November 2009 by Gabriele.vivinetto (talk | contribs) (New page: È complicato. ==Verifica impsotazione resolver== * Impostare il corretto ordine di risoluzione dei nomi sudoedit /etc/nsswitch.conf ... hosts: files dns mdns4_minimal [NOTF...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

È complicato.

Verifica impsotazione resolver

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

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 \
...


  • 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