NetworkManager non cambia /etc/resolv.conf dopo push di openvpn dns


22

Ho un problema che è "NetworkManager non si aggiorna /etc/resolv.confdopo la connessione openvpn con push DNS configurato".

Ecco la mia configurazione del server openvpn: ( Ho cambiato il nome di dominio in ABC.COM per motivi di sicurezza;) )

########################################
# Sample OpenVPN config file for
# 2.0-style multi-client udp server
#
# Adapted from http://openvpn.sourceforge.net/20notes.html
#
# tun-style tunnel

port 1194
dev tun

# Use "local" to set the source address on multi-homed hosts
#local [IP address]

# TLS parms
tls-server 
ca keys/ca.crt
cert keys/static.crt
key keys/static.key
dh keys/dh1024.pem
proto tcp-server

# Tell OpenVPN to be a multi-client udp server
mode server

# The server's virtual endpoints
ifconfig 10.8.0.1 10.8.0.2

# Pool of /30 subnets to be allocated to clients.
# When a client connects, an --ifconfig command
# will be automatically generated and pushed back to
# the client.
ifconfig-pool 10.8.0.4 10.8.0.255

# Push route to client to bind it to our local
# virtual endpoint.
push "route 10.8.0.1 255.255.255.255"

push "dhcp-option DNS 10.8.0.1"

# Push any routes the client needs to get in
# to the local network.
#push "route 192.168.0.0 255.255.255.0"

# Push DHCP options to Windows clients.
push "dhcp-option DOMAIN ABC.COM"
#push "dhcp-option DNS 192.168.0.1"
#push "dhcp-option WINS 192.168.0.1"

# Client should attempt reconnection on link
# failure.
keepalive 10 60

# Delete client instances after some period
# of inactivity.
inactive 600

# Route the --ifconfig pool range into the
# OpenVPN server.
route 10.8.0.0 255.255.255.0

# The server doesn't need privileges
user openvpn
group openvpn

# Keep TUN devices and keys open across restarts.
persist-tun
persist-key

verb 4

Come puoi vedere, è una configurazione di base di base con poca regolazione.

Adesso..

Sul mio computer (client openvpn), posso vedere che DNS è ok:

{17:12}/etc/NetworkManager ➭ nslookup git.ABC.COM 10.8.0.1
Server:     10.8.0.1
Address:    10.8.0.1#53

Name:   git.ABC.COM
Address: 10.8.0.1

{17:18}/etc/NetworkManager ➭ nslookup ABC.COM 10.8.0.1   
Server:     10.8.0.1
Address:    10.8.0.1#53

Name:   ABC.COM
Address: 18X.XX.XX.71

I log di openvpn sul lato server dicono (se ho capito bene) che il DNS è stato inviato:

openvpn[13257]: TCPv4_SERVER link remote: [AF_INET]83.30.135.214:37658
openvpn[13257]: 83.30.135.214:37658 TLS: Initial packet from [AF_INET]83.30.135.214:37658, sid=3251df51 915772f3
openvpn[13257]: 83.30.135.214:37658 VERIFY OK: depth=1, C=XX, ST=XX, L=XXX, O=XXX, OU=XXX, CN=XXX, name=XXX, emailAddress=mail@ABC.COM
openvpn[13257]: 83.30.135.214:37658 VERIFY OK: depth=0, C=XX, ST=XX, L=XXX, O=XXX, OU=XXX, CN=XXX, name=XXX, emailAddress=mail@ABC.COM
openvpn[13257]: 83.30.135.214:37658 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
openvpn[13257]: 83.30.135.214:37658 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
openvpn[13257]: 83.30.135.214:37658 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
openvpn[13257]: 83.30.135.214:37658 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
openvpn[13257]: 83.30.135.214:37658 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
openvpn[13257]: 83.30.135.214:37658 [jacek] Peer Connection Initiated with [AF_INET]83.30.135.214:37658
openvpn[13257]: jacek/83.30.135.214:37658 MULTI_sva: pool returned IPv4=10.8.0.10, IPv6=(Not enabled)
openvpn[13257]: jacek/83.30.135.214:37658 MULTI: Learn: 10.8.0.10 -> jacek/83.30.135.214:37658
openvpn[13257]: jacek/83.30.135.214:37658 MULTI: primary virtual IP for jacek/83.30.135.214:37658: 10.8.0.10
openvpn[13257]: jacek/83.30.135.214:37658 PUSH: Received control message: 'PUSH_REQUEST'
openvpn[13257]: jacek/83.30.135.214:37658 send_push_reply(): safe_cap=940
openvpn[13257]: jacek/83.30.135.214:37658 SENT CONTROL [jacek]: 'PUSH_REPLY,route 10.8.0.1 255.255.255.255,dhcp-option DNS 10.8.0.1,dhcp-option DOMAIN ABC.COM,ping 10,ping-restart 60,ifconfig 10.8.0.10 10.8.0.9' (status=1)

