Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas

lunes, 22 de octubre de 2012

Preparar un servidor DNS en Debian con bind

Buenos días/tardes/noches:

Hoy vamos a hablar de hacer un servidor DNS bajo Debian.
El servicio de nombres de dominio, DNS (Domain Name Service) es el encargado de traducir nombres legibles por humanos a direcciones de red en binario, que es lo que habla la máquina en realidad.

La dirección de mi web es contadordeprograma.blogspot.com, si te dijera que mi dirección es:
173.194.34.234 o 10101101.11000010.00100010. 11101010, seguramente no te quedarías con la copla y nuestra comunicación sería mejor por correo postal. Quizás unas cuantas, puede que si, con buena memoria, y como antaño recordando números de teléfono. Y si hay 1000, ¿podré?. Mejor hacer otra cosa: traducir. Es más fácil recordar nombres que números.
Nosotros no vemos la conversión, y lo que podemos hacer, es aún mejor, crearla y definirla.
Los sistemas tienen programas adecuados para ello. En su versión libre, presentaré BIND9 que es el estándar en esto, y lo instalaré bajo Debian 6.

Instalación:

root@nameserver:~# apt-get install bind9

Y santas pascuas,  ya está listo para empezar a usar. Lo que toca es configurarlo correctamente. 

Nuestra zona se va a llamar contador.int, que será el master de la zona. 
Nuestra red es de tipo 10.0.2.0/24

La primera operación que vamos a realizar es declarar que nuestro servidor, para sí mismo, va a ser el que resuelva los nombres. 
Para ello editaremos el archivo /etc/resolv.conf. Primero hacemos una copia de seguridad del mismo. Usaré el editor nano.

root@nameserver:~# mv /etc/resolv.conf /etc/resolv.conf.bak
root@nameserver:~# nano /etc/resolv.conf

nameserver 127.0.0.1

Guardamos y salimos (ctrl+O y ctrl+X). Con esto diremos que quien va a resolver y reducir los nombres será la misma máquina con la información que disponga.

entraremos al directorio donde trabajaremos que será /etc/bind/

root@nameserver:~# cd /etc/bind/

Si hacemos un ls -l veremos los siguientes archivos:


si hacemos un netstat -lan, veremos que la máquina está "escuchando" en el puerto 53 TCP y UDP. Que es el puerto que usa BIND.

Al lio:

Editamos el archivo named.conf.local y definiremos la zona de resolución directa e inversa. Es decir traducir de nombres a direcciones y de direcciones a nombres.

root@nameserver:/etc/bind# nano named.conf.local

añadimos las siguientes entradas:

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

//resolución directa
zone "contador.int"
{
        type master;
        file "/etc/bind/db.contador.int";
};
// resolución inversa

zone "2.0.10.in-addr.arpa"
{
        type master;
        file "/etc/bind/db.10.0.2";
};

Guardamos y salimos.

Como podemos observar en los dos casos referenciamos un archivo que aún no existe. Luego tendremos que crearlo. Para no tener que escribirlo del tirón (ya sabemos que los informáticos somos unos vagos) podemos hacer una copia de db.empty y editar.

root@nameserver:/etc/bind# cp db.empty db.contador.int
root@nameserver:/etc/bind# nano db.contador.int


; resolución directa para contador.int
$TTL    86400
@       IN      SOA     ns.contador.int. root.contador.int. (
                      201210221         ; Serial
                         604800         ; Refresh (1 semana)
                          86400         ; Retry (24 horas)
                        2419200         ; Expire (28 días)
                          86400 )       ; Negative Cache TTL (1 semana)
;
@       IN      NS      ns.contador.int.
ns      IN      A       10.0.2.253
router  IN      A       10.0.2.1
pc1     IN      A       10.0.2.2
pc2     IN      A       10.0.2.3

Lo mismo haremos para la configuración de resolución inversa.

root@nameserver:/etc/bind# cp db.empty db.10.0.2
root@nameserver:/etc/bind# nano db.10.0.2


