Spiga

‘ Ada ’ category archive

Configurar el servidor DNS junto a un dominio

Enero 03, 09 by Itimag

Hace unos días vimos como instalar un servidor de DNS en nuestro equipo o servidor y ahora toca ver como se configura para que éste sea capaz de resolver nuestros dominios.

Supongamos que tenemos el dominio itimag.net y queremos configurarlo en nuestro servidor de tal forma que este mismo resuelva el dominios y que además tenga las entradas DNS primaria y secundária que nosotros mismos personalizaremos (en mi caso ns1.itimag.net para la primaria y ns2.itimag.net para la secundária).

Cuando hablo de dns primarias y secundarias, me refiero a aquellas que podemos modificar desde el panel de administración de dominios que nos ofrece nuestro agente registrador. Por ejemplo, en OVH es este: dns

Como observamos en la imagen, los DNS asociados a itimag.net son ns1.itimag.net y ns2.itimag.net. Pues bien, vamos a ver como configurar esto en nuestro servidor con la finalidad de que en el whois del dominio, aparezca ns1.itimag.net y ns2.itimag.net en vez de la IP xxx.xxx.xxx.xxx.

Como se observa en la imagen, los dos DNS (ns1.itimag.net y ns2.itimag.net) apuntan a distintas IP. Ambas IP están configuradas en el mismo equipo. No es precisamente así como debería estar ya que en caso de que el servidor falle, fallarían los 2 nombres de dominio y, por consiguiente, nadie podrá acceder al dominio o dominios configurados con estos servidores DNS.

En caso de que tu servidor disponga de una única ip, también puedes seguir el proceso que aquí se explica.

Pasemos a la acción:

  1. Accedemos al servidor por ssh y dirigirnos al directorio /etc/bind/
  2. ssh user@xxx.xxx.xxx.xxx -p puerto
    cd /etc/bind
  3. Para ver todos los ficheros de este directorio utilizamos el comando ls:
  4. ls
  5. Editamos el fichero /etc/bind/named.conf.local
  6. nano /etc/bind/named.conf.local
  7. Añadimos las siguientes zonas al fichero:
  8. zone "ns1.itimag.net" {
    type master;
    file "/etc/bind/ns1.itimag.net";
    allow-transfer {87.98.xxx.xxx; }; // Tu segunda IP
    };
     
    zone "ns2.itimag.net" {
    type master;
    file "/etc/bind/ns2.itimag.net";
    };
     
    // La zona inversa
    zone "xxx.xxx.xxx.in-addr.arpa" {
    type master;
    file "/etc/bind/pri.xxx.xxx.xxx.in-addr.arpa";
    };

    Nota: Debes substituir el nombre de dominio (itimag.net) por el tuyo y en el allow transfer insertar la segunda ip de tu equipo (o la ip del DNS secundario externo en caso de no tener segunda ip).

    El nombre de la zona inversa viene determinado por nuestra ip de tal forma que la zona inversa para la ip 10.11.12.13 sería “12.11.10.in-addr.arpa”

    Guardamos el fichero y salimos, pulsando “ctrl + o” y “ctrol+x”.

  9. Ahora vamos crear los ficheros /etc/bind/ns1.itimag.net y /etc/bind/ns2.itimag.net :
  10. nano /etc/bind/ns1.itimag.net

    El fichero resultante debe ser algo como esto:

    $ttl 86400
     
    @ IN SOA ns1.itimag.net. root.localhost. (
     
    2008092401; serial-no
     
    28800; refresh, seconds
     
    7200; retry, seconds
     
    604800; expiry, seconds
     
    86400 ); minimum-TTL, seconds
     
    ;
     
    ns1.itimag.net.         IN NS ns1.itimag.net
     
    ns1.itimag.net.         IN A 213.251.xxx.xxx

    Nota: Debes substituir cada ns1.itimag.net por tu ns1.dominio.com. Debes substituir la línea que contiene el serial-no siguiendo la siguiente norma:

    Año  	   Mes     Día      ID
     
    2008       09      24       01; serial-no

    Los cuatro primeros dígitos corresponden al año. Los dos siguientes al mes. Los dos siguientes al día y los 2 restantes hacen referencia a un identificador que indica la versión del fichero (cada vez que modificamos el fichero, debemos incrementar en una unidad el ID). También debes substituir la IP 213.251.xxx.xxx con la ip de tu servidor.

    Creamos el segundo fichero:

    nano /etc/bind/ns2.itimag.net

    Contendrá lo siguiente:

    $ttl 86400
     
    @ IN SOA ns2.itimag.net. root.localhost. (
    2008092401; serial-no
    28800; refresh, seconds
    7200; retry, seconds
    604800; expiry, seconds
    86400 ); minimum-TTL, seconds
    ;
     
    ns2.itimag.net.         IN NS ns2.itimag.net
    ns2.itimag.net.         IN A 87.98.xxx.xxx

    Nota: Debemos de realizar los mismos cambios que en el fichero anterior. Modificamos el fichero /etc/resolv.conf para añadir nuestro dominio y las ip’s de nuestro servidor o servidores dns.

  11. Creamos el fichero /etc/bind/pri.xxx.xxx.xxx.in-addr.arpa para la zona inversa:
  12. nano /etc/bind/pri.xxx.xxx.xxx.in-addr.arpa

    Debe quedar algo como esto:

    $ttl 86400
     
    @ IN SOA mi_dominio.com. root.localhost. (
    2008071901; serial-no
    28800; refresh, seconds
    7200; retry, seconds
    604800; expiry, seconds
    86400 ); minimum-TTL, seconds
    ;
     
    NS ns1.mi_dominio.com.;
    NS ns.kimsufi.com.;
     
    xxx PTR mi_dominio.com.

    Nota: El xxx corresponde con los últimos tres dígitos (o menos) de tu ip. El serial-no corresponde con la fecha actual: en este caso año 2008, mes 07, día 19, identificador 01. Cada vez que modifiquemos el fichero debemos aumentar en una unidad el identificador.