registri openvp dalla mia parte:

Aug 05 17:13:55 localhost.localdomain openvpn[1198]: TCPv4_CLIENT link remote: [AF_INET]XXX.XX.37.71:1194
Aug 05 17:13:55 localhost.localdomain openvpn[1198]: TLS: Initial packet from [AF_INET]XXX.XX.37.71:1194, sid=89cc981c d57dd826
Aug 05 17:13:56 localhost.localdomain openvpn[1198]: VERIFY OK: depth=1, C=XX, ST=XX, L=XXX, O=XXX, OU=XXX, CN=XXX, name=XXX, emailAddress=mail@ABC.COM
Aug 05 17:13:56 localhost.localdomain openvpn[1198]: VERIFY OK: depth=0, C=XX, ST=XX, L=XXX, O=XXX, OU=XXX, CN=XXX, name=XXX, emailAddress=mail@ABC.COM
Aug 05 17:13:58 localhost.localdomain openvpn[1198]: Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key
Aug 05 17:13:58 localhost.localdomain openvpn[1198]: Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Aug 05 17:13:58 localhost.localdomain openvpn[1198]: Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key
Aug 05 17:13:58 localhost.localdomain openvpn[1198]: Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Aug 05 17:13:58 localhost.localdomain openvpn[1198]: Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Aug 05 17:13:58 localhost.localdomain openvpn[1198]: [static] Peer Connection Initiated with [AF_INET]XXX.XX.37.71:1194
Aug 05 17:14:00 localhost.localdomain openvpn[1198]: SENT CONTROL [static]: 'PUSH_REQUEST' (status=1)
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: PUSH: Received control message: 'PUSH_REPLY,route 10.8.0.1 255.255.255.255,dhcp-option DNS 10.8.0.1,dhcp-option DOMAIN ABC.COM,ping 10,ping-restart 60,ifconfig 10.8.0.10 10.8.0.9'
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: OPTIONS IMPORT: timers and/or timeouts modified
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: OPTIONS IMPORT: --ifconfig/up options modified
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: OPTIONS IMPORT: route options modified
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: ROUTE_GATEWAY 10.123.123.1/255.255.255.0 IFACE=wlan0 HWADDR=44:6d:57:32:81:2e
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: TUN/TAP device tun0 opened
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: TUN/TAP TX queue length set to 100
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: /usr/sbin/ip link set dev tun0 up mtu 1500
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: /usr/sbin/ip addr add dev tun0 local 10.8.0.10 peer 10.8.0.9
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: /usr/sbin/ip route add 10.8.0.1/32 via 10.8.0.9
Aug 05 17:14:01 localhost.localdomain openvpn[1198]: Initialization Sequence Completed

Sembra che tutto vada bene.

Ma. Ho controllato /var/log/messagesanche ... e ho trovato quella riga:

Aug  5 17:14:01 localhost NetworkManager[761]: <warn> /sys/devices/virtual/net/tun0: couldn't determine device driver; ignoring...

ip a ritorna:

5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    link/none 
    inet 10.8.0.10 peer 10.8.0.9/32 scope global tun0
       valid_lft forever preferred_lft forever

