systemd-resolution, resolutionvconf.service, resolutionvconf і openresolv. Чому, що і як?


12

Я використовую клієнт VPN, який додає два сервери імен /etc/resolv.conf. Усіма моїми з’єднаннями керує Менеджер мережі.

Мені потрібно використовувати цей VPN-клієнт для моєї роботи VPN, але після того, як Ubuntu перейшов systemd-resolvedу 16.10, у мене виникли проблеми з підключенням та DNS. Схоже , systemd-resolvedзміни /etc/resolv.confна сервери імен по замовчуванням для будь - якої причини , що робить внутрішні сторінки не дозволяють. Я подивився на це ще трохи і в кінцевому підсумку замінити resolvconfз openresolv. Це дуже допомогло, але все-таки systemd-resolvedскидається /etc/resolv.confпісля того, як VPN деякий час працював.

Це може бути так, як підключення працює або через кілька хвилин, а іноді і зовсім. Потім я відключив , systemd-resolvedа systemd resolvconf.serviceй працювати тільки openresolv. Це все добре працює, здається.

Однак це все дуже заплутано. Чи є причина для використання systemd-resolvedз одним з інших? Це було ввімкнено в Ubuntu 16.10, тому я подумав, що в цьому повинна бути причина, але, здається, це може спричинити сутичку /etc/resolv.conf.

Було б чудово, якби я міг просто бігти operesolvі пояснити це. Я читав це досить багато, але все ще не розумію, чому /etc/resolv.confкерує таким, як це, лише те, що коли я використовую systemdдля нього, я не можу використовувати свій VPN-клієнт.


FWIW resolutionvconf.service - це якраз те, як systemd працює над resvconf. Який VPN-клієнт ви використовуєте? Якщо ви використовували системне рішення, воно робить resv.conf символьним посиланням на приватний /run/systemd/resolve/resolv.confфайл. Можливо, ви захочете спробувати дозволити systemd-networkd керувати своїми з'єднаннями.
pbhj

Відповіді:


1

Мені вдалося змінити скрипт, який обробляє ці елементи конфігурації у OpenVPN в Ubuntu (перевірено 18.04). Ось патч для цього:

--- /etc/openvpn/update-resolv-conf.orig    2019-03-13 19:14:16.163914424 +0400
+++ /etc/openvpn/update-resolv-conf 2019-03-13 19:29:30.380420708 +0400
@@ -15,7 +15,7 @@
 #     foreign_option_3='dhcp-option DOMAIN be.bnc.ch'
 #

-[ -x /sbin/resolvconf ] || exit 0
+[ -x /usr/bin/systemd-resolve ] || exit 0
 [ "$script_type" ] || exit 0
 [ "$dev" ] || exit 0

@@ -43,16 +43,16 @@
        fi
    done
    R=""
-   [ "$SRCHS" ] && R="search $SRCHS
-"
+   for SRCH in $SRCHS ; do
+       R="${R}--set-domain=$SRCH "
+   done
    for NS in $NMSRVRS ; do
-           R="${R}nameserver $NS
-"
+       R="${R}--set-dns=$NS "
    done
-   echo -n "$R" | /sbin/resolvconf -a "${dev}.openvpn"
+   /usr/bin/systemd-resolve -i ${dev} ${R}
    ;;
   down)
-   /sbin/resolvconf -d "${dev}.openvpn"
+   echo "Doing nothing, interface disappears."
    ;;
 esac

Вам потрібно буде додати в файл конфігурації OpenVPN такі елементи:

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

0

Який VPN-клієнт ви використовуєте? У мене виникли проблеми з прямим OpenVPN, але встановлення NM-версії клієнта усунуло проблеми. Ну, більшість із них я не міг запобігти просуванню маршруту, але це зовсім інше питання.

Суть в тому , клієнт VPN повинен знати про те , як взаємодіяти з ідеєю Systemd х роках , як управляти служби DNS. Я не рекомендую цього, але ви можете спробувати відключити службу Resolvd ( systemctl disable systemd-resolved.service), щоб побачити, чи покращує вона ситуацію, але в кінцевому підсумку вам доведеться знайти клієнта, який розуміє, як подати до капризів системи: :)

(Корабельний корабель плив давно, не давайте відкривати дискусію щодо того, чому деякі речі були зроблені.)


Цю проблему було вирішено під час оновлення клієнта VPN. Це був клієнт OpenFortiGui для моєї роботи Fortinet VPN. Отже, ви абсолютно праві, клієнт тепер навчився систематизовано! :)
Крістіан

0

Оновлення клієнта VPN, який я використав, вирішив (каламбур) призначив проблему. Це був клієнт OpenFortiGui для VPN Fortinet.

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