web-dev-qa-db-fra.com

Résolveur: LAN, VPN et WAN résolution de noms

J'ai lu les pages de manuel sur resolv.conf et resolvconf et resolvconf.conf mais je ne comprends pas tout et je me sens un peu perdu sur la façon dont je pourrais (ahem) résoudre ce problème:

Scénario:

J'ai un réseau local avec un routeur qui agit en tant que DHCP et serveur de noms. Le serveur de noms résout tous les périphériques de ce réseau local sans TLD ou .lan. Par exemple, je peux résoudre avec nslookup, ping et tout autre nom d'outil tel que "nas" et "nas.lan" qui atteignent mon serveur NAS (serveur de stockage accessible au réseau). Tous les autres noms renvoient la demande aux DNS de mon FAI.

Mon resolv.conf ressemble donc à ceci:

# Generated by resolvconf
domain lan
nameserver 192.168.0.1

J'obtiens une résolution fine de tous les noms de réseaux locaux et WAN.

Je me connecte maintenant à un réseau privé virtuel Cisco au travail et resolvconf met à jour le resolv.conf pour:

# Generated by resolvconf
domain myworkplace.com
search myworkplace.com lan
nameserver 192.168.1.10
nameserver 192.168.1.11
nameserver 192.168.0.1

Et maintenant, je ne peux plus atteindre "nas" ou "nas.lan" sur mon réseau local, mais je peux atteindre "nas" et "nas.myworkplace.com" sur le VPN. Les noms WAN sont maintenant résolus par le VPN attribué aux noms 192.168.1.10 et le NAS que j'atteins de cette façon se trouve sur le VPN, pas sur mon réseau local (un autre serveur).

De plus: je n'ai pas réellement de conflit de noms de ce type, mais je le présente dans l'exemple apocryphe ici, car une solution doit clairement le prendre en compte.

Maintenant, ce que je voudrais réaliser est quelque chose comme ceci:

"nas.lan" est résolu sur mon réseau local NAS "nas.myworkplace.com" est résolu sur le VPN NAS "nas" est résolu en l'un ou l'autre en fonction de la configuration (astuces de résolution Les ndots de .conf sont réglés ici mais ils ne sont pas sûrs).

Mes questions:

  1. Est-ce même faisable avec resolvconf?
  2. Sinon, y a-t-il un autre moyen de le faire (par exemple, en utilisant dnsmaq au lieu de libc comme résolveur sur ma boîte?).

J'apprécie tous les conseils ici car je trouve que les pages de manuel sont difficiles à digérer et à déchiffrer avec un besoin spécifique comme celui-ci. J'ai cherché en ligne pendant un bon moment maintenant et curieusement, je n'ai trouvé que d'autres personnes qui posaient la même question (sans réponse) dans d'autres forums!

Ce n'est pas un problème unique à moi, ou ma découverte clairement. Quiconque se trouve sur un réseau local avec des périphériques qu’il souhaite voir là-bas, la connexion à un autre réseau local via un VPN semble rencontrer précisément ce problème de pouvoir résoudre uniquement les noms sur le VPN et non le réseau local alors qu’il est connecté, ce qui nécessite la fermeture du réseau VPN. Les noms de LAN encore.

1
Validator

Je suppose que la raison pour laquelle vous ne pouvez pas utiliser votre réseau local (DNS) lorsque vous utilisez le VPN est que le résolveur ne fait que deux tentatives par défaut:

Du manuel de resolv.conf:

tentatives: n définit le nombre de fois que le résolveur envoie une requête à ses serveurs de noms avant d'abandonner et de renvoyer une erreur à l'application appelante. La valeur par défaut est RES_DFLRETRY (actuellement 2, voir). La valeur de cette option est silencieusement limitée à 5.

Il faut donc essayer d’abord les deux serveurs DNS fournis par le VPN de votre entreprise et ensuite renvoyer une erreur. Vous pouvez définir tentatives sur 3 pour que votre DNS LAN soit également pris en compte.

L'inconvénient, c'est que cela ralentit vos requêtes DNS en attendant que le dernier serveur réponde enfin. Et vous envoyez toutes vos requêtes DNS à votre entreprise, ce qui a également un impact sur les performances et votre vie privée.

Je recommanderais d'utiliser Dnsmasq.

Vous pouvez ajouter un serveur DNS en amont par domaine dans une conf Dnsmasq avec un domaine spécifié, comme suit:

server=/lan/192.168.0.1

Et par défaut, dnsmasq interroge les serveurs en amont à partir du fichier /etc/resolv.conf.

Dans la section Notes de la page de manuel dnsmasq :

... Par défaut, dnsmasq lit /etc/resolv.conf pour découvrir les adresses IP des serveurs de noms en amont qu'il doit utiliser, car les informations y sont généralement stockées. Sauf si --no-poll est utilisé, dnsmasq vérifie l’heure de modification de /etc/resolv.conf (ou l’équivalent si le fichier --resolv-file est utilisé) et le relit s’il change. Cela permet aux serveurs DNS d'être définis de manière dynamique par PPP ou DHCP, car les deux protocoles fournissent les informations. ...

Donc, si votre client VPN modifie le resolv.conf, vous pouvez utiliser les deux si vous pouvez garder votre dnsmasq au-dessus du resolv.conf.

Mais je suppose que ce n’est pas ainsi que le VPN vous édite, vous essayez donc de désactiver les capacités DNS du VPN et d’ajouter manuellement les serveurs DNS de votre société à votre configuration dnsmasq:

server=/myworkplace.com/192.168.1.10
server=/myworkplace.com/192.168.1.11
server=192.168.0.1

Dans ce cas, toutes vos requêtes pour Internet et le réseau local allant à 192.168.0.1 et toutes les requêtes pour myworkplace.com sont adressées au DNS de votre société.

1
FSchndr
git clone https://github.com/timebandit1969/resolvchange.git

https://www.purebasic.com/download.php et téléchargez la version démo Linux de PureBasic x64, ne vous inquiétez pas, je ne pense pas que les limitations vous empêcheront de le compiler, je l'ai vérifié en dehors. Compilez (exécutez l'exécutable) resolvchange.pb chmod + x resolvchange démarrez vpn si vous en exécutez un et exécutez immédiatement resolvchange avec ce qui suit: ./resolvchange

0
Joe Pisco