NetworkManager не изменяет/etc/resolv.conf после openvpn нажатие DNS

Лучшая практика должна всегда разделять Ваши Контроллеры домена от ВСЕХ других приложений. Я предложил бы понизить в должности DC, что Вам установили Exchange на и создание дополнительных двух DC серверы GL также.

Если бы Ваш на различных подсетях и Exchange находится на единственном DC для той сети, я предложил бы создать новый DC. Если это - небольшая сеть, не должно быть супер мощно, если Ваш на 2008/R2 можно даже посмотреть на выполнение RDOC (Удаленный Контроллер домена) с минимальной установкой.

22
задан 8 October 2014 в 16:51
8 ответов

У меня работает: http://www.softwarepassion.com/solving-dns-problems-with-openvpn-on-ubuntu-box/

Важный шаг добавляет следующие две строки конфигурации в ваш клиентский файл конфигурации openvpn:

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

Также убедитесь, что на клиенте установлен пакет resolvconf , потому что этот update-resolv-conf От него зависит сценарий .

Он работает с клиентской службой openvpn или командой для запуска вручную.

Однако диспетчер сети Ubuntu этого не делает. Пока это проблема: https://bugs.launchpad.net/ubuntu/+source/openvpn/+bug/1211110

23
ответ дан 28 November 2019 в 20:23

В OpenVPN можно нажать настройки DNS. Как и в вашей конфигурации, это делается в конфигурации сервера со следующей строкой:

push «dhcp-option DNS 10.20.30.40»

Это работает для меня с использованием графического интерфейса Windows, но это нужно немного подтолкнуть к системам Linux. Для подключения к моей домашней сети (в настоящее время используется Fedora 18) я использовал скрипт от gronke на GitHub ( https://github.com/gronke/OpenVPN-linux-push ) для автоматизации процесса обновления. .

Чтобы использовать эти сценарии, я добавил в свой файл клиента 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
1
ответ дан 28 November 2019 в 20:23

OpenVPN is currently unable to push DNS settings. You will have to manually change /etc/resolv.conf to match your (secured) DNS server. I just run a BIND9 service on the same machine as my Access Server and point to that via tunnel. Use your local IP adress of that machine eg 192.168.1.110

Good luck!

Jasper

0
ответ дан 28 November 2019 в 20:23

Работает на меня после отключения dnsmasq собственного NetworkManager

Редактирование /etc/NetworkManager/NetworkManager.conf

 #dns=dnsmasq

и перезапуск NetworkManager

sudo restart network-manager
12
ответ дан 28 November 2019 в 20:23

Есть возможность заставить NetworkManager работать, вручную заменив /etc/resolv.conf . Помните, что это настоящий взлом и не может рассматриваться как подходящее решение для каждой ситуации.

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

Этот сценарий следует разместить в папке /etc/NetworkManager/dispatcher.d ; должен быть исполняемым и принадлежать пользователю root. Он читает все конфигурации vpn NetworkManager, которые он может найти, и перезаписывает /etc/resolv.conf с найденными там доступными серверами имен. Он не записывает строки домен и поиск ; но это позволяет забыть о неприятной ошибке NetworkManager.

Я использую Ubuntu 16.04, это работает.

1
ответ дан 28 November 2019 в 20:23

Наконец-то работает (со стандартным NetworkManager и 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

В этом случае, как только VPN-соединение установлено, все DNS-запросы направляются на VPN-серверы без каких-либо манипуляций со скриптами помощника dnsmasq, up/down/dispatch.

2
ответ дан 28 November 2019 в 20:23

У меня есть клиент OpenSUSE, который не использует ни resolvconf , ни systemd-networkd , но мне удалось изменить общий сценарий update-resolv-conf на работать с командой NetworkManager nmcli :

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

У нее нет обработчика down , потому что NetworkManager автоматически удаляет сервер имен и search ( DNS search) при завершении соединения.

0
ответ дан 28 November 2019 в 20:23

Я работаю на linux ubuntu 18.04, и у меня была такая же проблема. Сценарии в разделах вверх и вниз работают для меня, только если я выполняю сценарий openvpn в командной строке, но в моем случае я запускаю Openvpn с графическим интерфейсом Network Manager. Чтобы решить эту проблему, я создаю правило в системе udev для выполнения сценария, который изменяет мои DNS-серверы имен, а также теги домена и поиска.

Для выполнения задач я использую имя «exa», чтобы назвать интерфейс в качестве примера. Вы обязательно используете то имя, которое хотите; Пожалуйста, позаботьтесь о названии во всех разделах задач и замените его во всех частях.

1- сначала измените порядок слова «dns» в /etc/nsswitch.conf для строки, начинающейся с hosts:

old:

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

new:

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

2- затем создайте bash скрипт в /usr/local/bin/add_dns.sh и установите все права доступа (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- создайте правило в udev, /etc/udev/rules.d/74-exa-vpn.rules:

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

4- перезагрузите конфигурацию udev с помощью:

$ udevadm control --reload

5- Перейдите в графический интерфейс сетевого менеджера и затем перейдите к конфигурации профиля VPN. Далее переходим во вкладку «identity» -> «Advanced»: в опции «установить виртуальное устройство типа TUN и имя» ставим имя «exa» и все сохраняем.

Хорошо, когда я отключаю VPN, сетевой менеджер заменяет файл, созданный сценарием udev, и заменяет его на оригинал.

0
ответ дан 12 April 2020 в 13:48

Теги

Похожие вопросы