lunes, 6 de diciembre de 2010

Servidor(Router) de internet – redireccion de ISP DNS

Bueno luego de tener que obligadamente reinstalar una maquina que servia de router para la conexion de internet de una empresa.. estaba muuuuuuuy rompebolas la situacion de los dns.. Antes usaban un Suse pero mejor no lo quise re usar ya que esa fue la causa de los problemas.

El caso era que poniendo como DNS primario la maquina Ruteadora, no me navegaba en ninguna maquina solo lo hacian si le ponia el DNS del isp como otro DNS alternativo.. pero.. y si cambiaban de ISP en algun momento?.. o .. ponerle a TODAS las maquinas lo mismo?… na no joda… asi que busque alguna solucion.

No estaba muy familiarizado con respecto a los Servidores DNS pero encontre una informacion que me ayudo a solucionar este problema:

Source: http://man-es.debianchile.org/bind.html

Configuración de un DNS local

Instala el paquete bind9,

# apt-get install bind9

Edita el archivo /etc/bind/named.conf.options,

# nano /etc/bind/named.conf.options

para que lea,

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

// If there is a firewall between you and nameservers you want
// to talk to, you might need to uncomment the query-source
// directive below. Previous versions of BIND always asked
// questions using port 53, but BIND 8.1 and later use an unprivileged
// port by default.

query-source address * port 53;

// 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 {
100.10.0.3;
100.10.0.7;
};

auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};

En forwarders, reemplaza los números IP de los servidores de nombres de la red. Estos deberían ser los mismos del archivo /etc/resolv.conf indicados en el instructivo nameserver.

Edita /etc/resolv.conf y modifícalo para que lea,

search mi.dominio
nameserver 127.0.0.1

En donde search indica el dominio de la red.

Reinicia el daemon de BIND (named) con,

# /etc/init.d/bind9 restart

y luego reinicia la red,

# /etc/init.d/networking restart

Lo que hemos hecho es transformar a localhost (127.0.0.1) en el servidor de nombres, que a través de BIND hace requerimientos a los DNS de la red.

Para ver el servidor DNS local en acción da el comando,

$ dig debian.ciencias.uchile.cl

Retornará a la pantalla la consulta al DNS autoritativo,

$ dig debian.ciencias.uchile.cl

; <<>> DiG 9.3.4 <<>> debian.ciencias.uchile.cl
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30162
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

    ;; QUESTION SECTION:
    ;debian.ciencias.uchile.cl. IN A

    ;; ANSWER SECTION:
    debian.ciencias.uchile.cl. 3600 IN CNAME
    debian.ciencias.uchile.cl.
    debian.ciencias.uchile.cl. 43200 IN A 200.89.74.17

    ;; AUTHORITY SECTION:
    ciencias.uchile.cl. 43200 IN NS ns1.uchile.cl.
    ciencias.uchile.cl. 43200 IN NS ns2.uchile.cl.

    ;; ADDITIONAL SECTION:
    ns1.uchile.cl. 4246 IN A 200.89.70.3
    ns2.uchile.cl. 4246 IN A 200.89.70.70

    ;; Query time: 804 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Fri Apr 27 09:43:31 2007
    ;; MSG SIZE rcvd: 158

    La primera consulta tardó 804 milisegundos (Query time). Repetir el mismo requerimiento será prácticamente instantáneo. El servidor ahora consulta su propia tabla, en dónde existe guardada una entrada con la información sobre debian.ciencias.uchile.cl,

    $ dig debian.ciencias.uchile.cl

    ; <<>> DiG 9.3.4 <<>> debian.ciencias.uchile.cl
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31974
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;debian.ciencias.uchile.cl. IN A

;; ANSWER SECTION:
debian.ciencias.uchile.cl. 3566 IN CNAME
debian.ciencias.uchile.cl.
debian.ciencias.uchile.cl. 43166 IN A 200.89.74.17

;; AUTHORITY SECTION:
ciencias.uchile.cl. 43166 IN NS ns1.uchile.cl.
ciencias.uchile.cl. 43166 IN NS ns2.uchile.cl.

