En guifi hay un paquete llamado dnsservices, que lo que hace es comunicarse con la web de guifi y de esta forma permite acceder a los dominios que crean los usuarios en la web y también se encarga de la resolución inversa de las ips de los nodos, de esta forma si hacemos un mtr o un traceroute, podremos ver el nombre del supernodo al cual estamos pasando en lugar de la IP. Esto nos permite poder seguir la traza de un paquete de tal forma que podemos saber exactamente por donde está pasando :)
Si además de nodos tienes servidores y varios dominios a gestionar, cosa que nos ocurre en marsupi, tenemos dos opciones, registrar nuestros dominios externos en la página web de guifi o gestionar los ficheros de zona directamente desde el bind.
Como queremos que los ficheros de zona queden un poco ordenados y sepamos en todo momento donde tenemos los equipos, además de que queremos hacer configuraciones un poco mas avanzadas que lo que nos permite la web de guifi, vamos a decantarnos por la segunda opción.
La otra cosa que vamos a hacer es crear 2 servidores maestros con la misma configuración.
Lo primero será crear el servicio dnsservices e instalarlo: wiki guifi.
El id del snpservices será el mismo en ambos servidores. Vamos a centrarnos pues con el “tuneo” de uno de los dos, al segundo simplemente le vamos a replicar los datos con rsync. Algunas personas me comentan que bind ya permite replicar los datos, pero te permite hacerlo en modo maestro-esclavo, yo lo que quiero son 2 maestros idénticos!
Una vez instalado dnsservices con el id correspondiente vamos a modificar un par de ficheros.
/etc/bind/named.conf
view "external" { match-clients { any; }; recursion no; include "/etc/bind/named.conf.ext.private"; zone "." IN { type hint; file "/etc/bind/named.root"; }; zone "guifi.net" IN { type slave; file "/var/cache/bind/internet.guifi.net"; masters { 109.69.8.6; }; }; zone "setup.guifi.net" IN { type forward; forward first; forwarders { 109.69.9.27; }; }; };
Ahora vamos a definir los ficheros de zona en
/etc/bind/named.conf.ext.private
allow-recursion { 192.168.0.0/16; 5.10.200.0/21; 109.69.8.0/21; 185.32.16.0/22; 2a00:1508::/32; localhost; }; // DOMINIO marsupi.org zone "marsupi.org" { type master; file "/etc/bind/public/marsupi.org.hosts"; }; // DOMINIOS socios zone "summercamp.cat" { type master; file "/etc/bind/public/summercamp.cat.hosts"; }; // SOCIOS MOVIMENTS.NET zone "moviments.net" { type master; file "/etc/bind/public/moviments.net.hosts"; };
En allow-recursion indicamos los rangos que pueden usar este servidor de DNS para consultar dominios en internet, es importante que un DNS que esté expuesto a internet tenga limitado qué rangos pueden hacer esto, ya que sino nos podemos encontrar con ataques de DDoS o DNS amplification.
También podemos ver algunos de los dominios que vamos a gestionar con este servidor de DNS (no voy a ponerlos todos porque es irrelevante y con estos tenemos suficiente para los ejemplos que quiero dar a conocer.
Ahora lo siguiente es crear el fichero de zona dentro del directorio /etc/bind/public/ que no existe y tendremos que crearlo.
root@v-aaron-dns:/etc/bind# mkdir public
Y dentro empezamos a crear los ficheros de zona para cada uno de los dominios. Tal como he comentado antes, pongo varios dominios porque cada uno de ellos tiene una configuración especial :)
Empezamos por marsupi.org.hosts
/etc/bind/public/marsupi.org.hosts
$TTL 1800 marsupi.org. IN SOA ns1.marsupi.org. root.marsupi.org. ( 2014042003 ; Numero de Serie (aammddxx) 10800 3600 604800 38400 ) IN NS ns1.marsupi.org. IN NS ns2.marsupi.org. IN MX 10 lists.marsupi.org. $INCLUDE /etc/bind/public/000-maquines-comunes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @ IN A 109.69.10.253 ;; DATACENTER 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ns1 1H IN A 109.69.10.254 lists 1H IN A 109.69.10.252 akira 1H IN CNAME v-akira-zimbra blackout 1H IN CNAME v-conway-www dudle 1H IN CNAME v-conway-www ldap 1H IN CNAME cobalt ldap1 1H IN CNAME cobalt map 1H IN CNAME v-conway-www monitor 1H IN CNAME burnell pad 1H IN CNAME v-euler-pad tasks 1H IN CNAME v-cobalt-dev stats 1H IN CNAME v-conway-www voip 1H IN CNAME v-captain-crunch ;; DATACENTER 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ns2 1H IN A 2.139.176.151 graf1 1H IN CNAME fermat irc 1H IN CNAME fermat ;; OTHER ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; autoconfig 1H IN CNAME cun ;; AUTODNS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; graf-barbara 5M IN A 88.18.14.54 graf-redondiella 5M IN A 83.57.38.84 graf-orereta 5M IN A 62.99.27.94 graf-pamirandi 5M IN A 85.52.164.50 graf-zgz1 5M IN A 77.230.200.180 graf-espinilla 5M IN A 83.59.251.128 graf-bcnmargarit0 5M IN A 188.77.223.19 graf-monforte 5M IN A 79.145.101.222 graf-santgregori 5M IN A 79.152.122.18 graf-sfeldc 5M IN A 83.50.166.69 graf-bressola-soler 5M IN A 195.6.104.124 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Viendo el fichero de zona, ahora se entiende porqué quería hacerlo directamente modificando los ficheros de zona! :P además de que tengo lo del autodns de marsupi para resolver ips dinámicas.
Creo que no hace falta entrar en detalles de porqué cada cosa, A a host, CNAME a subdominio, 1H 1 hora, 5M 5 minutos, etc. Es importante no definir un MX a una IP, nos va a generar problemas!
Arriba del todo tenemos una línea con un include, esto nos permite incluir un fichero con las maquinas físicas, así que podemos incluir este fichero externo a cualquier fichero de zona, con lo que sólo tendremos que modificar las ips de los hosts en éste fichero.
/etc/bind/public/000-maquines-comunes
;; DATACENTER 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; cobalt 1H IN A 109.69.10.254 v-conway-www 1H IN A 109.69.10.253 tesla 1H IN A 109.69.10.252 v-euler-pad 1H IN A 109.69.10.251 burnell 1H IN A 109.69.10.250 v-akira-zimbra 1H IN A 109.69.10.249 v-captain-crunch 1H IN A 109.69.10.248 v-cobalt-dev 1H IN A 109.69.10.247 v-aaron-happy 1H IN A 109.69.10.246 ;; DATACENTER 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fermat 1H IN A 2.139.176.151 ;;fermat 1H IN A 109.69.10.245 ;; GURB ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; v-giss 1H IN A 109.69.9.56 v-giss 1H IN AAAA 2a00:1508:1000::6d45:938 ;; OTHER ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; cun 1H IN A 94.23.214.100 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Aquí podemos ver la asignación a un host con IPv6, AAAA.
Ahora vamos a ver otro fichero de zona el cual reutiliza los dominios de marsupi
/etc/bind/public/moviments.net.hosts
$TTL 1800 moviments.net. IN SOA ns1.moviments.net. root.moviments.net. ( 2014042001 10800 3600 604800 38400 ) IN NS ns1.marsupi.org. IN NS ns2.marsupi.org. IN MX 10 mail.moviments.net. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @ IN A 109.69.10.253 ;; INFOESPAI ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;lists 1H IN A tesla.marsupi.org. llistes 1H IN A tesla.marsupi.org. cun 1H IN A 94.23.214.100 mail 1H IN A 94.23.214.100 www 1H IN CNAME v-conway-www.marsupi.org. ;; ESPECIFICS DOMINI ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; cursos 1H IN CNAME v-conway-www.marsupi.org. okupaskny 1H IN CNAME v-conway-www.marsupi.org. xarxacontratancaments 1H IN CNAME v-carmen-wwwestatiques.marsupi.org. insershow 1H IN CNAME v-carmen-wwwestatiques.marsupi.org. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Destacamos que cuando hacemos el CNAME llamamos a subdominio.marsupi.org. (el punto al final es importante). Luego no incluimos el fichero de hosts compartidos.
Para que el MX funcione, tiene que estar definido como A en el mismo fichero de zona.
Otro fichero de zona aún más simple el de summercamp.cat! que sólo tiene una página web!
/etc/bind/public/summercamp.cat.hosts
$TTL 1800 summercamp.cat. IN SOA ns1.summercamp.cat. root.summercamp.cat. ( 2014042001 10800 3600 604800 38400 ) IN NS ns1.marsupi.org. IN NS ns2.marsupi.org. ;;IN MX 10 smtp.summercamp.cat. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @ IN A 109.69.10.253 ;; INFOESPAI ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;lists 1H IN A tesla.marsupi.org. ;;llistes 1H IN A tesla.marsupi.org. ;;smtp 1H IN A v-akira-zimbra.marsupi.org. www 1H IN CNAME v-conway-www.marsupi.org. ;; ESPECIFICS DOMINI ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Como véis hay mas comentarios que líneas activas! lo he dejado todo preparado para que cuando quiera añadir algún servicio nuevo, como las listas, sea simplemente descomentar la línea! :)
Ahora es reiniciar bind9 y los cambios se aplican, para ver si hay errores tenemos que mirar el fichero de log /var/log/syslog o syslog.1
root@v-aaron-dns:/etc/bind/public# service bind9 restart
Para la replica, hace pocos días lo expliqué en otro post.
El script que tengo en este caso es:
/root/scripts/dns_primary_to_slave.sh
#!/bin/bash VAR=$(rsync -av --delete /etc/bind/public root@10.228.192.218:/etc/bind/ |wc -l) rsync --delete -av /etc/bind/named.conf.ext.private root@10.228.192.218:/etc/bind/ if [ "$VAR" -gt 4 ]; then echo "reboto bind ns2" ssh root@10.228.192.218 '/etc/init.d/bind9 restart' fi
Para hacerlo funcionar es necesario tener instalado rsync.
Y esto es todo! :)
RT @Blackhold_: Blog] dnsservices: interno por #guifinet , externo a mano http://t.co/ZCmA9V1lkj