Ubuntu 18.04 не має роздільної здатності DNS при підключенні до openvpn


40

Коли я підключаюся до мережі VPN через менеджер Gnome Network, я втрачаю роздільну здатність 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

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

48

Проблема

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

Насправді, один з перших рядків цього сценарію перевіряє наявність /sbin/resolvconfвиконавчого файлу:

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

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

Рішення

  1. Ubuntu 18.04 використовує systemd-resolved, тому все, що вам потрібно зробити, це встановити помічник скрипта openvpn для systemd-resolvedvia

    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файлу (відповідно до цього коментаря до системного випуску ):

    dhcp-option DOMAIN-ROUTE .
    

1
Дуже дякую, працюючи для мене на Ubuntu 18.04. І я хочу вказати, що цей параметр script-security 2все ще потрібен перед рядками вгору / вниз, інакше програма впаде з помилкою (OpenVPN 2.4.4)
lucidyan

Рада, що це допомогло :) Змінено останнє речення у відповіді, з моїм випадком script-security 2 не було потреби. Це, можливо, тому, що я запускаю клієнт openvpn як root (з судо)
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, схоже, не використовує його. Ви редагували файл та повторно імпортували його, зокрема для заміни сценаріїв вгору / вниз. Тому що я бачу цей непрозорий бінарний / usr / lib / NetworkManager / nm-openvpn-service-openvpn-helper, для якого я не міг знайти документацію. Якщо вам потрібен повторний імпорт ovpn.config, будь ласка, змініть відповідь.
Харальд

4

Власне, існує набагато простіше вирішення цієї проблеми. Проблема полягає в трафіку 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

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


0

Мене теж вражають. У моєму випадку я використовую OpenVPN з внутрішнім сервером імен (який знаходиться всередині VPN). Це працювало до Ubuntu 17.10 (із "господарями: файли dns" у /etc/nsswitch.conf).

/etc/resolv.conf було оновлено правильно скриптами openvpn (через дзвінки в / etc / openvpn / update-resolutionv-conf у файлі конфігурації клієнта openvpn).

Однак роздільна здатність імен для хостів всередині VPN вже не працює (або, принаймні, епізодично ... Я думаю, що локальний кеш DNS вибирав імена, але через досить тривалий час).

Що, здається, допомагає або навіть вирішує проблему (хоча це ще зарано говорити) - це встановити пакет нижче:

sudo apt встановити openvpn-systemd-вирішено

Через кілька днів у мене з’явиться більше досвіду, чи вирішує це проблема чи ні.

Якщо на вас теж впливають, будь ласка, спробуйте це та опублікуйте коментарі!

Ура,

Майкл.


Врешті-решт, це не здається рішенням. У мене знову проблема. Напевно, щось інше змусило це працювати ...
Майкл Опденакер

1
Може, тоді ви видалите свою відповідь? Здається, що рішення вже знайдено нижче
lucidyan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.