route -n ritorna:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.123.123.1    0.0.0.0         UG    0      0        0 wlan0
10.8.0.1        10.8.0.9        255.255.255.255 UGH   0      0        0 tun0
10.8.0.9        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.123.123.0    0.0.0.0         255.255.255.0   U     0      0        0 wlan0

Quindi praticamente tutto funziona, tranne il DNS che viene spinto ... Oh! Giusto, e il mio /etc/resolv.conf:

# Generated by NetworkManager
domain home
search home
nameserver 10.123.123.1

Dov'è il problema?

(Ho una risposta da un utente Windows con client openvpn, che dalla sua parte il DNS funziona bene, quindi è un problema dalla mia parte.

Ok ora ho un'altra risposta (dopo aver riavviato il servizio openvpn sul lato server) - non funziona.

Devo dire che ieri ha funzionato anche sulla mia macchina .. quindi ho rovinato qualcosa sul server? Cosa potrebbe essere? )

Modifica: Okay, ho un'altra risposta per l'utente di Windows (lo stesso utente di prima) - ora funziona. Quindi .. immagino che sia stato causato dal riavvio di openvpn e da alcuni ritardi con esso. Da allora non ho fatto nulla. Quindi siamo tornati sulla mia macchina.

Ho anche rintracciato che quel tun0messaggio strano è apparso anche ieri, e ieri ha funzionato. O forse ho aggiunto l'ingresso a resolv.confme stesso? Non ricordo .. (accidenti)


Ho visto questo accadere su sistemi con selinux abilitato e il cui file resolv.conf aveva il contesto di sicurezza selinux errato. L'esecuzione di restorecon per ripristinare il contesto di sicurezza su quel file ha risolto il problema. PS: è resolv.conf, non
resol.conf

Prestare particolare attenzione a /etc/NetworkManager/NetworkManager.conf: decommentare dns=dnsmasqe avere managed=true. Inoltre, potresti essere interessato dal bug # 1294899 L'importazione della connessione VPN salvata è stata interrotta di recente nonostante una connessione VPN "stabilita". Controlla le tue impostazioni VPN: inserisci il nome del protocollo ( :tcpo :udp) nel Gatewaycampo. Controlla le impostazioni avanzate, in particolare Port numbere LZO compression. Controlla anche i registri. Termina con un test di tenuta DNS .
KrisWebDev,

Risposte:


23

Questo funziona per me: http://www.softwarepassion.com/solving-dns-problems-with-openvpn-on-ubuntu-box/

Il passaggio importante è l'aggiunta delle seguenti due righe di configurazione nel file di configurazione openvpn del client :

up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Assicurati anche che il resolvconfpacchetto sia installato sul client, perché quello update-resolv-confscript dipende da esso.

Funziona con il servizio client openvpn o il comando per avviarlo manualmente.

Tuttavia, Ubuntu Network Manager non lo fa. Finora è un problema: https://bugs.launchpad.net/ubuntu/+source/openvpn/+bug/1211110


4
Non dimenticare di eseguire openvpn con --script-security 2
kol

2
Oppure inserisci anche il script-security 2tuo file di configurazione del client openvpn.
KrisWebDev,

Non consiglio di usare OpenVPN direttamente, senza passare attraverso Network-Manager, oppure potresti riscontrare un bug # 691723 Il client OpenVPN ignora il DNS che non ha soluzione. Nel mio caso, Network Manager ha sovrascritto resolvconf dopo l' upavvio dello script ... Un sporco # echo "nameserver 208.67.220.220" | /sbin/resolvconf -a "tun0.openvpn"AFTER che esegue openvpn può fare il lavoro ... fino a quando non viene sovrascritto di nuovo. Ancora una volta, non utilizzare OpenVPN direttamente.
KrisWebDev,

upcomando non trovato !!
Pardeep Jain,

@KrisWebDev: è vero, ma l'utilizzo di OpenVPN tramite NetworkManager consente agli utenti di disabilitare (attivare Off) la connessione che gli amministratori potrebbero non desiderare.
palswim

12

