Как автоматически получить новый сервер имен при VPN-подключении

11

Я использую Ubuntu xenial 16.04

Мы используем openvpn для подключения к виртуальному частному облаку. Это облако имеет свой собственный DNS-сервер (как и наш локальный маршрут - дом или офис).

Когда я подключаюсь к VPN, все IP-адреса в этой сети доступны, но я не могу получить ни одного по имени хоста. Причина проста: файл resolv.conf по-прежнему показывает сервер имен моего локального офиса. Если я вручную перезаписываю resolv.conf, чтобы иметь правильный сервер имен, все хорошо.

Итак, как я могу заставить его автоматически перенастроить resolv.conf при подключении к VPN?

Могу ли я подключиться к системному событию и выполнить скрипт?

Кристиан Бонджорно
источник
1
Обычно есть возможность разрешить VPN выдвигать свой собственный DNS-сервер. Какой клиент вы используете - tunnelblick?
Райдер
Я использую официальный клиент openvpn. Где-то я читал, что процесс VPN не может обновить DNS.
Кристиан Бонджорно
Вы пробовали --register-dnsвариант? В качестве альтернативы есть параметры на стороне клиента, которые вы можете установить, такие как dhcp-options (обратная сторона инструкций здесь openvpn.net/index.php/open-source/documentation/howto.html#dhcp )
Райдер,

Ответы:

8

В пакете OpenVPN есть сценарий для этого /etc/openvpn/update-resolv-conf. Вам необходимо настроить его с помощью:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Это приведет к получению адресов DNS-серверов из dhcp-option DNSпараметров, переданных одноранговым сервером / сервером OpenVPN, и выполнит resolvconfсоответствующую настройку . Это обрабатывает dhcp-option DOMAINтакже.

Однако он не идеален, потому что это приведет к добавлению этих серверов имен в список существующих серверов имен вместо перезаписи списка серверов имен. Если вы используете можно использовать для перезаписи конфигурации DNS вместо preprending к нему.openresolv-x


Если вы используете systemd-resolved, вы можете использовать , /etc/openvpn/update-systemd-resolvedкакие крючки в systemd-revolvedвместо resolvconf.

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

На Debian этот скрипт находится в openvpn-systemd-resolved.

ysdx
источник
2
Выше этих двух строк вам также необходимо добавить script-security 2или запустить openvpnс помощью--script-security 2
32r34wgf3e
0

Вот решение, которое я придумал: есть переключатель, который позволяет вам запускать скрипт, когда туннель запущен и работает. Я использую этот переключатель, чтобы существенно перезаписать файл resolv.conf тем, который, как я знаю, является правильным. Это полный взлом, я знаю.

sudo openvpn --up reset-dns.sh --client client.ovpn

скрипт (reset-dns):

#!/bin/bash
cp ~/resolv.conf /etc/resolv.conf

Кроме того, для тех, кто говорит "OMG! Вы запускаете тот туннель как root!" Это не будет работать по-другому; еще до моего взлома DNS.

Я определенно открыт для лучшего пути. Сетевой менеджер для Ubuntu просто не будет работать. Я неоднократно обрезал билеты на Ubuntu

Кристиан Бонджорно
источник