web-dev-qa-db-fra.com

comment configurer split-dns pour vpn avec network-manager

Je souhaite créer une configuration DNS fractionnée sur une machine de bureau 14.04 avec à la fois un réseau eth local et une connexion VPN. C'est-à-dire que je devrais envoyer des recherches DNS pour les plages d'adresses accessibles via le vpn aux serveurs DNS (privés) configurés pour cette connexion vpn particulière. Les autres adresses desservies via le réseau local doivent utiliser différents serveurs DNS (publics).

https://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/ suggère qu'il est facile à faire maintenant que nous disposons d'un résolveur dnsmasq local. Citation:

Le gros avantage est que si vous vous connectez à un VPN, au lieu de transférer tout votre trafic DNS via le VPN comme par le passé, vous n’enverrez que les requêtes DNS relatives au sous-réseau et aux domaines annoncés par ce VPN. Ceci est particulièrement intéressant pour les liens VPN à latence élevée où tout serait ralenti dans le passé.

Mais je n'arrive pas à comprendre comment faire fonctionner ce travail! Avec VPN, le gestionnaire de réseau inactif indique à Dnsmasq d’utiliser les serveurs DNS publics locaux comme serveurs en amont (ce qui est bien). Si j'active maintenant une connexion VPN, network-manager dit à Dnsmasq de remplacer les serveurs DNS en amont par des serveurs privés configurés pour la connexion vpn. Et maintenant tout mon trafic local va à VPN pour ses recherches DNS (c'est mauvais!).

Si j’avais une "vraie" configuration de dnsmasq, je pourrais lui dire dans dnsmasq.conf d’acheminer des recherches spécifiques vers des serveurs DNS spécifiques. Mais comment cela fonctionne-t-il avec la configuration simplifiée de dnsmasq/network-manager fournie avec le bureau Ubuntu?

Je suppose que l’une des options consiste simplement à installer le Dnsmasq complet, mais cela signifie donc que je dois conserver les détails de la configuration à deux endroits distincts, ce qui est le genre de problème que le gestionnaire de réseau surmonte le plus souvent. Aucune suggestion?

2
geo

Pour obtenir le dnsmasq contrôlé par D-Bus que NetworkManager exécute pour utiliser différents serveurs DNS, il existe les options suivantes (évidemment, ajuster les domaines et les adresses IP dans les exemples):

  • Ajoutez à /etc/NetworkManager/dnsmasq.d un fichier définissant le serveur DNS du sous-réseau souhaité: myvpn-server.conf pourrait contenir server=/myvpn.domain.com/10.8.4.9. Cela sera toujours respecté par Dnsmasq même s’il n’est pas connecté au VPN, auquel cas les requêtes relatives à ces domaines doivent expirer. L'inconvénient est que vous devez spécifier l'adresse IP de manière statique, l'avantage est la simplicité.
  • Utilisez D-Bus pour parler directement à Dnsmasq et lui dire de mettre à jour les serveurs en utilisant quelque chose comme Sudo dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager.dnsmasq /uk/org/thekelleys/dnsmasq uk.org.thekelleys.SetDomainServers "array:string:192.168.0.1,/myvpn.domain.com/10.8.4.9". Cela pourrait être scripté lorsque le vpn se connecte. Vous devez rechercher les serveurs DNS existants (le 192.168.0.1 dans mon exemple) via D-Bus ou à l'aide de nm-cli
  • Utilisez D-Bus pour parler à Network Manager lui-même et lui dire de mettre à jour les serveurs. Voici un exemple pour utiliser Python, ce qui nécessiterait un peu de travail pour inclure les serveurs actuels.

J'utilise la première option et je n'ai essayé que les versions préliminaires des deux autres

2
David Fraser

Vous recherchez probablement les champs Domaine de recherche DNS et Serveur DNS supplémentaire dans les onglets IPv4 et IPv6 de l'application nm-connection-editor.

Entrez simplement votre domaine d’entreprise et l’adresse IP du serveur DNS.

0
nextloop

Il s'agit probablement d'un problème de configuration côté serveur. Le serveur VPN doit uniquement envoyer les domaines qu'il peut résoudre.

Par exemple, si vous utilisez un serveur openvpn, une configuration utilisateur peut ressembler à ceci:

ifconfig-Push 172.16.0.51 255.255.255.0
Push "route 172.16.1.0 255.255.255.0 172.16.0.1"
Push "route 192.168.2.0 255.255.255.0 172.16.0.6"
Push "dhcp-option DNS 172.16.0.1"
Push "dhcp-option DOMAIN some.of.your.domains"
Push "dhcp-option DOMAIN another.domain"

Ainsi, votre client sait que votre serveur ne peut résoudre que les domaines spécifiés ici.

La configuration de Dnsmasq peut être assez minime si vous utilisez Networkmanager:

domain-needed
interface=lo
bind-interfaces

Un piège plus commun: vous devez configurer vos paramètres ip de connexion vpn dans networkmanager pour "utiliser la connexion uniquement pour les ressources de son réseau" (comme ici: https://brmlab.cz/_media/project/warzone/ nv-routes.png )

Sinon, le routage utilisera toujours votre connexion VPN sur la "vraie" interface. Les métriques sont normalement correctement définies par networkmanager (métrique plus élevée pour vpn que le réseau sous-jacent).

0
Till Schäfer