Configuración del dominio:

  1. Añadimos el dominio a configurar insertando la siguiente linea:
  2. search mi_dominio.com
  3. Obsevemos que la ip de nuestro servidor se encuentra ya insertada en una linea como esta:
  4. nameserver tu_ip

    Ejemplo de configuración:

    search mi_dominio.com
    nameserver 127.0.0.1
    nameserver 213.251.xxx.xx
  5. Modificamos el fichero /etc/bind/named.conf.local y le añadimos la zona para nuestro dominio:
  6. zone "mi_dominio.com" {
    type master;
    file "/etc/bind/pri.mi_dominio.com";
    allow-transfer {213.186.33.199; };
    };
  7. Creamos el ficgero /etc/bind/pri.mi_dominio.com
  8. nano /etc/bind/pri.mi_dominio.com

    Debe quedar algo como esto:

    $ttl 86400
     
    @ IN SOA ns1.mi_dominio.com. root.localhost. (
    2008092201; serial-no
    28800; refresh, seconds
    7200; retry, seconds
    604800; expiry, seconds
    86400 ); minimum-TTL, seconds
    ;
     
    NS xxx.xxx.xxx.xxx ;
    NS ns.ns.kimsufi.com. ;
    MX 10 mail.mi_dominio.com.;
     
    mi_dominio.com. A xxx.xxx.xxx.xxx
    www A xxx.xxx.xxx.xxx
    ns1 A xxx.xxx.xxx.xxx
    mail A xxx.xxx.xxx.xxx
     
    mi_dominio.com. TXT "v=spf1 a mx ~all"
    mi_dominio.com. TXT "v=spf1 a -all"

    Nota: Debemos substituir las xxx.xxx.xxx.xxx por la ip donde va a apuntar al dominio

  9. Forzamos bind a actualizar las zonas:
  10. /etc/init.d/bind9 force-reload
  11. Ahora podemos observar si se han producido errores observando los logs del demonio ejecutando el siguiente comando:
  12. less /var/log/daemon.log

Juego del Ahorcado en Pseudocódigo

Abril 27, 08 by Itimag

He decidido mostraros el algoritmo de una práctica de fundamentos de programación. A continuación encontrais una breve descripción seguido de la programación en pseudocódigo que utilizé.

Se acepta cualquier crítica en los comentarios ;) .

Descripción:

Programa que una vez introducida una frase acabada en punto es capaz de procesarla e interactuar en modo consola con el usuario. Este debe de adivinar la palabra o palabras que componen dicha frase, las cuales pueden haber sido introducidas con varios espacios intermedios. El número máximo de errores que puede realizar el usuario para cada una de las palabras es de siete.

