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ď
- „jaká je IP adresa hostitele1.domena1.com“ nebo
- "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()