DNS Wildcards en GNU/Linux

Como comentaba en Posts anteriores, en unas semanas Nireblog se mudará a un Servidor dedicado donde tendremos el control total del servidor, debido a esto he empezado a trastear un poco con la distribución GNU/Linux más estable, Debian, ¿Porqué Debian?, por esto. (Ni que decir tiene que lo que explico a continuación se puede hacer exctamente igual en Ubuntu, Knoppix y demás distribuciones basadas en Debian y también en el resto Red Hat, Fedora, OpenSUSE, e incluso en FreeBSD …

Este es el primer Post de una serie en las que voy a ir explicando algunas cosillas de mis avances con esta distribución, por supuesto, no pretendo sentar cátedra (soy un aprendiz), es más si por alguna razón hago esto es para seguir aprendiendo, muchas de las cosas se podrán hacer mejor de otra manera y por eso pretende ser un documento abierto que pueda ser mejorado.

Para empezar vamos a montar un servidor Web y DNS con soporte para DNS Wildcards, que en cristiano significa hacer que todas las peticiones a cualquier subdominio sean aceptadas y vayan a la misma dirección, por ejemplo si ponemos en nuestro navegador nombre1.nireblog.com, nombre2.nireblog.com, … nombre99.nireblog.com todas esas peticiones apunten a la misma dirección en nuestro servidor web y luego mediante el .httaccess según el subdominio haremos una cosa u otra.

La ventaja de esta tecnica es que te evitas el tener que crear un subdominio con su propios ficheros por cada Blog creado en Nireblog, lo que haría que fuese todo mucho más dificil de gestionar.

Para empezar tenemos que tener instalado el Servidor Web Apache (para instalar apt-get install apache2) con el módulo mod_rewrite activado (para activar a2enmod rewrite ) y el servidor DNS BIND (para instalar apt-get install bind9).

En este caso nuestra dirección de red local será 192.168.0.1

Primero vamos a configurar el BIND

Vamos a donde están los archivos de configuración del BIND en la carpeta /etc/bind y editamos el fichero named.conf (vi named.conf), donde aparecen definidas las zonas / zone (localhost) añadimos los siguiente:


zone "nireblog.kom" {
type master;
file "/etc/bind/db.nireblog";
};

Utilizo una dirección inexistente (nireblog.kom) para que no se lie con alguna dirección de internet.

Ya tenemos la zona creada en la configuración ahora vamos a crear el archivo en donde van a estar las configuraciones de la zona nireblog.kom, en este caso /etc/bind/db.nireblog (vi /etc/bind/db.nireblog), podemos copiar alguno ya existente por ejemplo el db.local (cp db.local db.nireblog) y le incluimos lo siguiente:


$TTL 604800
@ IN SOA nireblog.kom. administrator.nireblog.kom. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
NS nireblog.kom
nireblog.kom. A 192.168.0.1
www A 192.168.0.1
*.nireblog.kom. A 192.168.0.1

Ahora ya sólo queda añadir en el archivo /etc/resolv.conf la dirección de nuestro servidor DNS, le añadimos la siguiente linea:

nameserver 192.168.0.1

Y reiniciamos el BIND /etc/init.d/bind9 restart

Ahora en teoría si intentamos resolver la dirección nireblog.kom nos resolvería la dirección 192.168.0.1 lo comprobamos con un

nslookup nireblog.kom

Y dará como resultado:


Server: 192.168.0.1
Address: 192.168.0.1#53

Name: nireblog.kom
Address: 192.168.0.1

Ahora vamos a configurar el Servidor Web Apache

Primero de todo creamos el fichero para nuestro nuevo sitio esto en apache2 se hace creando un ficherito en la carpeta /etc/apache2/sites-available creamos un fichero llamado nireblog con el siguiente contenido:


NameVirtualHost 192.168.0.1:80

ServerAdmin webmaster@nireblog.kom
ServerName nireblog.kom
ServerAlias *.nireblog.kom
DocumentRoot /var/www/nireblog

Las lineas que ha nosotros nos interesan son estas:


ServerName nireblog.kom
ServerAlias *.nireblog.kom
DocumentRoot /var/www/nireblog

En la primera linea de decimos el nombre del Servidor, en la segunda creamos un Alias para que acepte todas las peticiones (*) de subdomios de nireblog y en la tercera indicamos el directorio donde están los archivo que va a servir el servidor web.

Activamos el nuevo sitio a2ensite nireblog , esto lo que hace es crear un enlace en la carpeta /etc/apache2/sites-enabled del fichero /etc/apache2/sites-available/nireblog

Reiniciamos el Apache /etc/init.d/apache2 restart y listo ahora si ponemos desde nuestro navegador http://nombre1.nireblog.com nos tendría que mostrar el contenido del directorio /var/www/nireblog

Ahora lo que queremos hacer es que si alguien pide la dirección http://david.nireblog.kom le muestre el archivo /var/www/nireblog/index.php?user=david de esta manera y gracias al PHP podríamos mostrar un contenido distinto según el usuario.

Para ello existe el modulo (mod_rewrite), creamos el fichero /var/www/nireblog/.httaccess y ponemos lo siguiente:


#Primero Redireccionamos todas las peticiones http://www.nireblog.kom a nireblog.kom
RewriteCond %{HTTP_HOST} ^www\.nireblog\.kom [NC]
RewriteRule ^(.*)$ HTTP://nireblog\.kom/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^([a-z0-9_-]+)\.nireblog\.kom
RewriteRule ^$ index.php?user=%1 [L]

Ahora para probar que todo funciona bien creamos el fichero index.php con el siguiente contenido:

<?php

echo "Ésta es la página de: ". $_GET["user"];
?>

Como diría el de Bricomanía (o el que le imita) Y ya está, facil y sencillo.

Más información:

Wildcards hosting with Apache a Bind (inglés).

Esta entrada fue publicada en Software Libre, Trucos y etiquetada , , , , , . Guarda el enlace permanente.

Una respuesta a DNS Wildcards en GNU/Linux

  1. Miguel dijo:

    Zorionak tio!!🙂 Un gran trabajo el que te estás marcando en nireblog!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s