Leer el resto de la entrada »

Tipos de datos predefinidos de Ada

Febrero 15, 08 by Itimag

Ada, el lenguaje de programación que vamos a usar para llevar a cabo este curso, contempla 4 tipos de datos predefinidos. A continuación los enumeramos:
-Integer: Lo utilizamos para trabajar con algún dato numérico entero. Recordemos que un entero es aquel que pertenece al conjunto formado por números no fraccionarios y que puede ser positivo o negativo. Ejemplo: [-127...128].
Para acceder al primer o último valor del rango de enteros que hagamos definido (o el predefinido en ada), podemos usar lo siguiente:
- Integer’first= valor más grande negativo que puedo usar. Corresponde al -127 del ejemplo.
- Integer’last= el valor más grande positivo que puedo usar. Corresponde al 128 del ejemplo.

- Float: Hace referencia a los reales: puede ser tanto un número entero como un fraccionario. Lo usaremos principalmente cuando en nuestro programa se produzcan operaciones que conlleven a un número fraccionario.

- Character: para el uso de caracteres (ASCII). Al igual que en los enteros, podemos usar character’first o character’last para acceder al primer o último valor de un conjunto.

- boolean: para usarlo en variables que únicamente pueden tener los dos valores siguientes: verdadero (True) o falso (False).

Como programar correctamente

Febrero 13, 08 by Itimag

Ahora que conocemos los conceptos básicos de la programación y las características del lenguaje que vamos a utilizar, es momento de utilizar la lógica para darse cuenta de que pasos se deben seguir para llevar a cabo la programación de un proyecto, ya sea para una pequeña o gran empresa.

Programar un proyecto de gran embergadura no es una tarea fácil. Por esto, es de fundamental importancia seguir estos pasos para evitar errores de los cuales luego nos podamos arrepentir y que nos puede costar la reprogramación de todo el programa con su consecuente pérdida de tiempo adicional, sea cual sea el lenguaje de programación que vayamos a utilizar.

Lo primero que debemos hacer es entender de arriba a abajo que es lo que debe hacer el programa. Nunca empieces a programar sin tener, como mínimo, una idea o visión global del problema. No es mala idea coger un papel y hacer un listado de todas las tareas que debe realizar y en caso de que surjan dudas, preguntarla antes de empezar a desarrollar.

Una vez hemos entendido el problema, debemos hacer un análisis integro de este. Debemos coger un papel y representar en él la forma más óptima que se nos ocurra para resolver cada una de las tareas detectadas en el paso anterior. Podemos hacernos esquemas de la estructura de datos que vamos a utilizar, etc.

Ahora que seguro que tenemos bien claro que es lo que va a hacer nuestro programa, vamos a expresar el método de resolución formalmente en forma de pseudocódigo, con el lenguaje propiamente dicho o con organigramas (poco utilizado en la actualidad).

Yo os recomiendo hacer el pseudocódigo del programa. Esto es representar la programación del programa de una forma familiar a nuestro lenguaje de conversación. Por ejemplo: supongamos un programa que debe sumar dos números y decir si el resultado es positivo o negativo. Su representación en pseudocódigo sería la siguiente:

Programa Numeros es
Inicio
Visualizar_mensaje_introducir_numeros;
Obtener_numeros;
Sumar_numeros;
Si resultado es mayor que 0 entonces
Visualizar_mensaje_positivo;
si no
Visualizar_mensaje_negativo;
Fin si;
Fin programa;

Puedes encontrar más información sobre pseudocódigos en la wikipedia.

Una vez realizado nuestro pseudocódigo para cada una de las tareas del programa, solo nos falta escribirlo utilizando el lenguaje de programación elegido para nuestra aplicación, compilarlo y finalmente testearlo en búsqueda de errores para poder localizarlos y repararlos.

Compilar es un proceso que traduce un lenguaje de alto nivel (lenguaje más próximo al del habla humana) en un lenguaje máquina apropiado para cada arquitectura de computador.

Poco a poco irás entendiendo este proceso a medida que empecemos a realizar programas. Yo recomiendo, que mires los programas que publicaré y luego los intentes hacer por tu cuenta. Esta es sin duda alguna la mejor forma de aprender a programar.

No dudes en pedir cualquier duda. Un cordial saludo.