Клиент OpenVPN не получает информацию DNS

Я использую сервер 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»?

2
задан 4 November 2017 в 17:07

4 ответа

У меня была та же проблема, но мне удалось ее решить, используя следующий хак: вместо 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
2
ответ дан 18 July 2018 в 03:55

Отредактируйте ваш /etc/systemd/resolved.conf - добавьте запись DNS:

DNS=8.8.8.8 8.8.4.4

Если вы потеряете свой DNS при подключении или отключении вашего соединения OpenVPN, запустите:

sudo systemctl restart systemd-resolved

(возможно, это может привести к тому, что в скрипте up / down для вашего соединения OpenVPN).

0
ответ дан 18 July 2018 в 03:55

У меня была та же проблема, но мне удалось ее решить, используя следующий хак: вместо 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
2
ответ дан 24 July 2018 в 17:57
  • 1
    Было бы неплохо использовать такой скрипт для обновления resolv.conf, но, играя с ним, я понял, что foreign_option_1, foreign_option_2 и foreign_option_3 не содержат ничего, поэтому мне кажется, что клиент vpn не получает DNS но в этом случае я не понимаю, как это работает на других устройствах. – lorandsm 9 November 2017 в 03:45
  • 2
    Помните, что переменные не являются глобальными, они доступны только в оболочке, в которой вы запускаете openvpn, и в то время, когда процесс выполняется, поэтому сценарий должен быть вызван из конфигурации openvpn, чтобы продемонстрировать это, я создал скрипт show_dns со следующими строками: #!/bin/bash echo $foreign_option_1 echo $foreign_option_2 echo $foreign_option_3, и он покажет вам DNS-серверы, которые выталкиваются сервером. Не забудьте вызвать его, добавив строки script-security 2 up /etc/openvpn/show_dns в вашу конфигурацию openvpn – Garikai Dzoma 9 November 2017 в 12:30

Отредактируйте ваш /etc/systemd/resolved.conf - добавьте запись DNS:

DNS=8.8.8.8 8.8.4.4

Если вы потеряете свой DNS при подключении или отключении вашего соединения OpenVPN, запустите:

sudo systemctl restart systemd-resolved

(возможно, это может привести к тому, что в скрипте up / down для вашего соединения OpenVPN).

0
ответ дан 24 July 2018 в 17:57

Другие вопросы по тегам:

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