GNU/Linux >> Tutoriels Linux >  >> Linux

Configurer un serveur DNS par interface nic (eth0 / eth1) ?

Vous ne pouvez pas facilement faire ce que vous voulez.

Ou comment configurer un serveur de noms DNS différent pour eth0 vs eth1 ?

La recherche de nom pour un nom d'hôte s'effectue via des bibliothèques système standard et n'est en aucun cas associée à une "connexion" particulière. En fait, au moment où la requête DNS se produit, il existe pas de connexion, car votre application n'a même pas trouvé l'adresse à laquelle elle va se connecter (c'est pourquoi elle utilise le DNS en premier lieu).

Comment faire pour qu'il respecte les paramètres DNS dans ifcfg plutôt qu'une valeur par défaut pour resolv.conf ?

Le résolveur Linux n'a qu'une seule configuration globale (/etc/resolv.conf ). Il n'y a aucun paramètre par interface, par domaine ou par connexion d'aucune sorte. Les paramètres en /etc/sysconfig/network-scripts/... ne sont utilisés que pour remplir /etc/resolv.conf , et généralement si vous spécifiez DNS1 et DNS2 dans ces fichiers, la dernière interface à apparaître sera celle que vous voyez dans /etc/resolv.conf .

Existe-t-il une meilleure façon de gérer cela ?

Pouvez-vous nous dire ce que vous essayez réellement d'accomplir ? Nous pourrons peut-être suggérer de meilleures solutions si vous pouvez nous en dire plus sur votre situation spécifique.


Une requête DNS est essentiellement soit

  1. "quelle est l'adresse IP de host1.domain1.com," ou
  2. "quel est le nom d'hôte de 192.168.0.5."

Il est donc impossible de savoir au moment de la "demande" quelle carte Ethernet sera impliquée. Ce que vous pourriez raisonnablement demander serait "toutes les requêtes se terminant par 'domain1.com' doivent aller à 192.168.0.2, et toutes les autres requêtes doivent aller à 10.0.0.2."

Et de même, "Toutes les requêtes DNS inversées correspondant à 192.168.0.0/24 doivent aller à 192.168.0.2, et le reste doit aller à 10.0.0.2."

Comme l'a dit larsks, Linux ne prend pas en charge une telle configuration. Cependant, vous pouvez exécuter votre propre serveur DNS minimal qui implémente la logique ci-dessus et transmet les requêtes au "vrai" serveur DNS approprié.

Je pense que dnsmasq peut le faire (voir Comment configurer dnsmasq pour transférer plusieurs serveurs DNS ?). Mais avant de le découvrir, j'ai lancé le mien dans Twisted :

from twisted.internet import reactor
from twisted.names import dns
from twisted.names import client, server

class Resolver(client.Resolver):
  def queryUDP(self, queries, timeout=None):
    if len(queries) > 0 and (str(queries[0].name).endswith('.domain1.com'):
      self.servers = [('192.168.0.2', 53)]
    else:
      self.servers = [('10.0.0.2', 53)]
    return client.Resolver.queryUDP(self, queries, timeout)

resolver = Resolver(servers=[('10.0', 53)])
factory = server.DNSServerFactory(clients=[resolver])
protocol = dns.DNSDatagramProtocol(factory)

reactor.listenUDP(53, protocol, interface='127.0.0.1')
reactor.listenTCP(53, factory, interface='127.0.0.1')
reactor.run()

Linux
  1. Comment configurer le serveur DNS sur CentOS 5 / RHEL 5

  2. Configurer les clients OpenVPN pour utiliser un serveur DNS spécifique

  3. Configurer Active Directory avec DNS intégré

  4. Configurer le serveur MariaDB sur CentOS

  5. Créer un serveur DNS

Comment configurer le serveur DNS sur Ubuntu 18.04 / Ubuntu 16.04

Comment installer et configurer le serveur DNS sur Ubuntu 16.04 LTS

Comment configurer DNS dans Windows Server 2012

Comment installer et configurer le serveur DNS sous Linux

Ubuntu 19.04 :Configurer le serveur NTP

Centos 7 :Configurer le serveur NTP