OpenVPN, resolvconf y resolución de dominio DNS


8

Mientras estoy en el sitio1, necesito conectarme al sitio2 a través de OpenVPN. Una vez conectado, el sitio2 de OpenVPN empuja un servidor de nombres DNS y opciones de búsqueda de dominio. Esto hace que todas las resoluciones de nombre para el sitio1 fallen.

Ejemplo:

  1. Físicamente conectado en el sitio1, DHCP empuja las opciones de DNS y resolvconf las administra.
    /etc/resolv.conf

    # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
    #     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
    nameserver 172.16.1.101
    nameserver 172.16.1.102
    search site1.internal.domain
    
  2. Abra el túnel OpenVPN en el sitio2, OpenVPN empuja dhcp-option DNS y DOMAIN para el sitio2 y los /etc/openvpn/update-resolv-confempuja a resolvconf.
    /etc/resolv.conf

    # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
    #     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
    nameserver 192.168.1.5
    nameserver 172.16.1.101
    nameserver 172.16.1.102
    search site2.internal.domain site1.internal.domain
    
  3. La resolución DNS funciona para server.site2.internal.domain pero falla para server.site1.internal.domain

¿Hay alguna forma de que una solicitud DNS fallida al sitio21 deba caer en los servidores DNS del sitio1? ¿O configura resolvconf para que solo las consultas para site2.internal.domain se pasen al servidor de nombres site2?

Uso una máquina Ubuntu 14.04 en el sitio1, y el servidor OpenVPN en el sitio2 es un cuadro de pfSense 2.2. Administro ambos sitios, por lo que hacer cambios a ambos lados no es un problema. Ambos dominios son de uso no público e interno únicamente.


Debo agregar que aunque la computadora portátil es Ubuntu 14.04, no uso NetworkManager.
Tim Jones

1
Estoy interesado en ver si hay una manera flexible de redirigir las consultas DNS a diferentes servidores, por ejemplo, verificando el FQDN .. :)
nass

Respuestas:


1

Puede configurar un servidor de almacenamiento en caché local que lo vigile /etc/resolv.conf, ya que se modifica mediante resolvconfscripts, e intente obtener sus respuestas de todos los servidores de nombres que se enumeran allí.

En muchos sistemas será suficiente instalar el paquete dnsmasq , además de resolvconf.

Los valores predeterminados deberían "funcionar" siempre no-resolvy cuando las no-polldirectivas estén ausentes /etc/dnsmasq.confy la lointerfaz esté en la parte superior /etc/resolvconf/interface-order. Si un servidor de nombres ascendente devuelve algunas direcciones IP arbitrarias para direcciones irresolubles, strict-orderen dnsmasq.conf puede ayudar. Tu /etc/resolv.confsolo debería aparecer nameserver 127.0.0.1.

Si prefiere una configuración fija o conectarse a múltiples redes no relacionadas y desea evitar filtrar los nombres de sus redes privadas a todos los servidores de nombres, debe configurar dnsmasq para consultar servidores específicos basados ​​en el dominio:

# /etc/dnsmasq.conf

# site1 servers
nameserver=/site1.internal.domain/172.16.1.101
nameserver=/site1.internal.domain/172.16.1.102

# site2 servers
nameserver=/site2.internal.domain/192.168.1.5

# default OpenNIC (optional, unless 'no-resolv' is set). 
server=51.15.98.97
server=172.104.136.243

Para obtener más información sobre las opciones de dnsmasq, consulte aquí: http://oss.segetech.com/intra/srv/dnsmasq.conf


0

resolv.conf enumera todos los servidores DNS disponibles. Mientras el primero de la lista esté en funcionamiento, se le enviarán todas las consultas. Nada para los demás a menos que el primero esté caído. Entonces, si el primer servidor DNS de la lista está activo y sabe la respuesta, él responderá "¡Lo sé!", De lo contrario dirá "Me temo que no sé ...". Y eso es todo. Debe informar a 192.168.1.5 (el servidor DNS del sitio2) de todas las entradas del sitio1 y viceversa, por supuesto. Saludos


0

No he probado esto en Ubuntu, pero pude obtener una configuración similar trabajando en Arch Linux usando openresolv y dnsmasq.

Todos los cambios serán en la máquina cliente VPN. El servidor VPN no debería necesitar ningún cambio porque ya incluye el servidor de nombres DNS y las opciones de búsqueda de dominio.

  1. Mientras está conectado a la VPN, use resolvconf -lpara ver todos los archivos resolv.conf. Calcule el nombre resolvconf de su interfaz VPN (es decir, la X en "resolv.conf from X"). En mi caso, fue tun0, lo que usaré en la configuración restante.
  2. Instalar dnsmasq
  3. Editar /etc/resolvconf.confpara agregar estas opciones:

    private_interfaces=tun0
    name_servers="::1 127.0.0.1"
    dnsmasq_conf=/etc/dnsmasq-conf.conf
    dnsmasq_resolv=/etc/dnsmasq-resolv.conf
    
  4. Editar /etc/dnsmasq.confpara agregar estas opciones:

    conf-file=/etc/dnsmasq-conf.conf
    resolv-file=/etc/dnsmasq-resolv.conf
    
  5. Ejecute resolvconf -upara generar los archivos de configuración dnsmasq.

  6. Inicie el dnsmasqservicio y configúrelo para que se inicie en el arranque. En Arch, esto se hace ejecutando:

    systemctl start dnsmasq.service
    systemctl enable dnsmasq.service
    

La name_serversopción le dice a resolvconf que solo enumere los servidores de nombres /etc/resolv.conf(es decir, apunta a su instancia local de dnsmasq). Las dnsmasq_opciones le dicen a resolvconf que escriba los servidores de nombres que habrían /etc/resolv.confingresado en los archivos de configuración de dnsmasq.

La private_interfaceopción le dice a resolvconf que los servidores de nombres provistos por esa interfaz (su VPN) deben usarse solo al resolver nombres de host que están en uno de los dominios especificados en la searchlínea. Generará la configuración dnsmasq adecuada para que eso suceda.

Con esta configuración, las solicitudes de hosts en site2.internal.domain deben ir a 192.168.1.5, y todas las demás solicitudes deben ir a 172.16.1.101 o 172.16.1.102.

Si su sistema no usa IPv6, elimine :: 1 de la name_serversopción.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.