No puedes hacer fácilmente lo que quieres.
¿O cómo configuro un servidor de nombres DNS diferente para eth0 vs eth1?
La búsqueda de nombre para un nombre de host se realiza a través de bibliotecas estándar del sistema y no está asociada de ninguna manera con una "conexión" en particular. De hecho, en el momento en que ocurre la consulta de DNS, hay sin conexión, porque su aplicación ni siquiera ha averiguado la dirección a la que se va a conectar (razón por la cual está usando DNS en primer lugar).
¿Cómo hago para que respete la configuración de DNS en ifcfg en lugar de la predeterminada para resolv.conf?
El solucionador de Linux solo tiene una única configuración global (/etc/resolv.conf
). No hay configuración por interfaz, por dominio o por conexión de ningún tipo. La configuración en /etc/sysconfig/network-scripts/...
solo se usan para completar /etc/resolv.conf
y, en general, si especifica DNS1
y DNS2
en estos archivos, la última interfaz que aparecerá será la que ve en /etc/resolv.conf
.
¿Hay una mejor manera de manejar esto?
¿Puede decirnos lo que realmente está tratando de lograr? Es posible que podamos sugerirle mejores soluciones si nos brinda más información sobre su situación específica.
Una solicitud de DNS es básicamente
- "cuál es la dirección IP de host1.domain1.com", o
- "¿Cuál es el nombre de host de 192.168.0.5?"
Por lo tanto, no se sabe en el momento de la "solicitud" qué tarjeta Ethernet estará involucrada. Lo que pudiste preguntar razonablemente sería "todas las solicitudes que terminan en 'dominio1.com' deben ir a 192.168.0.2, y todas las demás solicitudes deben ir a 10.0.0.2".
Y del mismo modo, "Todas las solicitudes de DNS inverso que coincidan con 192.168.0.0/24 deberían ir a 192.168.0.2 y el resto debería ir a 10.0.0.2".
Como dijo larsks, Linux no admite esa configuración. Sin embargo, puede ejecutar su propio servidor DNS mínimo que implemente la lógica anterior y reenvíe las solicitudes al servidor DNS "real" apropiado.
Creo que dnsmasq puede hacer esto (ver ¿Cómo configurar dnsmasq para reenviar múltiples servidores DNS?). Pero antes de descubrirlo, lancé el mío en 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()