Gestione DNS con OpenVPN su linux
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
- 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]