DNS-Server per Nic-Schnittstelle konfigurieren (eth0 / eth1)?

9

Wie würden Sie einen DNS-Nameserver pro NIC-Schnittstelle (eth0 vs eth1) unter RHEL / Centos 6 konfigurieren?

Z.B

eth0 befindet sich im Subnetz 10.0.0.1/24

eth1 befindet sich im Subnetz 192.168.0.1/24

Alle über eth0 gesendeten Anforderungen sollten den DNS-Server 10.0.0.2 verwenden.

Alle über eth1 gesendeten Anforderungen sollten den DNS-Server 192.168.0.2 verwenden.

Ich habe hinzugefügt:

DNS1: 10.0.0.2> / etc / sysconfig / network-scripts / ifcfg-eth0

DNS1: 19.168.0.2> / etc / sysconfig / network-scripts / ifcfg-eth1

Diese Werte werden jedoch ignoriert und standardmäßig auf die Einstellung in resolv.conf "Nameserver 10.0.0.2" gesetzt. Wenn eth0 nicht verfügbar ist, werden Verbindungen über eth1 gesendet. DNS kann jedoch nicht mehr aufgelöst werden, da versucht wird, 10.0.0.2 zu erreichen .

  • Wie kann ich die DNS-Einstellungen in ifcfg anstelle eines Standardwerts für resolv.conf berücksichtigen?

  • Oder wie konfiguriere ich einen anderen DNS-Nameserver für eth0 als eth1?

  • Gibt es eine bessere Möglichkeit, damit umzugehen?

Aktualisiert

Wir haben zwei VLANs, jedes hat einen eigenen DNS-Server in seinem jeweiligen Subnetz. Diese übernehmen die Suche nach lokalem DNS (example.loc, guest.app usw.) sowie die Weiterleitung bei Bedarf.

Dies sind zwei separate Server an zwei separaten physischen Standorten. Wenn möglich, möchte ich lieber nicht einen Server über die beiden Subnetze ausführen (einer verarbeitet vertrauliche Daten).

Wenn eth0 ausfallen soll, muss eth1 weiterhin DNS-Anfragen stellen können.

Ich habe darüber nachgedacht, der resolv.conf zwei IPs hinzuzufügen und sie dann ausfallen zu lassen, wenn sie den Server im ersten Subnetz nicht erreichen kann, aber dies scheint unelegant zu sein (ich muss warten, bis der erste Server bei jeder DNS-Abfrage eine Zeitüberschreitung aufweist, wenn eth0 ist Nieder).

DevGav
quelle
1
Was ist Einstellung nameserver 10.0.0.2und nameserver 192.168.0.2in resolv.conf?
InternetSeriousBusiness
Wenn ein Subnetz vertrauliche Daten verarbeitet, wie Sie sagen, welches Geschäft hat dieser bestimmte Computer mit beiden Subnetzen verbunden?
Ansgar Wiechers

Antworten:

8

Sie können nicht einfach tun, was Sie wollen.

Oder wie konfiguriere ich einen anderen DNS-Nameserver für eth0 als eth1?

Die Namenssuche für einen Hostnamen erfolgt über Standardsystembibliotheken und ist in keiner Weise mit einer bestimmten "Verbindung" verknüpft. In der Tat ist nun mal die DNS - Abfrage zu der Zeit, es ist keine Verbindung, weil Ihre Anwendung aus der Adresse nicht einmal gedacht , an denen sie verbinden gehen (weshalb es DNS in erster Linie ist mit).

Wie kann ich die DNS-Einstellungen in ifcfg anstelle eines Standardwerts für resolv.conf berücksichtigen?

Der Linux-Resolver hat nur eine einzige globale Konfiguration ( /etc/resolv.conf). Es gibt keine Einstellungen pro Schnittstelle, pro Domäne oder pro Verbindung. Die Einstellungen in /etc/sysconfig/network-scripts/...nur bevölkern verwendet /etc/resolv.conf, und in der Regel , wenn Sie angeben , DNS1und DNS2in diesen Dateien, die letzte Schnittstelle zu kommen, was Sie sehen in /etc/resolv.conf.

