GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Konfigurieren Sie einen DNS-Server per NIC-Schnittstelle (eth0 / eth1)?

Du kannst nicht einfach machen, was du willst.

Oder wie konfiguriere ich einen anderen DNS-Namensserver für eth0 vs. eth1?

Die Namenssuche nach einem Hostnamen erfolgt über Standardsystembibliotheken und ist in keiner Weise mit einer bestimmten "Verbindung" verbunden. Tatsächlich gibt es zum Zeitpunkt der DNS-Abfrage eine keine Verbindung, da Ihre Anwendung noch nicht einmal die Adresse herausgefunden hat, mit der sie sich verbinden wird (weshalb sie überhaupt DNS verwendet).

Wie bekomme ich es dazu, die DNS-Einstellungen in ifcfg zu respektieren, anstatt einen Standardwert für resolv.conf?

Der Linux-Resolver hat nur eine einzige, globale Konfiguration (/etc/resolv.conf ). Es gibt keinerlei Einstellungen pro Schnittstelle, pro Domäne oder pro Verbindung. Die Einstellungen in /etc/sysconfig/network-scripts/... werden nur verwendet, um /etc/resolv.conf zu füllen , und allgemein, wenn Sie DNS1 angeben und DNS2 In diesen Dateien wird als letzte Schnittstelle das angezeigt, was Sie in /etc/resolv.conf sehen .

Gibt es einen besseren Weg, damit umzugehen?

Können Sie uns sagen, was Sie eigentlich erreichen wollen? Wir können möglicherweise bessere Lösungen vorschlagen, wenn Sie uns mehr über Ihre spezifische Situation mitteilen.


Eine DNS-Anfrage ist grundsätzlich entweder

  1. "wie lautet die IP-Adresse von host1.domain1.com" oder
  2. "Wie lautet der Hostname von 192.168.0.5."

Es ist also zum Zeitpunkt der "Anfrage" nicht bekannt, welche Ethernet-Karte beteiligt sein wird. Was Sie könnten Eine sinnvolle Frage wäre:"Alle Anfragen, die mit 'domain1.com' enden, sollten an 192.168.0.2 gehen, und alle anderen Anfragen sollten an 10.0.0.2 gehen."

Und ebenso:„Alle Reverse-DNS-Anfragen, die mit 192.168.0.0/24 übereinstimmen, sollten an 192.168.0.2 gehen, und der Rest sollte an 10.0.0.2 gehen.“

Wie larsks sagte, unterstützt Linux eine solche Konfiguration nicht. Sie könnten jedoch Ihren eigenen, minimalen DNS-Server betreiben, der die obige Logik implementiert und Anfragen an den entsprechenden "echten" DNS-Server weiterleitet.

Ich glaube, dnsmasq kann dies tun (siehe Wie konfiguriere ich dnsmasq, um mehrere DNS-Server weiterzuleiten?). Aber bevor ich das herausfand, habe ich mein eigenes in Twisted gewürfelt:

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. So konfigurieren Sie den DNS-Server unter CentOS 5 / RHEL 5

  2. Konfigurieren Sie OpenVPN-Clients für die Verwendung eines bestimmten DNS-Servers

  3. Konfigurieren Sie Active Directory mit integriertem DNS

  4. Konfigurieren Sie den MariaDB-Server auf CentOS

  5. Erstellen Sie einen DNS-Server

So konfigurieren Sie den DNS-Server unter Ubuntu 18.04 / Ubuntu 16.04

So installieren und konfigurieren Sie den DNS-Server unter Ubuntu 16.04 LTS

So konfigurieren Sie DNS in Windows Server 2012

So installieren und konfigurieren Sie den DNS-Server unter Linux

Ubuntu 19.04:NTP-Server konfigurieren

Centos 7:NTP-Server konfigurieren