Funziona per me dopo aver disabilitato il dnsmasq di NetworkManager.

modificare /etc/NetworkManager/NetworkManager.conf

 #dns=dnsmasq

e riavvia NetworkManager

sudo restart network-manager

Ho già avuto il cambiamento da Bruce Li nella mia configurazione client. Anche questa modifica ha risolto il problema [Ubuntu 15.10].
TheDauthi,

1
Che tipo di stregoneria è questa? Cosa sta facendo dnsmasq?
GuySoft

Questo ha funzionato per me in diverse versioni di Ubuntu. Non capisco davvero cosa faccia dnsmasq, ma commentare quella riga di NetworkManager.conf risolve magicamente il problema delle connessioni VPN e delle connessioni Wi-Fi.
Simón,

Questo ha funzionato per me con Linux Mint 18, anche se ho dovuto riavviare il mio computer perché sudo riavvio del gestore della rete non è riuscito con un errore. La risposta accettata non ha funzionato per me.
trebormf,

su comando restarte errore di lanciorestart: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
Pardeep Jain

2

Finalmente funziona (con NetworkManager standard e plugin OVPN)

nmcli -p connection modify MY_VPN_CONNECTION ipv4.never-default no
nmcli -p connection modify MY_VPN_CONNECTION ipv4.ignore-auto-dns no
nmcli -p connection modify MY_VPN_CONNECTION ipv4.dns-priority -42

In questo caso, una volta stabilita la connessione VPN, tutte le richieste DNS vengono indirizzate ai server DNS forniti dalla VPN senza alcuna manipolazione con script di supporto dnsmasq, up / down / dispatch.


funziona, 10x
Roman M

1

È possibile inviare le impostazioni DNS in OpenVPN. Come hai nella tua configurazione, è fatto nella configurazione del server con la seguente riga:

push "dhcp-option DNS 10.20.30.40"

Questo funziona per me usando la GUI di Windows, ma ha bisogno di un po 'di spinta per i sistemi Linux. Per connettermi alla mia rete domestica (usando Fedora 18 al momento), ho usato uno script di gronke su GitHub ( https://github.com/gronke/OpenVPN-linux-push ) per automatizzare il processo di aggiornamento.

Per utilizzare questi script, ho aggiunto quanto segue al mio file client OpenVPN:

up /home/gadgeteering/tools/vpn/up.sh
down /home/gadgeteering/tools/vpn/down.sh

up.sh:

#! /bin/bash
DEV=$1

if [ ! -d /tmp/openvpn ]; then
mkdir /tmp/openvpn
fi
CACHE_NAMESERVER="/tmp/openvpn/$DEV.nameserver"
echo -n "" > $CACHE_NAMESERVER

dns=dns
for opt in ${!foreign_option_*}
do
eval "dns=\${$opt#dhcp-option DNS }"
if [[ $dns =~ [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]]; then
if [ ! -f /etc/resolv.conf.default ]; then
cp /etc/resolv.conf /etc/resolv.conf.default
fi

cat /etc/resolv.conf | grep -v ^# | grep -v ^nameserver > /tmp/resolv.conf
echo "nameserver $dns" >> /tmp/resolv.conf
echo $dns >> $CACHE_NAMESERVER
cat /etc/resolv.conf | grep -v ^# | grep -v "nameserver $dns" | grep nameserver >> /tmp/resolv.conf
mv /tmp/resolv.conf /etc/resolv.conf

fi
done

down.sh:

#! /bin/bash
DEV=$1
CACHE_NAMESERVER="/tmp/openvpn/$DEV.nameserver"
echo $CACHE_NAMESERVER

if [ -f $CACHE_NAMESERVER ]; then
for ns in `cat $CACHE_NAMESERVER`; do
echo "Removing $ns from /etc/resolv.conf"
cat /etc/resolv.conf | grep -v "nameserver $ns" > /tmp/resolv.conf
mv /tmp/resolv.conf /etc/resolv.conf

done
fi

perché ne hai bisogno dns=dns?
Wang,

Questa sarebbe una domanda per Gronke, penso che sia anche un po 'strano. Da quando ho scritto il mio commento, sono passato all'utilizzo di un adattamento di questo script che non utilizza affatto la variabile "dns". Non ho osservato alcun cambiamento nel comportamento a causa dell'omissione.
Gadgeteering,

1

Esiste la possibilità di far funzionare NetworkManager sostituendolo manualmente /etc/resolv.conf. Fai attenzione che si tratta di un vero trucco e non può essere considerata una soluzione valida per ogni situazione.

#!/bin/bash
case "$2" in
    vpn-up)
    tmp=$(mktemp)
    func=$(mktemp)
    echo 'ping -c 1 -w 1 -q $1 > /dev/null ;
          if [ 0 -eq $? ]; then echo $1; fi' > $func
    grep -v "^#" /etc/resolv.conf > $tmp
    grep -rl type=vpn /etc/NetworkManager/system-connections \
        | xargs -n 1 sed -rne 's|dns=||p' \
        | sed -re 's|;|\n|g' \
        | grep -v "^\s*$" \
        | xargs -n 1 bash $func \
        | sed -re "s|(.*)|nameserver \1|" \
        | cat - $tmp \
        > /etc/resolv.conf
    rm -f $tmp $func;;
    vpn-down) resolvconf -u;;
