Лучшая практика должна всегда разделять Ваши Контроллеры домена от ВСЕХ других приложений. Я предложил бы понизить в должности DC, что Вам установили Exchange на и создание дополнительных двух DC серверы GL также.
Если бы Ваш на различных подсетях и Exchange находится на единственном DC для той сети, я предложил бы создать новый DC. Если это - небольшая сеть, не должно быть супер мощно, если Ваш на 2008/R2 можно даже посмотреть на выполнение RDOC (Удаленный Контроллер домена) с минимальной установкой.
У меня работает: 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
В 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
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
Работает на меня после отключения dnsmasq собственного NetworkManager
Редактирование /etc/NetworkManager/NetworkManager.conf
#dns=dnsmasq
и перезапуск NetworkManager
sudo restart network-manager
Есть возможность заставить 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, это работает.
Наконец-то работает (со стандартным 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.
У меня есть клиент 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) при завершении соединения.
Я работаю на 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, и заменяет его на оригинал.