es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El resolutor DNS personalizado no está funcionando en Docker.

Estoy trabajando en un proyecto y he creado un resolvedor DNS personalizado utilizando el paquete net.

Tengo alrededor de 5000 servidores DNS. El programa funciona bien en mi máquina local, pero cuando intento ejecutarlo dentro del contenedor de Docker, me muestra un error como el siguiente:

lookup aaa.aaa.aaa en bbb.bbb.bbb:53: «dial udp: búsqueda»
«xxx.xxx.xxx.xxx»: ningún host encontrado

  • aaa.aaa.aaa: este es el nombre de dominio del que quiero obtener su dirección IP.
  • bbb.bbb.bbb: dirección IP del contenedor.
  • xxx.xxx.xxx.xxx: esta es la dirección IP del servidor DNS.

El segundo problema es que si uso este resolvedor con 8.8.8.8 o 1.1.1.1, funciona perfectamente tanto en mi host local como dentro del contenedor.

Esta es mi función Resolvedor. Estoy seguro de que la función funciona correctamente, pero quiero agregarla.

func Resolver(dnsClient, hostName string) ([]string, error) {

    r := &net.Resolver{
        PreferGo: false,
        Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
            d := net.Dialer{
                Timeout: time.Millisecond * time.Duration(10000),
            }

            return d.DialContext(ctx, network, dnsClient+":53")

        },
    }
    ip, err := r.LookupHost(context.Background(), hostName)

    return ip, err
}

También intenté usar el comando dig en Ubuntu con algunos de los servidores DNS de mi lista, pero obtuve el mismo error.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar relacionado con la configuración de red del contenedor de Docker.

    Cuando el programa se ejecuta en tu máquina local, es posible que pueda acceder directamente a los servidores DNS, pero cuando se ejecuta dentro de un contenedor, necesita pasar por la configuración de red del contenedor para alcanzar los servidores DNS.

    Para solucionar el problema, puedes intentar agregar la dirección IP del servidor DNS al conjunto de configuraciones de red del contenedor. Una forma de hacer esto es agregando el indicador --dns al ejecutar el comando docker run. Por ejemplo:

    docker run --dns xxx.xxx.xxx.xxx mi-imagen
    

    Esto establecerá el servidor DNS que será utilizado por el contenedor como xxx.xxx.xxx.xxx.

    Alternativamente, puedes intentar usar una biblioteca de resolución de DNS diferente que funcione mejor con contenedores de Docker, como la proporcionada por CoreDNS o la biblioteca de DNS de Google para Go.

Comments are closed.