Gibt es eine bessere Möglichkeit, damit umzugehen?

Können Sie uns sagen, was Sie tatsächlich erreichen wollen? Wir können möglicherweise bessere Lösungen vorschlagen, wenn Sie uns mehr über Ihre spezifische Situation erzählen können.

Larsks
quelle
Habe mich vorerst entschieden, nur /etc/resolv.conf zu bearbeiten und das Timeout zu verkürzen. Danke für deine Hilfe.
DevGav
Was mich verwirrt ist, dass DNS zwar keiner bestimmten Schnittstelle zugeordnet ist, weil noch keine Verbindung besteht, DNS-Server jedoch auf Schnittstellenebene angegeben werden müssen. scheint willkürlich: /
RubyTuesdayDONO
4

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?"

Zum Zeitpunkt der Anforderung ist also nicht bekannt, um welche Ethernet-Karte es sich handelt. Was Sie vernünftigerweise fragen könnten , wäre: "Alle Anfragen, die auf 'domain1.com' enden, sollten auf 192.168.0.2 und alle anderen Anfragen auf 10.0.0.2 gehen."

Und ebenso: "Alle Reverse-DNS-Anforderungen, die mit 192.168.0.0/24 übereinstimmen, sollten zu 192.168.0.2 und der Rest zu 10.0.0.2 gehen."

Wie bereits erwähnt, unterstützt Linux eine solche Konfiguration nicht. Sie können jedoch Ihren eigenen minimalen DNS-Server ausführen, der die obige Logik implementiert, und Anforderungen an den entsprechenden "echten" DNS-Server weiterleiten.

Ich glaube, dass dnsmasq dies kann (siehe So konfigurieren Sie dnsmasq, um mehrere DNS-Server weiterzuleiten? ). Aber bevor ich das herausfand, rollte ich meine eigene in 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()
Robert Fleming
quelle
1

Die Antwort auf alle Ihre drei Fragen ist jetzt vom System gelöst (Hervorhebung von mir):

Suchanforderungen werden gemäß den folgenden Regeln an die verfügbaren DNS-Server und LLMNR-Schnittstellen weitergeleitet:

Suchvorgänge für den speziellen Hostnamen "localhost" werden niemals an das Netzwerk weitergeleitet. (Einige andere spezielle Domänen werden auf die gleiche Weise behandelt.)

Single-Label-Namen werden mithilfe des LLMNR-Protokolls an alle lokalen Schnittstellen weitergeleitet, die IP-Multicasting ermöglichen. Suchen nach IPv4-Adressen werden nur über LLMNR auf IPv4 gesendet, und Suchen nach IPv6-Adressen werden nur über LLMNR auf IPv6 gesendet. Suchvorgänge für den lokal konfigurierten Hostnamen und den Hostnamen "Gateway" werden niemals an LLMNR weitergeleitet.

Multi-Label-Namen werden an alle lokalen Schnittstellen weitergeleitet, für die ein DNS-Server konfiguriert ist, sowie an den global konfigurierten DNS-Server, falls vorhanden. Adressensuchen aus dem verbindungslokalen Adressbereich werden niemals an DNS weitergeleitet.

Wenn Suchvorgänge an mehrere Schnittstellen weitergeleitet werden, wird die erste erfolgreiche Antwort zurückgegeben (wodurch die Suchzonen auf allen übereinstimmenden Schnittstellen effektiv zusammengeführt werden). Wenn die Suche auf allen Schnittstellen fehlgeschlagen ist, wird die letzte fehlgeschlagene Antwort zurückgegeben.

Das Routing von Suchvorgängen kann durch die Konfiguration von Domänennamen pro Schnittstelle beeinflusst werden. Siehe systemd.network (5) für Details. Suchvorgänge für einen Hostnamen, der in einer der Domänen pro Schnittstelle endet, werden ausschließlich an die entsprechenden Schnittstellen weitergeleitet.

Piotr Dobrogost
quelle