it-swarm.com.de

NetworkManager ändert /etc/resolv.conf nach openvpn dns push nicht

Ich habe ein Problem: "NetworkManager aktualisiert /etc/resolv.conf Nach der OpenVPN-Verbindung mit konfiguriertem DNS-Push nicht.".

Hier ist meine openvpn-Serverkonfiguration: ( Ich habe den Domainnamen aus Sicherheitsgründen in ABC.COM geändert;) )

########################################
# 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

Wie Sie sehen können, handelt es sich um eine grundlegende Beispielkonfiguration mit wenig Abstimmung.

Jetzt..

Auf meinem Computer (openvpn-Client) kann ich sehen, dass DNS in Ordnung ist:

{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

openVPN-Protokolle auf der Serverseite sagen (wenn ich das richtig verstehe), dass DNS gepusht wurde:

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, [email protected]
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, [email protected]
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)

openvp logs auf meiner Seite:

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, [email protected]
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, [email protected]
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

Es sieht so aus, als wäre alles in Ordnung.

Aber. Ich habe auch /var/log/messages Geprüft ... und diese Zeile gefunden:

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

ip a Gibt zurück:

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 Gibt zurück:

# 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

Im Grunde funktioniert also alles, außer dass der DNS gepusht wird ... Oh! Richtig und mein /etc/resolv.conf:

# Generated by NetworkManager
domain home
search home
nameserver 10.123.123.1

Wo ist das Problem?

(Ich habe eine Antwort vom Windows-Benutzer mit dem OpenVPN-Client, dass DNS auf seiner Seite gut funktioniert, daher ist es ein Problem auf meiner Seite.

Ok, jetzt habe ich eine andere Antwort (nachdem ich den openvpn-Dienst auf der Serverseite neu gestartet habe) - es funktioniert nicht.

Ich muss sagen, dass es gestern auch auf meinem Computer funktioniert hat. Habe ich also etwas auf dem Server vermasselt? Was könnte es sein? )

Edit : Okay, ich habe eine weitere Windows-Benutzerantwort (derselbe Benutzer wie zuvor) - es funktioniert jetzt. Also .. ich denke, es wurde durch openvpn Neustart und einige Verzögerungen damit verursacht. Ich habe seitdem nichts mehr getan. Also sind wir wieder auf meiner Maschine.

Ich habe auch festgestellt, dass diese seltsame tun0 - Nachricht auch gestern aufgetaucht ist und gestern funktioniert hat. Oder habe ich selbst einen Eintrag zu resolv.conf Hinzugefügt? Ich erinnere mich nicht .. (verdammt)

24
jaor

Das funktioniert bei mir: http://www.softwarepassion.com/solving-dns-problems-with-openvpn-on-ubuntu-box/

Der wichtige Schritt ist das Hinzufügen der folgenden zwei Konfigurationszeilen zu Ihrer Client openvpn-Konfigurationsdatei:

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

Stellen Sie außerdem sicher, dass das Paket resolvconf auf dem Client installiert ist, da dieses update-resolv-conf Skript hängt davon ab.

Es funktioniert mit dem openvpn-Clientdienst oder -Befehl, um ihn manuell zu starten.

Der Ubuntu Network Manager tut dies jedoch nicht. Bisher ist dies ein Problem: https://bugs.launchpad.net/ubuntu/+source/openvpn/+bug/121111

24
Wenbing Li

Funktioniert für mich nach dem Deaktivieren von NetworkManagers eigenem dnsmasq.

Bearbeiten /etc/NetworkManager/NetworkManager.conf

 #dns=dnsmasq

und starten Sie NetworkManager neu

Sudo restart network-manager
12
Segavax

Endlich funktioniert (mit Standard NetworkManager und OVPN Plugin)

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 diesem Fall werden nach dem Herstellen der VPN-Verbindung alle DNS-Anforderungen an von VPN bereitgestellte DNS-Server geleitet, ohne dass Manipulationen mit dnsmasq-, Up/Down-/Dispatch-Hilfsskripten vorgenommen werden müssen.

2
Alter

Es ist möglich, DNS-Einstellungen in OpenVPN zu pushen. Wie in Ihrer Konfiguration erfolgt dies in der Serverkonfiguration mit der folgenden Zeile:

Push "dhcp-option DNS 10.20.30.40"

