GNU/Linux >> Znalost Linux >  >> Linux

Nakonfigurovat server DNS podle rozhraní nic (eth0 / eth1)?

Nemůžete snadno dělat, co chcete.

Nebo jak nakonfiguruji jiný DNS Name Server pro eth0 vs eth1?

Vyhledávání názvu pro název hostitele probíhá prostřednictvím standardních systémových knihoven a není nijak spojeno s konkrétním „připojením“. Ve skutečnosti v době, kdy dojde k dotazu DNS, existuje žádné připojení, protože vaše aplikace ani nezjistila adresu, ke které se připojí (což je důvod, proč v první řadě používá DNS).

Jak dosáhnu toho, aby respektoval nastavení DNS v ifcfg místo výchozího nastavení pro resolv.conf?

Překladač Linuxu má pouze jedinou globální konfiguraci (/etc/resolv.conf ). Neexistuje žádné nastavení pro jednotlivá rozhraní, doménu nebo připojení jakéhokoli druhu. Nastavení v /etc/sysconfig/network-scripts/... se používají pouze k naplnění /etc/resolv.conf a obecně, pokud zadáte DNS1 a DNS2 v těchto souborech se jako poslední objeví rozhraní, které vidíte v /etc/resolv.conf .

Existuje lepší způsob, jak to vyřešit?

Můžeš nám říct, čeho se vlastně snažíš dosáhnout? Možná budeme schopni navrhnout lepší řešení, pokud nám sdělíte více o své konkrétní situaci.


DNS požadavek je v podstatě buď

  1. „jaká je IP adresa hostitele1.domena1.com“ nebo
  2. "jaké je jméno hostitele 192.168.0.5."

Takže v době "žádosti" není známo, která ethernetová karta se bude týkat. Co jste mohli rozumně požádat by bylo "všechny požadavky končící na 'domain1.com' by měly jít na 192.168.0.2 a všechny ostatní požadavky by měly jít na 10.0.0.2."

A podobně:"Všechny reverzní požadavky DNS odpovídající 192.168.0.0/24 by měly přejít na 192.168.0.2 a zbytek by měl jít na 10.0.0.2."

Jak řekl Larsks, Linux takovou konfiguraci nepodporuje. Můžete však provozovat svůj vlastní minimální server DNS, který implementuje výše uvedenou logiku a přeposílá požadavky na příslušný „skutečný“ server DNS.

Věřím, že to dnsmasq dokáže (viz Jak nakonfigurovat dnsmasq pro předávání více serverů DNS?). Ale než jsem to zjistil, stočil jsem svůj vlastní v 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. Nakonfigurujte klienty OpenVPN tak, aby používali konkrétní server DNS

  2. Nakonfigurujte server MariaDB na CentOS

  3. Vytvořte server DNS

  1. Jak nakonfigurovat propojení rozhraní (NIC Teaming) na Oracle Linux 6

  2. Centos 7 :Konfigurace serveru DNS

  3. Co znamená název rozhraní eth0 v Linuxu?

  1. Nakonfigurujte klíč RNDC pro server Bind DNS na CentOS 7

  2. Jak nakonfigurovat server DNS na CentOS 5 / RHEL 5

  3. Nakonfigurujte Active Directory s integrovaným DNS