; fichero de resolución inversa para 10.0.2.0
;
$TTL    86400
@       IN      SOA     ns.contador.int. root.contador.int. (
                      201210221         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      ns.contador.int.
253     IN      PTR     ns.contador.int.
1       IN      PTR     router.contador.int.
2       IN      PTR     pc1.contador.int.
3       IN      PTR     pc2.contador.int.

Como ultimo paso, asumimos que no vamos a ser un ISP, y tendremos que usar un redireccionador. Se puede elegir el servidor DNS más estable que queramos, google (8.8.8.8), el de nuestro ISP, o el que usaré de los chicos de openDNS(208.67.220.220)
Abrimos con nuestro editor /etc/bind/named.conf.options
y descomentamos las líneas que ponen forwaders en adelante hasta que quede así tal cual.

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

         forwarders {
                208.67.222.222;208.67.220.220;
         };

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};
   
Lo que haremos será enviar todas las peticiones que vayan más alla de nuestra red a otro servidor DNS,  que resolverá nuestra petición sin ir preguntando a los servidores raíz tal y como lo hacía con el servidor BIND9 recién instalado.

y ahora, para que todo funcione como es debido,  reiniciamos el servicio BIND

root@nameserver:/etc/bind# service bind9 restart


Ahora para que podamos sacar partido a nuestro servidor DNS, las máquinas de nuestra red, deberán apuntar a 10.0.2.253 como servidor de nombres.

Para testar la velocidad de las consultas a los servidores DNS hay un magnífico programa llamado NameBench. Recomendable para enterarnos que servidores DNS son más rápidos para nosotros y nos pueden ofrecer una experiencia de navegación más rápida.

Un excelente artículo sobre DNS en linuxsilo.net,  aqui lo puedes encontrar
De momento, es todo acerca de este tema hoy.

Espero la siguiente instrucción.

sábado, 20 de octubre de 2012

Convertir un Linux (Debian) en Router

Very Buenos días/Tardes/Noches:

En esta entrada me voy a ocupar de la configuración de un servidor GNU/Linux para que funcione como un router. Uniremos dos redes diferentes, las unirá está máquina linux, que tendrá 2 (dos) tarjetas de red. 

Lo haremos con la distro Debian 6 Squeeze.

Vamos a presentar el escenario:

por un lado tenemos una red de ordenadores del rango 10.0.2.0/24 ---> La nombraremos como "red1"

y por otro tenemos otra red del tipo 192.168.1.0/24 --> llamada "red2"

Para unir las dos redes usaremos una máquina equipada con un Debian 6. A pelo, sin GUI ni nada. Pura terminal. Esta maquina la llamaremos RouterDebian6. Tendrá dos interfaces de red. 
  1. eth0 --- > conectada a 10.0.2.0/24  -- IP 10.0.2.30/24
  2. eth1  ---> conectada a 192.168.1.0/24 --> IP 192.168.1.1/24

vamos al tomate:

Una vez logueados en el sistema, tendremos que tener los privilegios suficientes para ejecutar estas tareas. En mi caso, las haré como root.

Primer paso: Activar el enrutamiento en  el sistema. Pondremos el bit de ip_forward a 1.

root@routerdebian6:~# echo "1" > /proc/sys/net/ipv4/ip_forward

Segundo paso: configuraremos las interfaces de red. Para ello editaremos los archivos de configuración.
Lo abrimos con nuestro editor favorito (yo uso nano). Y se queda tal cual. Si lo va usted a hacer, personalice las configuraciones IP en su caso particular.

root@routerdebian6:~# nano /etc/network/interfaces


# The loopback network interface

auto lo

iface lo inet loopback

# The primary network interface


allow-hotplug eth0

auto eth0
iface eth0 inet static
        address 10.0.2.254
        netmask 255.255.255.0
        network 10.0.2.0
        broadcast 10.0.2.255
        gateway 10.0.2.1

# Secondary interface eth1


allow-hotplug eth1

auto eth1
iface eth1 inet static
        address 192.168.1.1
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 10.0.2.254

