Ubuntu 18.04 без разрешения DNS при подключении к openvpn
Когда я подключаюсь к сети 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
7 ответов
Я нашел решение в этом сообщении в блоге. Хотя упомянуто два решения, я предпочитаю использовать второе, потому что оно означает, что мой 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
(Я закомментировал исходные настройки вверх / вниз).
проблема
Файл /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, кажется, игнорирует его.
Решение
Ubuntu 18.04 использует
systemd-resolved
, так что все, что вам нужно сделать, это установить вспомогательный скрипт openvpn дляsystemd-resolved
с помощьюsudo apt install openvpn-systemd-resolved
Обновите свой
config.ovpn
файл, добавляющий эти строки:script-security 2 up /etc/openvpn/update-systemd-resolved down /etc/openvpn/update-systemd-resolved down-pre
Это вместо того, чтобы складывать и складывать
/etc/openvpn/update-resolv-conf
на конф.Чтобы предотвратить утечку DNS, вы должны добавить эту строку в конец
config.ovpn
файл (согласно этому комментарию к выпуску systemd):dhcp-option DOMAIN-ROUTE .
На самом деле, есть гораздо более простое решение этой проблемы. Проблема в DNS-трафике и в том, как это делает Ubuntu 18. По умолчанию переадресация IP отключена, что необходимо OpenVPN для обеспечения правильной работы сети. Все, что вам нужно сделать, это запустить следующую команду:
sudo nano /etc/sysctl.conf
Открыв этот файл, найдите строку, содержащую net.ipv4.ip_forward
, Если эта строка закомментирована, удалите знак # в начале строки (если она не закомментирована, у вас есть другая проблема). Сохраните файл и перезапустите ваш экземпляр сервера OpenVPN.
Это исправление не требует внесения каких-либо изменений в код клиента или OpenVPN после обновления до Ubuntu 18. Протестировано и подтверждено, что оно работает.
Однако это, очевидно, требует от вас администрирования сервера. И, к сожалению, ошибка существует для многих, кто просто подключается с 18.04 к серверу OpenVPN, который администрируется кем-то другим...
Проверено на 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
Если ваша система использует NetworkManager, вам может потребоваться только изменить приоритет DNS соединения в соответствии с этим ответом:
nmcli -p connection modify VPN_CONNECTION_NAME ipv4.dns-priority -1
В моем случае DNS обновлялся, но игнорировался, поскольку существующие DNS-серверы имели приоритет. Вам может понадобиться root /sudo
. Если это не сработает, попробуйте
ipv6.dns-priority
.
Я тоже пострадал. В моем случае я использую 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
Через несколько дней у меня будет больше опыта, решит ли это мою проблему или нет.
Если вам это тоже нужно, попробуйте это и оставьте комментарии!
Ура,
Майкл.
Ни одно из предложенных решений, ориентированных на CLI (не NetworkManager), мне не подошло (у меня даже нет
up
а также
down
линии в
myconfig.ovpn
).
Однако я обнаружил, что NetworkManager VPN, кажется, снова работает (он не работал год или два назад, поэтому тогда я переключился на openvpn CLI). Я его никак не настраивал: просто пытался активировать с соответствующими учетными данными.