systemd-resolved, resolvconf.service, resolvconf i openresolv. Dlaczego, który i jak?

12

Używam klienta VPN, który dodaje dwa serwery nazw /etc/resolv.conf. Wszystkimi moimi połączeniami zarządza Network-Manager.

Muszę używać tego klienta VPN do pracy VPN, ale po przejściu do Ubuntu systemd-resolvedw 16.10 mam problemy z połączeniem i DNS. Wygląda jak systemd-resolvedzmiany z /etc/resolv.confpowrotem do domyślnych serwerów nazw z jakiegoś powodu, który powoduje, że wewnętrzne strony nie są rozwiązywane. Patrzyłem na to trochę więcej i skończyło się na wymianie resolvconfz openresolv. To bardzo pomogło, ale wciąż systemd-resolvedresetuje się /etc/resolv.confpo pewnym czasie VPN.

Może być tak, jak połączenie jest aktywne lub po kilku minutach, a czasem wcale. Następnie wyłączyłem systemd-resolvedi systemd resolvconf.serviceuruchomiłem tylko openresolv. Wygląda na to, że wszystko działa dobrze.

Jest to jednak bardzo mylące. Czy istnieje powód korzystania systemd-resolvedz jednego z pozostałych? Zostało włączone w Ubuntu 16.10, więc pomyślałem, że musi być ku temu powód, ale wydaje się, że powoduje to kłótnię /etc/resolv.conf.

Byłoby wspaniale, gdybym mógł po prostu pobiec operesolvi wyjaśnić to. Przeczytałem na ten temat sporo, ale nadal nie rozumiem, dlaczego tak /etc/resolv.confjest zarządzane, tyle tylko, że kiedy systemdgo używam, nie mogę korzystać z mojego klienta VPN.

chrześcijanin
źródło
FWIW resolvconf.service jest właśnie tym, jak systemd obsługuje resolvconf. Z którego klienta VPN korzystasz? Jeśli użyłeś systemd-resolved, to resolv.conf jest dowiązaniem symbolicznym do jego prywatnego /run/systemd/resolve/resolv.confpliku. Możesz spróbować zarządzać połączeniami przez systemd-networkd.
pbhj

Odpowiedzi:

1

Udało mi się zmienić skrypt obsługujący te elementy konfiguracji w OpenVPN w Ubuntu (testowany 18.04). Oto łatka do tego:

--- /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

Musisz dodać następujące elementy do pliku konfiguracyjnego OpenVPN:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Anton
źródło
0

Z którego klienta VPN korzystasz? Miałem problemy z prostym OpenVPN, ale zainstalowanie wersji NM klienta rozwiązało problemy. Cóż, w większości przypadków nie mogłem zapobiec przepchnięciu trasy, ale to zupełnie inna sprawa.

Chodzi o to: twój klient VPN musi wiedzieć, jak wchodzić w interakcje z pomysłem systemd dotyczącym zarządzania usługą DNS. Nie polecam tego, ale możesz spróbować wyłączyć usługę resolvd ( systemctl disable systemd-resolved.service), aby sprawdzić, czy to poprawi, ale ostatecznie będziesz musiał uzyskać klienta, który rozumie, jak przesłać kaprys systemd :)

(Statek usystematyzowany płynął dawno temu, nie otwierajmy dyskusji na temat tego, dlaczego niektóre rzeczy zostały zrobione).

JayEye
źródło
Ten problem został rozwiązany w aktualizacji klienta VPN. Był to klient OpenFortiGui dla mojej pracy Fortinet VPN. Więc masz całkowitą rację, klient nauczył się systemd! :)
Christian
0

Aktualizacja klienta VPN, z którego korzystałem, rozwiązała (zamierzony gra słów) problem. Był to klient OpenFortiGui dla Fortinet VPN.

chrześcijanin
źródło