Ubuntu 18.04 без разрешения DNS при подключении к openvpn

40

Когда я подключаюсь к сети VPN через Gnome Network-manager, я теряю разрешение DNS и на практике не могу получить доступ к ресурсам внутри сети VPN или за ее пределами.

Когда я использовал Ubuntu 16.04 и использовал VPN, /etc/resolv.conf/файл " " содержал DNS-серверы сети (VPN), которую я подключил. Теперь он всегда содержит следующие записи:

nameserver 127.0.0.53
search myprovider.com

Из того, что я понял, 127.0.0.53является адрес заглушки DNS, используемый system-resolved.

Я подозреваю, что это ошибка, потому что VPN работал нормально на Ubuntu 16.04. Можно ли как-то настроить DNS-серверы моей сети, когда я использую службу VPN?

Обновить:

Я попытался соединиться с сетью OpenVPN с файлом конфигурации, приложенным в конце сообщения, но я получаю следующую ошибку:

 Authenticate/Decrypt packet error: cipher final failed

Я проверил, что сервер использует сжатие lzo, и я также включил его. Соединение остается активным, но я не могу перейти ни на одну страницу внутри или за пределами VPN.

В файле конфигурации, указанном ниже, я включил решения, опубликованные в ответах

 client
 dev tun
 proto udp
 remote openvpn.bibsys.no 1194
 remote my-server-2 1194
 resolv-retry infinite
 nobind
 user myuser
 group myuser
 persist-key
 persist-tun
 ca ca-cert.pem
 cert openvpn.crt
 key openvpn.key
 cipher AES-256-CBC
 comp-lzo yes
 script-security 2
 up /etc/openvpn/scripts/update-systemd-resolved
 down /etc/openvpn/scripts/update-systemd-resolved
 down-pre
Orestis
источник
1
При отладке аналогичной проблемы, которая не может быть решена точно так же, я использовал resolvectl statusи, resolvectl helpчтобы найти свое конкретное решение.
notbad.jpeg

Ответы:

27

Я нашел решение в этом сообщении в блоге . Хотя упомянуто два решения, я предпочитаю использовать второе, потому что оно означает, что мой DNS установлен сервером OpenVPN (первое решение означает, что я использую те же DNS-серверы, независимо от того, подключен я к серверу OpenVPN или нет).

Короче:

  • sudo mkdir -p /etc/openvpn/scripts
  • sudo wget https://raw.githubusercontent.com/jonathanio/update-systemd-resolved/master/update-systemd-resolved -P /etc/openvpn/scripts/
  • sudo chmod +x /etc/openvpn/scripts/update-systemd-resolved

Затем отредактируйте файл клиента OpenVPN (например, client.ovpn), изменив сценарии вверх / вниз на:

script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
up /etc/openvpn/scripts/update-systemd-resolved
down /etc/openvpn/scripts/update-systemd-resolved

(Я закомментировал исходные настройки вверх / вниз).

Энди Тёрфер
источник
Если вы используете утилиту gnome openvpn, где должен храниться файл config.ovpn?
orestis
1
config.ovpnне "найден" - это файл конфигурации клиента, используемый для подключения. Вы либо генерируете его, либо он выдается вам вашим провайдером OpenVPN (и он может не называться config.ovpn- он может называться как угодно client.ovpn).
Энди Турфер
Это работает просто отлично.
Ахсанул Хак
2
Я получаюWARNING: Failed running command (--up/--down): external program fork failed
болван
К сожалению, это не работает для vpn, который использует tcp, сайты за пределами vpn не разрешены, поэтому я начал использовать client.pritunl.com/#install, который оказался полезным
Saisurya Kattamuri
49

проблема

Файл /etc/resolv.confне обновляется /etc/openvpn/update-resolv-confсценарием, поскольку resolvconfпо умолчанию не установлен в Ubuntu 18.04.

Фактически, одна из первых строк этого скрипта проверяет наличие /sbin/resolvconfисполняемого файла:

[ -x /sbin/resolvconf ] || exit 0

Установка resolvconf через apt-getне является решением, так как /etc/openvpn/update-resolv-confскрипт обновляет /etc/resolv.confфайл с введенной записью DNS, но устройство tun, кажется, игнорирует его.

Решение

  1. Ubuntu 18.04 использует systemd-resolved, поэтому все, что вам нужно сделать, это установить вспомогательный скрипт openvpn для systemd-resolvedчерез

    sudo apt install openvpn-systemd-resolved
    

    или с этими инструкциями GitHub

  2. Обновите ваш config.ovpnфайл, добавив следующие строки:

    script-security 2
    up /etc/openvpn/update-systemd-resolved
    down /etc/openvpn/update-systemd-resolved
    down-pre
    

    Это вместо того, чтобы добавить и вниз /etc/openvpn/update-resolv-confк конф.

  3. Чтобы предотвратить утечку DNS, вы должны добавить эту строку в конец config.ovpnфайла (согласно этому комментарию к выпуску systemd ):

    dhcp-option DOMAIN-ROUTE .
    
