Я использую сервер OpenVPN, работающий на маршрутизаторе, установленном с DD-WRT, и я использую его для маршрутизации всего трафика через VPN-сервер. Я подключаюсь к нему с нескольких устройств: ноутбуков Windows, устройств Android и Linux-машин. Проблема, которую я сейчас имею в последнее время, и раньше все работало нормально. Эта проблема возникает только на клиентских машинах с linux (ubuntu 16.04). Клиент ubuntu не получает адреса DNS-сервера автоматически. После некоторых исследований я обнаружил, что должен добавить следующее в конец конфигурации клиента:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Это не помогло, поэтому я добавил также:
dhcp-option DNS a.b.c.d
dhcp-option DNS e.f.g.h
IP-адреса берутся с маршрутизатора, и это заставляет работать. До сих пор было достаточно иметь «redirect-gateway def1» в конфигурации клиента.
Мне не нравится это решение добавления команд «dhcp-option DNS», потому что я должен следить за любыми изменениями DNS-сервера. Есть ли способ избавиться от добавления опции «dhcp-option DNS»?
У меня была та же проблема, но мне удалось ее решить, используя следующий хак: вместо up /etc/openvpn/update-resolv-conf я создал файл с именем up.sh в / etc / openvpn. Выполните команду sudo gedit /etc/openvpn/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
Сохраните его и запустите sudo chmod +x /etc/openvpn/up.sh Затем создайте еще один файл /etc/openvpn/down.sh и вставьте в него следующее:
#! /bin/bash
echo "Restoring original nameservers"
rm -f /etc/resolv.conf
ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
echo "Done restoring nameservers cheers"
Сохраните его и запустите sudo chmod +x /etc/openvpn/down.sh
Теперь удалите строки:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
И замените их на:
script-security 2
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh
Отредактируйте ваш /etc/systemd/resolved.conf - добавьте запись DNS:
DNS=8.8.8.8 8.8.4.4
Если вы потеряете свой DNS при подключении или отключении вашего соединения OpenVPN, запустите:
sudo systemctl restart systemd-resolved
(возможно, это может привести к тому, что в скрипте up / down для вашего соединения OpenVPN).
У меня была та же проблема, но мне удалось ее решить, используя следующий хак: вместо up /etc/openvpn/update-resolv-conf я создал файл с именем up.sh в / etc / openvpn. Выполните команду sudo gedit /etc/openvpn/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
Сохраните его и запустите sudo chmod +x /etc/openvpn/up.sh Затем создайте еще один файл /etc/openvpn/down.sh и вставьте в него следующее:
#! /bin/bash
echo "Restoring original nameservers"
rm -f /etc/resolv.conf
ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
echo "Done restoring nameservers cheers"
Сохраните его и запустите sudo chmod +x /etc/openvpn/down.sh
Теперь удалите строки:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
И замените их на:
script-security 2
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh
Отредактируйте ваш /etc/systemd/resolved.conf - добавьте запись DNS:
DNS=8.8.8.8 8.8.4.4
Если вы потеряете свой DNS при подключении или отключении вашего соединения OpenVPN, запустите:
sudo systemctl restart systemd-resolved
(возможно, это может привести к тому, что в скрипте up / down для вашего соединения OpenVPN).