;; ADDITIONAL SECTION:
ns1.uchile.cl. 4212 IN A 200.89.70.3
ns2.uchile.cl. 4212 IN A 200.89.70.70

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Apr 27 09:44:05 2007
;; MSG SIZE rcvd: 158

Tarea programada y Auto Respaldo de Base de datos

Esto es algo realmente muy sencillo usando inclusive un programa que ya viene con la distro de Linux que uses, vamos a dar el modo de uso y unos ejemplos del Cron

Antes que nada hay que tener en cuenta que para tener permisos o negaciones del uso de este comando existen archivo en /etc/cron.d/ como cron.deny y cron.allow pero en este momento no entremos a esos detalles porque no van tanto al caso, aunq si desean algo mas amplio en ese tema pueden dejarlo en un comentario.

Cada usuario tiene una tabla de tareas programadas personales, de ese modo cada usuario tiene control de sus actividades y para iniciar la creación/edición de una tabla para el usuario activo se escribe:

crontab -e

En ese momento se iniciara una pantalla con un ejemplo simple del uso del crontab pero que significa cada columna en esa linea?

1. Minutos: (0-59)
2. Horas: (0-23)
3. Días: (1-31)
4. Mes: (1-12)
5. Día de la semana: (0-6), siendo 1=Lunes, 2=Martes,… 6=sábado y 0=Domingo
6. Linea de comando a ejecutarse

Un ejemplo seria:

30 10 * * 1 /usr/bin/who >> /home/quien.tex

Ejecuta la orden who todos los lunes a las 10:30 y guarda la salida en el archivo quien.tex

Luego que guardas el archivo este comenzara a funcionar automáticamente en el Cron.

Una tarea programada es asi de sencilla aunque se podría ampliar un poco mas el tema con respecto a las opciones que se pueden usar, para algo mas amplio puede preguntar o visitar los links de las fuentes que están mas abajo.

Ahora entramos al área de la Base de datos, en este caso trabajo con una base mysql, como la mayor parte de mi trabajo es programar en Php y Mysql aca les dejo el vinculo a un script de Respaldos muy bueno y ordenado que encontré:

http://www.dagondesign.com/articles/automatic-mysql-backup-script/

En el cual solo tenemos que editar nuestras opciones en el archivo de configuración como es el Host, User y Contraseña de nuestra base de datos y la ubicación de donde se guardaran los respaldos.

Pero… Como usamos esto con el Cron? muy sencillo:

01 01 * * * php /var/www/backuper/backup_dbs.php

Se ejecuta todos los dias a la 01:01 el Script de Respaldos.

Asi de rapido podemos ejecutar un respaldo programado de nuestra base de datos. Suerte.

Fuentes:


http://es.wikipedia.org/wiki/Cron_(Unix)

http://www.unixgeeks.org/security/newbie/unix/cron-1.html

Conectando SAMBA a un Dominio de Windows

Después de un problema con la maquina en la que creo mis programas para el uso interno en la empresa, me vi en la necesidad de realizar backups de la base de datos y ciertos archivos en una maquina fuera de esta, pero quería hacerla en un sitio seguro, y bueno el candidato indicado era el file server de la red que como indique antes es un Windows 2003 server.

Tenia conocimientos que el Samba me podría ayudar en esta tarea.. pero no tenia conocimientos de “que tanto” debía hacer para cumplirla.

Ok instale Samba y Kerberos:

apt-get install samba smbclient winbind krb5-doc krb5-user krb5-config

Luego necesito los datos del dominio, voy a poner términos que identifiquen a la larga de este post cual es la información que se debe ingresar:

- USR = Cuenta previamente creada en los usuarios de Windows en el Administrador de Usuarios de dominio.

- WGROUP = Nombre Grupo de Trabajo (uno de mis errores fue poner el Dominio del Workgroup aquí, pero el Nombre del Dominio real lo puedes ver en “Red de Microsoft Windows”).

- FDOMAIN = Nombre del Dominio “Fully qualified” (Aquí es el nombre del Dominio como Workgroup).

