web-dev-qa-db-fra.com

systemd-resolu, resolvconf.service, resolvconf et openresolv. Pourquoi, lequel et comment?

J'utilise un client VPN qui ajoute deux serveurs de noms à /etc/resolv.conf. Toutes mes connexions sont gérées par Network-Manager.

Je dois utiliser ce client VPN pour mon réseau VPN professionnel, mais après qu'Ubuntu soit passé à systemd-resolved in 16.10, je rencontre des problèmes de connexion et de DNS. On dirait que systemd-resolved modifie /etc/resolv.conf en serveurs de noms par défaut pour une raison quelconque qui empêche la résolution des pages internes. J'ai examiné cette question un peu plus et j'ai fini par remplacer resolvconf par openresolv. Cela a beaucoup aidé, mais systemd-resolved réinitialise /etc/resolv.conf après que le VPN soit actif depuis un certain temps.

Cela peut être juste au moment où la connexion est établie ou après quelques minutes ou parfois même pas du tout. J'ai ensuite désactivé systemd-resolved et le systemd resolvconf.service et seulement exécuter openresolv. Cela fonctionne bien, semble-t-il.

Cependant, tout cela est très déroutant. Existe-t-il une raison d'utiliser systemd-resolved avec l'un des autres? Il a été activé dans Ubuntu 16.10, alors j’ai pensé qu’il devait y avoir une raison à cela, mais cela semble provoquer une bagarre autour de /etc/resolv.conf.

Ce serait formidable si je pouvais juste exécuter operesolv et obtenir ceci expliqué. J'ai lu pas mal de choses à ce sujet, mais je ne comprends toujours pas pourquoi /etc/resolv.conf est géré comme il est, mais lorsque j'utilise systemd, je ne peux pas utiliser mon client VPN.

12
Christian

J'ai réussi à changer le script qui gère ces éléments de configuration dans OpenVPN sous Ubuntu (testé le 18.04). Voici un patch pour ça:

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

Vous devrez ajouter les éléments suivants à votre fichier de configuration OpenVPN:

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

Quel client VPN utilisez-vous? J'avais des problèmes avec OpenVPN, mais l'installation de la version NM du client a résolu le problème. Eh bien, pour la plupart d'entre eux, je ne pouvais pas empêcher une route d'être poussée, mais c'est un problème complètement différent.

Le problème est le suivant: votre client VPN a savoir comment interagir avec l'idée de systemd de gérer le service DNS. Je ne le recommande pas, mais vous pouvez essayer de désactiver le service resolvd (systemctl disable systemd-resolved.service) pour voir si cela améliore les choses, mais vous devrez au bout du compte trouver un client qui comprendra la procédure de soumission aux caprices de systemd :)

(Le navire systemd a navigué il y a longtemps, n'ouvrons pas de discussion sur les raisons pour lesquelles certaines choses ont été faites.)

0
JayEye

Une mise à jour du client VPN que j'ai utilisé a résolu le problème. C'était le client OpenFortiGui pour Fortinet VPN.

0
Christian