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.
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
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.)
Une mise à jour du client VPN que j'ai utilisé a résolu le problème. C'était le client OpenFortiGui pour Fortinet VPN.