- HOST = Nombre del Host del controlador del Dominio.

- IPHOST = Ip del Host del controlador de dominio.

Ok ahora con la información base un detalle que me había olvidado es la resolución de los DNS en la maquina linux, ya que tenia configurado como nameservers solamente los necesarios para mi conexión a internet, por eso aumente al inicio del /etc/resolv.conf

search FDOMAIN
nameserver IPHOST

Para probar que nuestro linux puede identificar el dominio podemos ejecutar lo siguiente:

nslookup HOST

o

host IPHOST

Si nos devuelve la información del Dominio entonces esta correcto. De no ser asi revisen el /etc/resolv.conf y el orden de los nameservers.

Configuracion del Kerberos:

Yo elimine todo lo que se encontraba en el archivo de configuración /etc/krb5.conf y lo deje solo con lo siguiente:

[logging]
default = FILE:
kdc = FILE:
admin_server = FILE:

[libdefaults]
default_realm = FDOMAIN

[realms]
FDOMAIN = {
default_domain HOST= FDOMAIN
kdc = HOST.FDOMAIN #ej: test(HOST).domain.com(FDOMAIN)
admin_server = HOST.FDOMAIN
}

[domain_realm]
FDOMAIN = FDOMAIN

En el Dominio Usen Mayúsculas, al menos a mi al poner en minúsculas no me funcionaba hasta que hice el cambio a mayúsculas, para comprobar las credenciales y cargarlas ejecuten:

kinit USR@FDOMAIN (respetando la mayúscula del FDOMAIN)

Configuración de SAMBA:

En este punto reemplace lo que estaba al inicio de la configuración [Global] por esto:

[global]
security = ads
password server = HOST
encrypt passwords = yes
workgroup = WGROUP
realm = FDOMAIN
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = Yes

En este punto antes de reiniciar el SAMBA uno de los errores mas comunes y que puede pasar por alto es el archivo hosts de linux donde debemos especificar que resuelva la ip como el nombre de tu maquina mas el FDOMAIN

vi /etc/hosts

127.0.0.1 localhost
192.168.0.93 linuxhostname.FDOMAIN linuxhostname

Ahora reiniciamos el SAMBA /etc/init.d/samba restart y logueamos del siguiente modo para comprobar nuestros datos:

net ads join -W WGROUP -S HOST -U USR

Pedirá que ingresemos una contraseña que va a ser la del USR que creamos en el dominio de Windows y si esta todo correcto debes ver algo como esto:

Using short domain name — DOMAIN
Joined ‘LINUXHOSTNAME’ to realm ‘FDOMAIN’

Ahora… como hacemos para que los Backups vayan a una carpeta en el Windows File Server; pues ahora teniamos que montar una carpeta de red en el sistema y es muy sencillo, tan solo con el siguiente comando:

mount -t smbfs -o username=USR,password=USRPASS //WINDOWSFILESERVER/DIR /MNT/BACKUPS

Esta instrucción es tan simple como diciéndole que “monte” la carpeta a la cual tenemos permiso de acceso en la maquina windows a la ubicación en nuestro linux /mnt/backups (la cual debemos crear previamente) y listo, cuando ingresemos a esta ultima ubicación podremos ver las carpeta que se encuentran en la maquina de windows en la ubicación que especificamos.

NOTA: Solo se pueden montar carpetas que se encuentran directamente compartidas en la maquina windows que estamos accesando, no se podrá montar subcarpetas dentro de esta, en ese punto tenemos que navegar a ellas.

Y si reinicio mi linux se montara automáticamente? Pues no, en ese caso podemos editar nuesto /etc/fstab y le agregamos al final la siguiente linea:

//WINDOWSFILESERVER/DIR /MNT/BACKUPS smbfs defaults,username=USR,password=USRPASS 0 0

Con esto todos los respaldos que se generen en mi maquina de linux pasaran automáticamente al File Server en Windows sin ningun problema =)

Espero que esto ayude a mas de 1 persona que tambien esta teniendo problemas con nuestro querido amigo SAMBA.