• 1 voto(s) - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Dnsmasq en un Docker, tu servidor DNS local
#1
Hola

Llevo tiempo buscando la forma de tener un servidor de dns en la nas. No he encontrado nada que sea sencillo y visual, así que voy a describir como hacerlo con dnsmasq.

Se que hay un paquete dnsmasq qpkg disponible para ello en la web de qnapclub.eu. 
Como no quiero depender de sus contenidos (recordad lo que pasó con rtorrent que ahora esde pago   Dodgy ) voy a describirlo como lo he hecho con un contenedor.

Podemos hacerlo desde el Container Station, pero he preferido no hacerlo con él ya que cualquier fallo en la creación te obliga a repetir todo.
Muchos campos no son editables a posteri ( hay un docker llamada Portainer que si lo permite, pero eso es motivo de otro hilo )

Para crear el contenedor sólo hemos de tener acceso a una consola. Como siempre recomiendo putty

En previsión, nos interesa que los contenedores aunque sean desinstalados dejen sus datos y configuraciones para posteriores activaciones.
Es decir queremos que sean sus datos persistentes. Para ello crearemos una carpeta compartida llamada "Contenedores"

Luego accedemos a la consola y crearemos una red para nuestros contenedores. Por ejemplo la llamaremos "miscontenedores"
Código:
docker network create miscontenedores

Ahora sólo hemos de dar la orden de creación del contenedor. Podemos hacerlo línea a línea (que acaben en "\") o bien dar toda la cadena.
En el caso de toda la cadena sería
Código:
docker run -d -p 58080:8080 -p 192.168.X.Y:53:53/tcp -p 192.168.X.Y:53:53/udp --network=miscontenedores --restart always --name="dnsmasq" -v /var/run/docker.sock:/var/run/docker.sock -v /Contenedores/dnsmasq/:/etc/ --log-opt "max-size=60m" -e "HTTP_USER=usuarioweb" -e "HTTP_PASS=laclaveweb" jpillora/dnsmasq:latest

En el caso del parámetro -p 58080:8080 puedo cambiar el 58080 por otro puerto que NO sea usado por nuestra nas. No he puesto 8080:8080 ya que el 80808 suele ser el de QTS y nos daría conflictos.
Debemos cambiar 192.168.X.Y por la ip de la nas en nuestra red.
Cambiaremos "usuarioweb" y "laclaveweb" por las que queramos para definir el usuario y su clave vía web.
La opción --log-opt "max-size=60m" nos indica el tamaño máximo del log en MB, Podemos modificar su tamaño e incluso añadir --log-opt max-file=5, para indicar el número máximo de archivos de X MB a mantener
La última opción  "jpillora/dnsmasq:latest" nos indica que imagen del archivo de docker vamos a usar y su versión (la última).

Si os da errores, lo mejor es eliminar el contenedor y volver a escribir la orden (copiar y pegar).
La orden para eliminar el contenedor que hemos llamado "dnsmasq" sería:
Código:
docker rm dnsmasq

Una vez el docker esté funcionando, lo podremos ver desde el Container Station.
Ahora detenemos el contenedor "dnsmasq" desde el Container Station y editamos el archivo "/Contenedores/dnsmasq/dnsmasq.conf"
Dejamos un contenido similar al siguiente:

Código:
# si queremos revisar mas parametro ir a
#  http://oss.segetech.com/intra/srv/dnsmasq.conf
log-queries
no-resolv
# DNS de ibm y de cloudflare
server=9.9.9.9
server=1.1.1.1
strict-order
# nuestra lista personalizada de direcciones
address=/undominio.eu/192.168.25.1
address=/www.ekaitza.eu/192.168.25.1
address=/www.everest.eu/216.58.213.163
user=dnsmasquser
group=nobody
# IP del contenedor dnsmasq. Se ve en conmutador virtual y de red
listen-address=172.29.3.2


Las líneas que son del tipo "address=/www.everest.eu/216.58.213.163" indican que si hacemos una búsqueda de la dirección www.everest.eu, el servidor dnsmasq nos devuelve la ip "216.58.213.163".
Y la línea "address=/www.ekaitza.eu/192.168.25.1" hace si vamos a www.ekaitza.eu, intente ir a 192.168.25.1.

Debemos adaptarlo a nuestras necesidades de nuestra red.

Pero nos queda crear un par de archivo de permisos. Hay que crearlos en la carpeta compartida "/Contenedores/dnsmasq"
Creamos "passwd" con el siguiente contenido
Código:
dnsmasquser:x:1000:1000:Linux User,,,:/home/dnsmasquser:/bin/sh

Creamos el archivo "group" con el siguiente contenido:

Código:
nobody:x:1000:dnsmasquser

Una vez hecho esto, ya podemos arrancar nuestro servidor dns. 
Para ver que funciona hemos de agregarle algún cliente. y cual mejor que nuestro pc o mas. Así que editamos las propiedades de nuestra tarjeta de red y en servidor dns ponemos la ip de la nas en nuestra red local. Ahora para comprobar que funciona hacemos un ping a "www.everest.eu" y debería contestarnos con la ip 216.58.213.163. Es decir que si vamos a un navegador de internet y vamos (que no buscar) a https://www.everest.eu no presentará la web de www.google.es, que es la que corresponde a la ip que asociamos.

Si no encuentra en nuestra lista la dirección que tecleamos, le preguntará a los servidores de DNS públicos que pusimos en la configuración (a IBM y a CloudFlare)

¿Para que nos interesa un servidor de DNS interno?
Por ejemplo para evitar que los pequeños de la casa vayan a webs "maliciosas" y les enviemos a la de Disney  Wink  Ya se que es difícil poner puertas al campo, pero algo podemos hacer.

También sirve para llegar a determinadas máquinas de nuestra red en las que si tenemos un acceso externo vía https con su certificado adecuado.
Por ejemplo tenemos una web en nuestra nas (ip 192.168.0.25) con dirección externa "minas.myqnapcloud.com"
En la configuración del dns colocamos la línea "address=/minas.myqnapcloud.com/192.168.1.25"
Así cuando vamos a "https://minas.myqnapcloud.com" desde mi red local, iremos a la 192.168.1.25 y el certificado ssl coincidirá con la dirección a la que vamos.

Si queréis ver la consola y para metros del servidor por web, sólo hemos de ir a la dirección http://192.168.X.Y:58080
Desde esa misma web, podemos agregar direcciones y reiniciar el servicio.
   

Para dejarlo todo hecho, yo editaría la configuración del servidor dhcp de nuestra red para que nos asigne como servidor dns a la ip de nuestr nas. 
Recordad que lo hemos hecho manualmente únicamente para nuestro pc, pero es mejor dejarlo ya automatizado.

Incluso podemos poner como primer dns público a la ip de nuestro Pi-Hole. Con ello conseguimos primero ver si la dirección está en nuestro servidor dnsmasq, si no lo está le pasamos la consulta a nuestro Pi-Hole que nos quitará la " basura"  Wink. Y si Pi-Hole no lo encuentra, le pasará la peteción al DNS público que hayamos definido en él (evitar los de Google y usar los de CloudFlare).

Espero que os haya servido para probar dockers y el funcionamiento de un servidor de DNS.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny y TS-453Be) Ʀɐɯ0η
  Responder




Usuarios navegando en este tema: 1 invitado(s)