Dies funktioniert für mich von Anfang an unter Verwendung der Windows-GUI, erfordert jedoch für Linux-Systeme ein wenig Anstupsen. Für die Verbindung zu meinem Heimnetzwerk (derzeit mit Fedora 18) habe ich ein Skript von gronke auf GitHub ( https://github.com/gronke/OpenVPN-linux-Push ) verwendet, um die Aktualisierung zu automatisieren Prozess.

Um diese Skripte zu verwenden, habe ich meiner OpenVPN-Client-Datei Folgendes hinzugefügt:

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
1
Gadgeteering

Es besteht die Möglichkeit, NetworkManager zum Funktionieren zu bringen, indem /etc/resolv.conf Manuell ersetzt wird. Beachten Sie, dass dies ein ziemlicher Hack ist und nicht für jede Situation als gültige Lösung angesehen werden kann.

#!/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

Dieses Skript sollte unter /etc/NetworkManager/dispatcher.d Platziert werden. sollte ausführbar sein und im Besitz von root sein. Es liest alle NetworkManager-VPN-Konfigurationen, die es finden kann, und schreibt /etc/resolv.conf Mit den dort gefundenen zugänglichen Nameservern neu. Es werden keine domain und search Zeilen geschrieben. Aber es erlaubt, den bösen NetworkManager-Fehler zu vergessen.

Ich benutze Ubuntu 16.04, es funktioniert.

1
Sergey Fedorov

ich laufe unter Linux Ubuntu 18.04 und ich hatte das gleiche Problem. Die Skripte in den Abschnitten nach oben und unten funktionieren für mich nur, wenn ich das openvpn-Skript in der Befehlszeile ausführe, in meinem Fall jedoch das Openvpn mit der Network Manager-GUI ausführe. Um das Problem zu beheben, erstelle ich eine Regel im udev-System, um ein Skript auszuführen, das meine DNS-Nameserver sowie Domänen- und Such-Tags ändert.

Um die Aufgaben zu erledigen, benutze ich den Namen "exa", um die Schnittstelle als Beispiel zu benennen. Sie verwenden sicher den gewünschten Namen. Bitte achten Sie in allen Abschnitten der Aufgaben auf den Namen und ersetzen Sie ihn in allen Teilen.

1- Ändern Sie zuerst die Reihenfolge des Wortes "dns" in /etc/nsswitch.conf für die Zeile, die mit Hosts beginnt:

alt:

hosts:          files mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns myhostname

neu:

hosts:          files mdns4_minimal dns [NOTFOUND=return] resolve [!UNAVAIL=return] myhostname

2- Erstellen Sie als Nächstes ein Bash-Skript in /usr/local/bin/add_dns.sh und setzen Sie die Berechtigungen auf voll (777):

#!/bin/bash

sleep 5

mv /etc/resolv.conf /etc/resolv.conf.old
echo "nameserver 10.10.10.10" > /etc/resolv.conf
echo "nameserver 10.10.11.10" >> /etc/resolv.conf
echo "search domain.example.com" >> /etc/resolv.conf
echo "domain domain.example.com" >> /etc/resolv.conf

3- Erstellen Sie eine Regel in udev, /etc/udev/rules.d/74-exa-vpn.rules:

ACTION=="add", SUBSYSTEM=="net", ENV{INTERFACE}=="exa", RUN+="/usr/local/bin/add_dns.sh"

4- Laden Sie die udev-Konfiguration neu mit:

$ udevadm control --reload

5- Gehen Sie zur GUI des Netzwerkmanagers und anschließend zur Konfiguration des VPN-Profils. Gehen Sie als nächstes zur Registerkarte "Identität" -> "Erweitert": Geben Sie in der Option "Virutale Gerätetyp TUN und Name festlegen" den Namen "exa" ein und speichern Sie alle.

Das Gute ist, wenn ich das VPN trenne, ersetzt der Netzwerkmanager die vom udev-Skript erstellte Datei und ersetzt sie durch das Original.

0
Matias Moglia

OpenVPN kann derzeit keine Push-DNS-Einstellungen vornehmen. Sie müssen /etc/resolv.conf manuell ändern, um es Ihrem (gesicherten) DNS-Server anzupassen. Ich führe gerade einen BIND9-Dienst auf demselben Computer wie mein Access Server aus und zeige über einen Tunnel darauf. Verwenden Sie Ihre lokale IP-Adresse dieses Computers, z. B. 192.168.1.110

Viel Glück!

Jaspis

0
Jasper

Ich habe einen OpenSUSE-Client, der weder resolvconf noch systemd-networkd Verwendet, aber ich konnte das allgemeine update-resolv-conf Skript to ändern Arbeiten Sie mit dem Befehl nmcli von 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 / [email protected] 
# 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

Es gibt keinen down -Handler, da NetworkManager die Parameter nameserver und search (DNS-Suche) beim Beenden der Verbindung automatisch entfernt.

0
palswim