Gestione DNS con OpenVPN su linux
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
- openresolv
- OpenResolvConfigDnsmasq – openresolv
- Bug #1090589 “Empty /var/run/dnsmasq/resolv.conf” : Bugs : “dnsmasq” package : Ubuntu
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
- General Solaris 10 Discussion - Multile DNS in resolv.conf
- resolv.conf options rotate and discovery of ISP DNS issue | Into.the.Void.
- [Dnsmasq-discuss all-servers option issue]
- Tutorial - OpenVPN client the right way, one click with gopenvpn - Ubuntu Forums
- HowTo/dnsmasq - Debian Wiki
- [Dnsmasq-discuss all-servers option issue]
- [Dnsmasq-discuss Try next forward servers after NXDOMAIN]