Qlimax
источник
1
Большое спасибо, работая на меня в Ubuntu 18.04. И я хочу указать, что этот параметр script-security 2все еще необходим перед линиями вверх / вниз, в противном случае программа падает с ошибкой (OpenVPN 2.4.4)
lucidyan
Рад, что помогло :) Поменял последнее предложение в ответе, причем в моем случае script-security 2 не было необходимости. Это возможно, потому что я запускаю клиент openvpn от имени пользователя root (с помощью sudo)
Qlimax
1
@Qlimax Знаете ли вы, как мы можем импортировать эти настройки в клиент gnome openvpn?
orestis
2
@orestis вы должны установить этот пакет. sudo apt-get install network-manager-openvpn-gnome После этого вы сможете импортировать файлы конфигурации .ovpn в сетевой менеджер gnome. askubuntu.com/questions/187511/… Интерфейс менялся с течением времени, вы должны найти его в настройках-> сеть-> vpn
Qlimax
1
Удивило, что это работает для многих из вас: у меня есть файл ovpn.config, да, но NetworkManager, похоже, не использует его. Вы редактировали файл и повторно импортировали его, в частности, для замены скриптов up / downs. Потому что я вижу этот непрозрачный двоичный файл / usr / lib / NetworkManager / nm-openvpn-service-openvpn-helper, для которого я не смог найти документацию. Если требуется повторный импорт файла ovpn.config, измените ответ.
Харальд
5

На самом деле, есть гораздо более простое решение этой проблемы. Проблема в DNS-трафике и в том, как это делает Ubuntu 18. По умолчанию переадресация IP отключена, что необходимо OpenVPN для обеспечения правильной работы сети. Все, что вам нужно сделать, это запустить следующую команду:

sudo nano /etc/sysctl.conf

Когда вы откроете этот файл, найдите строку, в которой он содержится net.ipv4.ip_forward. Если эта строка закомментирована, удалите знак # в начале строки (если она не закомментирована, у вас есть другая проблема). Сохраните файл и перезапустите ваш экземпляр сервера OpenVPN.

Это исправление не требует внесения каких-либо изменений в код клиента или OpenVPN после обновления до Ubuntu 18. Протестировано и подтверждено, что оно работает.

Однако это, очевидно, требует от вас администрирования сервера. И, к сожалению, ошибка существует для многих, кто просто подключается с 18.04 к серверу OpenVPN, который администрируется кем-то другим ...

Максимум
источник
не работает для меня как вы определили, что это была проблема, в вашем случае?
HWJP
ВНИМАНИЕ: вам не нужно включать ip_forward на клиенте openvpn , НИКОГДА! это риск для безопасности. На сервере openvpn он может вам понадобиться, в зависимости от используемого конфига, и, вероятно, именно поэтому этот комментарий появляется.
Higuita
Это было для меня. Странная проблема. Спасибо.
Кевин C
2

Проверено на Ubuntu 18.04 13 сентября 2018

Есть еще полезные команды для настройки того, что вам нужно через командную строку. Но в моем случае вы можете управлять своим VPN-соединением как с помощью командной строки, так и с помощью графического интерфейса.

sudo nmcli connection add type vpn vpn-type openvpn con-name la.vpn.contoso.com ifname --

ifname -- является обязательным по умолчанию, но ни на что не влияет

sudo nmcli connection modify la.vpn.contoso.com ipv4.dns 172.16.27.1 sudo nmcli connection modify la.vpn.contoso.com ipv4.dns-search int.contoso.com sudo nmcli connection modify la.vpn.contoso.com ipv4.never-default yes

never-default не следует использовать удаленный шлюз в качестве маршрута по умолчанию

И еще много интересного, последний штрих:

nmcli connection modify la.vpn.contoso.com vpn.data 'ca = /tmp/la.vpn.contoso.com/you/ca.crt, key = /tmp/you.key, dev = tun, cert = /tmp/you.crt, cert-pass-flags = 1, comp-lzo = adaptive, remote = la.vpn.contoso.com:1194, connection-type = tls'

После этого вы можете управлять vpn с помощью GUI или использовать следующие команды:

sudo nmcli --ask connection up la.vpn.contoso.com sudo nmcli connection down la.vpn.contoso.com

vskubriev
источник
0

Я тоже пострадал. В моем случае я использую OpenVPN с внутренним сервером имен (который находится внутри VPN). Это работало до Ubuntu 17.10 (с "hosts: files dns" в /etc/nsswitch.conf).

/etc/resolv.conf был корректно обновлен сценариями openvpn (через вызовы / etc / openvpn / update-resolv-conf в файле конфигурации клиента openvpn).

Тем не менее, разрешение имен для хостов внутри VPN больше не работало (или, по крайней мере, время от времени ... Я думаю, локальный DNS-кэш выбирал имена, но через довольно долгое время).

То, что, кажется, помогает, или даже решает проблему (хотя это слишком рано, чтобы сказать), является установкой следующего пакета:

sudo apt установить openvpn-systemd-resolved

Через несколько дней у меня будет больше опыта, решит ли это мою проблему или нет.

Если вам это тоже нужно, попробуйте это и оставьте комментарии!

Ура,

Майкл.

Майкл Опденакер
источник
В конце концов, это не похоже на решение. У меня снова проблема. Я думаю, что-то еще заставило это работать ...
Майкл Опденакер
1
Может быть, тогда вы удалите свой ответ? Похоже, что решение уже найдено ниже
lucidyan