Tercer paso: Iptables. Vamos a hacer NAT  "hacia afuera" y los paquetes de ida y vuelta fluyan correctamente a cada una de las máquinas de la red interna "redtwo".



root@routerdebian6:~# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Si quieremos listar lo que acabamos de hacer:


root@routerdebian6:~# iptables -t nat -n -L

¡Ya está! He instalado un servidor de dhcp y conectado un par de XP y enruta correctamente. Capítulo aparte merecerá que nos fijemos en la seguridad por medio de iptables.

El único inconveniente es que con cada reinicio tendremos que realizar las operaciones otra vez, de manera que si las queremos hacer permanentes os presento dos opciones en forma de scripts en bash.

SCRIPT 1 = Hacer los cambios permanentes

creamos un script. Por ejemplo crearemos en /root/


root@routerdebian6:~# nano /root/iniciarenruta.sh


#!/bin/bash

echo "1" > /proc/sys/net/ipv4/ip_forward


iptables -F

iptables -X
iptables -Z
iptables -t nat -F

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE


exit 0



Entonces le daremos permisos de ejecución.

root@routerdebian6:~# chmod 700 /root/inicioenruta.sh


Ahora modificaremos el archivo /etc/init.d/rc.local, que lo que hace es al final de cada nivel de ejecución carga los scripts que se le indiquen.

root@routerdebian6:~# nano /etc/init.d/rc.local

Y añadiremos la linea siguiente antes del exit 0

/root/inicioenruta.sh

Prueben a reiniciar y ya verán que bien :)


SCRIPT 2:  Programa interactivo que comprueba y activa o desactiva el enrutamiento.

#!/bin/bash

# enrutame.sh // para activar o desactivar enrutamiento en linux
function vacia() {
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
}
function politica()
{
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
}
clear
RUTA="/proc/sys/net/ipv4/ip_forward"
ENR=`cat $RUTA`
if [ $ENR = "1" ];then
        echo "el enrutamiento esta ACTIVADO"
        read -p "desea desactivarlo?(s/n) >> " RESP
        case $RESP in
                s | S ) echo "0" > $RUTA
                if [ `cat $RUTA` = "0" ];then
                        # vaciamos las iptables
                        vacia
                        echo "operación completada"
                        exit 0
                else 
                        echo "operación no realizada. Saliendo"
                        exit 1
                fi
                ;;
                * ) echo "saliendo del programa sin cambios"
                exit 0
                ;;
        esac
else
        echo "el enrutamiento esta DESACTIVADO"
        read -p "desea activarlo? (s/n)" RESQ
        case $RESQ in
                s | S ) echo "1" > $RUTA
                if [ `cat $RUTA` = "1" ];then
                        # activamos las iptables
                        vacia
                        politica
                        iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
                        echo "operacion completada"
                        exit 0
                else
                        echo "operacion fallida. Saliendo."
                        exit 2
                fi
                ;;
                *) echo "saliendo del programa sin cambios"
                exit 0
                ;;
        esac
fi
exit 3

Podrán comprobar el estado del enrutamiento, y modificarlo si lo desean.

Y eso es todo amigos y amigas. Mi intención es que les sirva.
Iré actualizando.

Espero la  siguiente instrucción.

viernes, 19 de octubre de 2012

Sale Ubuntu 12.10

Muy buenos días/tardes/noches:

Hoy parece ser que sale oficialmente Ubuntu 12.10 ( Quanta Queztal ), que viene a ser la ultima versión de esta estupenda distribución Linux. Entonces, como soy curioso, voy a probarla en un entorno de máquina virtual.

Para los más atrevidos y exigentes, lo pueden hacer directamente sobre su máquina.

Let´s get started...

Lo primero y principal, es descargar la imagen de disco, de la web de Ubuntu. He escogido la versión Desktop, por ser la más sencilla y pensada para el usuario común. Ya pensaremos más tarde en la versión server.

Este es el enlace para la descarga de dicha imagen. He escogido la versión de 32 bits, porque soy un cutre y tengo un ordenador viejo, y muy honrado.  Tira que flipas, chaval. Si alguien está interesado en que postee sobre 64 bits, que me regale uno. Haré maravillas con él y postearé cosas más interesantes aún. 

