OpenVPN, resolvconf et résolution de domaine DNS

8

Sur site1, je dois me connecter à site2 via OpenVPN. Une fois connecté, le site OpenVPN2 pousse un serveur de noms DNS et des options de recherche de domaine. Cela entraîne l'échec de toutes les résolutions de noms pour site1.

Exemple:

  1. Physiquement connecté sur site1, DHCP pousse les options DNS et resolvconf les gère.
    /etc/resolv.conf

    # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
    #     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
    nameserver 172.16.1.101
    nameserver 172.16.1.102
    search site1.internal.domain
    
  2. Ouvrez le tunnel OpenVPN vers site2, OpenVPN pousse l'option dhcp DNS et DOMAIN pour site2 et les /etc/openvpn/update-resolv-confpousse vers resolvconf.
    /etc/resolv.conf

    # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
    #     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
    nameserver 192.168.1.5
    nameserver 172.16.1.101
    nameserver 172.16.1.102
    search site2.internal.domain site1.internal.domain
    
  3. La résolution DNS fonctionne pour server.site2.internal.domain mais échoue pour server.site1.internal.domain

Existe-t-il un moyen pour que toute requête DNS ayant échoué vers site21 passe aux serveurs DNS de site1? Ou configurer resolvconf pour que seules les requêtes pour site2.internal.domain soient transmises au serveur de noms site2?

J'utilise une machine Ubuntu 14.04 sur site1, et le serveur OpenVPN sur site2 est une boîte pfSense 2.2. Je gère les deux sites, donc apporter des modifications de chaque côté n'est pas un problème. Les deux domaines sont à usage non public et interne uniquement.

Tim Jones
la source
Je dois ajouter que bien que l'ordinateur portable soit Ubuntu 14.04, je n'utilise pas NetworkManager.
Tim Jones
1
je suis intéressé de voir s'il existe un moyen flexible de rediriger les requêtes DNS vers différents serveurs, par exemple en vérifiant le FQDN .. :)
nass

Réponses:

1

Vous pouvez configurer un serveur de mise en cache local qui surveillera votre /etc/resolv.conf, car il est modifié par les resolvconfscripts, et essayez d'obtenir ses réponses de tous les serveurs de noms qui y sont répertoriés.

Sur de nombreux systèmes, il suffira d'installer le paquetage dnsmasq , en plus de resolvconf.

Les valeurs par défaut devraient « fonctionne » à condition que no-resolvet les no-polldirectives sont absents /etc/dnsmasq.confet l' lointerface est en haut de /etc/resolvconf/interface-order. Si un serveur de noms en amont renvoie des adresses IP arbitraires pour les adresses non résolubles, strict-orderdans dnsmasq.conf peut aider. Votre /etc/resolv.confdevrait seulement montrer nameserver 127.0.0.1.

Si vous préférez une configuration fixe ou que vous vous connectez à plusieurs réseaux indépendants et que vous souhaitez éviter de divulguer vos noms de réseaux privés trop tous les serveurs de noms, vous devez configurer dnsmasq pour interroger des serveurs spécifiques en fonction du domaine:

# /etc/dnsmasq.conf

# site1 servers
nameserver=/site1.internal.domain/172.16.1.101
nameserver=/site1.internal.domain/172.16.1.102

# site2 servers
nameserver=/site2.internal.domain/192.168.1.5

# default OpenNIC (optional, unless 'no-resolv' is set). 
server=51.15.98.97
server=172.104.136.243

Pour plus d'informations sur les options de dnsmasq, voir ici: http://oss.segetech.com/intra/srv/dnsmasq.conf

koniu
la source
0

resolv.conf liste tous les serveurs DNS disponibles. Tant que la première de la liste est opérationnelle, toutes les requêtes lui seront envoyées. Rien pour les autres sauf si le premier est en panne. Donc, si le premier serveur DNS de la liste est en place et connaît la réponse, il répond "Je le sais!", Sinon il dira "J'ai peur de ne pas savoir ...". Et c'est tout. Vous devez informer 192.168.1.5 (le serveur DNS de site2) de toutes les entrées de site1, et vice-versa bien sûr. Salutations

user4089
la source
0

Je n'ai pas essayé cela sur Ubuntu, mais j'ai pu obtenir une configuration similaire fonctionnant sur Arch Linux en utilisant openresolv et dnsmasq.

Toutes les modifications seront effectuées sur la machine client VPN. Le serveur VPN ne devrait pas avoir besoin de modifications car il inclut déjà le serveur de noms DNS et les options de recherche de domaine.

  1. Une fois connecté au VPN, utilisez resolvconf -lpour voir tous les fichiers resolv.conf. Déterminez le nom resolvconf de votre interface VPN (c'est-à-dire le X dans "resolv.conf from X"). Dans mon cas, c'était le cas, tun0que j'utiliserai dans la configuration restante.
  2. Installer dnsmasq
  3. Modifiez /etc/resolvconf.confpour ajouter ces options:

    private_interfaces=tun0
    name_servers="::1 127.0.0.1"
    dnsmasq_conf=/etc/dnsmasq-conf.conf
    dnsmasq_resolv=/etc/dnsmasq-resolv.conf
    
  4. Modifiez /etc/dnsmasq.confpour ajouter ces options:

    conf-file=/etc/dnsmasq-conf.conf
    resolv-file=/etc/dnsmasq-resolv.conf
    
  5. Exécutez resolvconf -upour générer les fichiers de configuration dnsmasq.

  6. Démarrez le dnsmasqservice et configurez-le pour démarrer au démarrage. Sur Arch, cela se fait en exécutant:

    systemctl start dnsmasq.service
    systemctl enable dnsmasq.service
    

L' name_serversoption indique à resolvconf de ne répertorier que les serveurs de noms /etc/resolv.conf(c'est- à -dire qu'il pointe vers votre instance dnsmasq locale). Les dnsmasq_options indiquent à resolvconf d'écrire à la place les serveurs de noms qui seraient entrés dans les /etc/resolv.conffichiers de configuration dnsmasq.

L' private_interfaceoption indique à resolvconf que les serveurs de noms fournis par cette interface (votre VPN) ne doivent être utilisés que lors de la résolution de noms d'hôtes qui se trouvent dans l'un des domaines spécifiés sur la searchligne. Il générera la configuration dnsmasq appropriée pour que cela se produise.

Avec cette configuration, les demandes d'hôtes sous site2.internal.domain doivent aller à 192.168.1.5, et toutes les autres demandes doivent aller à 172.16.1.101 ou 172.16.1.102.

Si votre système n'utilise pas IPv6, supprimez le :: 1 de l' name_serversoption.

cjm
la source