esac

Questo script dovrebbe essere collocato sotto /etc/NetworkManager/dispatcher.d; dovrebbe essere eseguibile e di proprietà di root. Legge tutte le configurazioni VPN di NetworkManager che può trovare e riscrive /etc/resolv.confcon i nameserver accessibili che si trovano lì. Non scrive domaine searchrighe; ma permette di dimenticare il cattivo bug di NetworkManager.

Uso Ubuntu 16.04, funziona.


0

OpenVPN non è attualmente in grado di inviare le impostazioni DNS. Dovrai cambiare manualmente /etc/resolv.conf in modo che corrisponda al tuo server DNS (protetto). Ho appena eseguito un servizio BIND9 sulla stessa macchina del mio Access Server e lo indico tramite tunnel. Utilizzare l'indirizzo IP locale di quella macchina, ad es. 192.168.1.110

In bocca al lupo!

Diaspro


Con la risposta di Bruce Li, il file /etc/resolv.conf viene automaticamente modificato
greuze,

0

Ho un client OpenSUSE che non usa resolvconf, né systemd-networkd, ma sono stato in grado di modificare lo update-resolv-confscript comune per lavorare con il nmclicomando di NetworkManager :

#!/usr/bin/env bash
#
# Parses DHCP options from openvpn to update resolv.conf
# To use set as 'up' and 'down' script in your openvpn *.conf:
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
#
# Example envs set from openvpn:
# foreign_option_1='dhcp-option DNS 193.43.27.132'
# foreign_option_2='dhcp-option DNS 193.43.27.133'
# foreign_option_3='dhcp-option DOMAIN be.bnc.ch'
# foreign_option_4='dhcp-option DOMAIN-SEARCH bnc.local'

case $script_type in

up)
    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" || "$part2" == "DOMAIN-SEARCH" ]] ; then
                IF_DNS_SEARCH="$IF_DNS_SEARCH $part3"
            fi
        fi
    done
    if [ -n "$IF_DNS_SEARCH" ]; then
        nmcli connection modify "${dev}" ipv4.dns-search "$IF_DNS_SEARCH"
    fi
    if [ -n "$IF_DNS_NAMESERVERS" ]; then
        nmcli connection modify "${dev}" ipv4.dns "$IF_DNS_NAMESERVERS"
    fi
    nmcli connection up "${dev}" # Force NM to reevaluate the properties
    ;;
esac

# Workaround / jm@epiclabs.io 
# force exit with no errors. Due to an apparent conflict with the Network Manager
# $RESOLVCONF sometimes exits with error code 6 even though it has performed the
# action correctly and OpenVPN shuts down.
exit 0

Non ha un downgestore perché NetworkManager rimuove automaticamente i parametri nameservere search(ricerca DNS) al termine della connessione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.