Como primer paso, los chicos de Canonical, intentarán que les hagamos una donación. Como he dicho antes, no tengo para 64 bits, tampoco para un Linux. Así que, muy a disgusto, ya les donaré cuando me haga rico, espero que no tengan demasiada prisa.

"Me gusta Debian porque es libre, universal, sólido y gratuito. Siempre. De hecho, el Ubuntu es un derivado de Debian"
                                                                  Contador de Programa
753 MB de descarga es lo que toca. La descarga es lenta ¿servidores saturados de desesperados geeks en busca de la ultima distro? ¿Mi ISP (Español) que suele ser lo más parecido a una tortuga?¿Mi router?¿la maldición de la bruja Lola?

Para instalarlo, usaré el gestor de máquinas Virtuales VirtualBox, de la todopoderosa Oracle. Usen la compilación que más se adecue a su sistema actual (Windows, OSX, Linux o Solaris). Ya casi todo es multiplataforma.

Con el asistente de VirtualBox, creo una "Nueva" máquina virtual. 

Recordemos al profano en la materia que una máquina virtual (MV) es una especie de abstracción que se hace en el interior del ordenata, que permite crear MV´s como churros, con un comportamiento casi idéntico al de una máquina física. Lo cual es muy útil para entornos de pruebas,  y a más altos niveles casi para cualquier tarea "dura". El VirtualBox es algo que nos sirve para andar por casa. Por ello, la MV queda entro de nuestro cacharro, cualquier problema, la borramos y como si nada hubiera pasado.

Mientras la descarga eterna sigue, pienso ¿Tendrá algo que ver con la Ruta Quetzal?

 Asigno a esta MV 1024MB RAM / 8,00 GB HDD (disco duro virtual) / red con adaptador en puente con mi tarjeta de red principal (para que tenga una IP propia y su comportamiento sea como una máquina más de mi propia red). 

Cargo la imagen de disco .iso en el CD/DVD principal virtual. Y arrancando que todo son pascuas y ramos. Ya tengo ansiedad por verlo ¿es grave doctor?
Por fin...

Como es costumbre nos permite elegir si queremos ejecutar Ubuntu como "Live" o Instalarlo.


Elegimos el tipo de instalación y a correr que son dos dias. Elegiré lo más sencillo, borrar e instalar. No apto para cardíacos.

Tras pasar por el teclado, la ubicación, vendrá el generarnos el usuario principal.



Hecho todo esto, se pasará un buen rato descargando e instalando el sistema... después de un insufrible rato que me hace acordar al XP, veo mi mensaje predilecto:


Pues ale, a por él. Me recibe login de inicio muy estiloso (¿sesión de invitado inclusive?). 


Por fin nos aparece el interfaz "unity". Mi primera impresión es que se trata de una mescolanza rara entre Android y OSX. Asimismo, me da la impresión que esto chupa RAM hasta por los costados.
El lanzador de programas es casi como el dock, pero a la izquierda. Visto así a pelo, parece majo, y vienen ubicadas las aplicaciones (casi) imprescindibles de toda máquina con sistema orientado al usuario: Firefox y LibreOffice


 Visto así a pelo, parece majo, y vienen ubicadas las aplicaciones (casi) imprescindibles de toda máquina con sistema orientado al usuario: Firefox y LibreOffice


Para encontrar la consola de Terminal, hay que darse un garbeo. Poco a mano el resto de aplicaciones, no son muy visibles y accesibles. Unity, me sigue sin convencer... y menos con "Inicio" que me recuerda a Windows, cada vez que lo oigo o leo.

Mi conclusión:

Para un usuario común. Correcto. Vistoso y facilito. Para los que piden un poco más, no lo recomendaría. Volvería a ponerle GNOME o KDE.
Punto fuerte: el diseño, no está mal. Es fácil para el profano.
Punto flojo: muy orientado al consumo. Complejo si quieres ir un paso mas allá.

Hasta la siguiente instrucción.