miércoles, 26 de agosto de 2015

Tipos de Datos y Variables en C# .NET

Los tipos de datos en C# son muy similares a los ya conocidos en Visual Basic .NET (ver Datos y variables en Visual Basic .NET). A continuación se presenta una tabla con los tipos de datos que podemos encontrar en C#.

Tipo Valores
bool True, False
byte 0-255
sbyte -128 a 127
char Símbolos Unicode utilizados en el texto
float -3,402823e38 a 3,402823e38
decimal ±1.0 × 10e−28 a ±7.9 × 10e28
double -1,79769313486232e308 a 1,79769313486232e308
short −32.768 hasta 32.767
ushort 0 hasta 65.535
int −2.147.483.648 hasta 2.147.483.647
uint 0 hasta 4.294.967.295
long −9.223.372.036.854.775.808 hasta 9.223.372.036.854.775.807
ulong 0 hasta 18.446.744.073.709.551.615
object Cualquier tipo puede almacenarse en Object
string Cualquier secuencia de caracteres

Al igual que en Visual Basic .NET, cada tipo de dato proviene de una clase que para C# está ubicada en el espacio de nombres System. Los tipos de datos descritos anteriormente se obtienen de las siguientes clases.

Tipo C# Tipo .NET Framework
bool System.Boolean
byte System.Byte
sbyte System.SByte
char System.Char
decimal System.Decimal
double System.Double
float System.Single
int System.Int32
uint System.UInt32
long System.Int64
ulong System.UInt64
object System.Object
short System.Int16
ushort System.UInt16
string System.String


Declaración e inicialización de variables


En C# podemos declarar variables escribiendo el tipo de dato, seguido del nombre de la variable tal y como se muestra en el siguiente ejemplo.

int a;

Además, podemos declarar e inicializar variables en una sola instrucción. En el siguiente ejemplo se declara una variable entera en la primera línea, se inicializa en la segunda y finalmente en la tercera línea se declara e inicializa otra variable en una sola sentencia.

int b;
b = 10;
int c = 5;

De igual forma se pueden aplicar estas sencillas reglas con cualquier otro tipo de dato.

Constantes


Para declara una constante en C# se realiza con la palabra reservada const. Además de esto, C# proporciona la palabra reservada readonly para declara una variable que solo puede ser asignada una vez en tiempo de ejecución y su valor no puede cambiar. La diferencia entre estas dos instrucciones, básicamente radica en que una constante al ser declarada e inicializada no puede cambiar su valor en tiempo de ejecución. A continuación, un ejemplo de declaración y asignación de constantes.

public const int c1 = 5;
public const double x = 1.0, y = 2.0, z = 3.0;

En la primera línea, hemos asignado a c1 el valor 5 como una constante entera. De igual forma en la segunda línea se han asignado tres constantes en la misma declaración, esta vez, de tipo double.

Enumeraciones


Las enumeraciones en C# se utilizan para agrupar constantes en un solo nombre de manera similar a como se hace en C y C++.

public enum Color
{
    Green,   //defaults to 0
    Orange,  //defaults to 1
    Red,     //defaults to 2
    Blue = 3
} 

Como se puede ver en el ejemplo anterior, se ha utilizado el nombre Color para agrupar cuatro constantes, tres de las cuales ya deben estar definidas anteriormente en el código y toman los valores correspondientes por defecto. La última constante, ha sido asignada manualmente con el valor 3. Para acceder a cualquiera de las constantes definidas en la enumeración basta con juntar el nombre de la enumeración seguida de un punto y el nombre de la constante.

Color favorite = Color.Blue;


Conversiones de Tipo


C# puede realizar conversiones de tipo de manera implícita o explicita dependiendo del contexto. Una conversión implícita luce de la siguiente forma.

int int1 = 5;
long long1 = int1;  //conversión

A continuación, se presenta una tabla que nos ayudará a determinar qué tipos de datos pueden ser convertidos a otros de manera implícita.

Tipo de origenTipo de destino
Byte
short, ushort, int, uint, long, ulong, float, double o decimal
Sbyte
short, int, long, float, double o decimal
Int
long, float, double o decimal
Uint
long, ulong, float, double o decimal
Short
int, long, float, double o decimal
Ushort
int, uint, long, ulong, float, double o decimal
Long
float, double o decimal
Ulong
float, double o decimal
Float
double
Char
ushort, int, uint, long, ulong, float, double o decimal

Las conversiones explícitas, como su nombre lo indica, declaran explícitamente la conversión de un tipo a otro.

long long2 = 5483;
int int2 = (int)long2;  // conversión

Como puede verse, para convertir explícitamente de un tipo a otro debe declararse el tipo al cual quiere convertirse entre paréntesis antes del nombre de la variable a convertir. Este es un comportamiento esperado, y es similar a lo que ocurre en otros lenguajes de programación como Java o PHP. A continuación, se presenta una tabla que nos ayudará a determinar cuándo debemos utilizar la conversión explícita.

Tipo de origenTipo de destino
Byte
sbyte o char
Sbyte
byte, ushort, uint, ulong o char
Int
sbyte, byte, short, ushort, uint, ulong o char
Uint
sbyte, byte, short, ushort, int o char
Short
sbyte, byte, ushort, uint, ulong o char
Ushort
sbyte, byte, short o char
Long
sbyte, byte, short, ushort, int, uint, ulong o char
Ulong
sbyte, byte, short, ushort, int, uint, ulong o char
Float
sbyte, byte, short, ushort, int, uint, long, ulong, char o decimal
Double
sbyte, byte, short, ushort, int, uint, long, ulong, char o decimal
Char
sbyte, byte o short
Decimal
sbyte, byte, short, ushort, int, uint, long, ulong, char, float o double

Dado que C# es un lenguaje puramente orientado a objetos, es necesario contar con las bases de la POO para tener un entendimiento claro del lenguaje. Por lo pronto, es recomendable visitar el post Introducción a la Programación Orientada a Objetos. Hasta pronto!.


Referencias

- Tipos de datos (C# y Java) (2015, August). In Learn to Develop With Microsoft | MSDN. Retrived 10:00, August 25, 2015 from https://msdn.microsoft.com/es-es/library/ms228360(v=vs.80).aspx
- Built-In Types Table (C# Reference) (2015, August). In Learn to Develop With Microsoft | MSDN. Retrived 10:00, August 25, 2015 from https://msdn.microsoft.com/en-us/library/ya5y69ds.aspx
- const (C#) (2015, August). In Learn to Develop With Microsoft | MSDN. Retrived 14:20, August 25, 2015 from https://msdn.microsoft.com/es-es/library/e6w8fe1b(v=vs.80).aspx

sábado, 22 de agosto de 2015

Tipos de Datos y Variables en Visual Basic .NET

Como en todo lenguaje de programación, existen tipos primitivos de datos con los cuales podemos representar todo tipo de información en la aplicación. Los tipos de datos que existen en Visual Basic .NET son los siguientes:

Tipo Valores
Boolean True, False
Byte 0-255 (sin signo)
SByte -128 hasta 127 (con signo)
Char Caracter simple, 0-65535 (sin signo)
Date 0001 0:00:00 - 9999 23:59:59
Decimal 0 a ±79.228.162.514.264.337.593.543.950.335 sin separador decimal,
0 a ±7,9228162514264337593543950335 con 28 lugares a la derecha del decimal,
±0,0000000000000000000000000001 (±1E−28) menor número positivo
Double −1,79769313486231570E+308 hasta −4,94065645841246544E−324 para valores negativos; 4,94065645841246544E−324 hasta 1,79769313486231570E+308 para valores positivos.
Short −32.768 hasta 32.767 (con signo)
Integer −2.147.483.648 hasta 2.147.483.647 (con signo)
UInteger 0 hasta 4.294.967.295 (sin signo)
Long −9.223.372.036.854.775.808 hasta 9.223.372.036.854.775.807 (con signo)
ULong 0 hasta 18.446.744.073.709.551.615 (sin signo)
Object Cualquier tipo puede almacenarse en Object
Single −3.4028235E+38 hasta −1.401298E−45 para valores negativos;
1.401298E−45 hasta 3.4028235E+38 para valores positivos
String Desde 0 hasta aproximadamente 2 billones de caracteres Unicode
Structure Un tipo de datos definido por el usuario desde otros tipos de componentes

Por lo general, cada tipo de datos proviene de una clase con el mismo nombre. Sin embargo, existen algunas excepciones a la regla como es el caso de los siguientes tipos .

Tipo Clase
Short Int16
UShort UInt16
Integer Int32
UInteger UInt32
Long Int64
ULong UInt64

Los tipos Structure serían de una clase definida por el usuario.

Declaración e inicialización de variables


Las variables son declaradas con la instrucción Dim seguidas del nombre de la variable, la instrucción As y finalmente el tipo de dato tal y como se muestra en el siguiente ejemplo.

Dim salario As Double
Dim nombre As String

Si las variables son del mismo tipo, la declaración puede resumirse de la siguiente forma

Dim nombre, apellidos As String

Para inicializar una variable basta con asignarle un valor según el tipo de datos con el cual se haya declarado. Por ejemplo, podemos asignar el valor "Bill Gates" a la variable nombre declarada anteriomente de la siguiente forma.

nombre = "Bill Gates"

Nótese el uso de comilla dobles en vez de comilla sencilla. Una forma abreviada para declara una variable e inicializarla al mismo tiempo es la siguiente.

Dim nombre As String = "Bill Gates"

Constantes


El uso de constantes es muy común en la mayoría de lenguajes de programación. Para declarar una constante basta con utilizar la instrucción Const seguida del nombre de la variable, la instrucción As y el tipo. Como vimos anteriormente también podemos declarar e inicializar al mismo tiempo, a continuación un ejemplo de como se haría con constantes.

Const PI As Single = 3.1416

Como buena práctica de programación es recomendable colocar el nombre de las constantes en mayúscula sostenida.

Conversiones de Tipo


En Visual Basic .NET existen dos formas para realizar una conversión de tipo de una variable a otra. La primera es la siguiente

Dim pi As Single = 3.1416
Dim intPi As Integer = pi

La conversión se realiza en la segunda línea al declarar una variable de tipo entero, que toma como argumento el valor de otra variable de otro tipo. Para este caso particular, la variable pi de tipo Single pasa a formar parte de la declaración de la variable intPi de tipo Integer, con esto, se realiza la conversión y se obtiene la asignación del valor 3.

Visual Basic .NET también cuenta con un conjunto de funciones incorporadas para realizar conversiones de tipo. Cada función y el tipo de dato de conversión se muestran en la siguiente lista.

- CBool: Boolean
- CByte: Byte
- CChar: Char
- CDate: Date
- CDbl: Double
- CDec: Decimal
- CInt: Integer
- CLng: Long
- CObj: Object
- CSng: Single
- CStr: String

A continuación podemos ver un ejemplo de cómo se utilizaría la conversión de tipos en línea tomando la variable pi del ejemplo anterior.

Console.WriteLine("El valor de PI es " + CStr(pi))

Arrays



Los Arrays son utilizados para guardar varios datos del mismo tipo en una sola variable de tamaño fijo. Pueden ser tanto unidimensionales como multidimensionales según el número de filas y columnas que posean.

Arrays unidimensionales


Para declarar un array unidimensional, basta con utilizar la instrucción Dim de la siguiente forma.

Dim arrayName(n) As DataType

En donde n es el tamaño del array, arrayName es el nombre de la variable y DataType es el tipo de datos que se guarda en el array. Podemos declarar un array y después agregar sus valores de la siguiente forma.

Dim digits(9) As Integer
digits(0) = 1
digits(1) = 2

En VB.NET como en muchos otros lenguajes de programación el primer índice de un array es cero, es por esto que en el ejemplo anterior el array digits puede contener 10 elementos y no 9. También podemos utilizar la siguiente sintaxis para inicializar un array en su declaración.

Dim digits() As Integer = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Arrays multidimensionales


Los arrays multidimensionales son útiles cuando la información que deseamos representar es accesible mediante índices compuestos. Por ejemplo, un punto en el plano cartesiano se compone de sus coordenadas X e Y y se representa como P(x,y). Los arrays más comunes son los de dos dimensiones que se asemejan a la estructura de una matriz o tabla y se declaran de la siguiente forma

Dim arrayName(rows, cols) As DataType

En donde rows hace referencia al número de filas y cols al número de columnas del array. En el siguiente ejemplo se declara un array de dos filas y dos columnas y se agregan sus valores.

Dim arrayName(1, 1) As Integer
arrayName(0, 0) = 1
arrayName(0, 1) = 2
arrayName(1, 0) = 3
arrayName(1, 1) = 4

De igual forma, podemos declarar e inicializar el array en una sola línea.

Dim arrayName(,) As Integer = {{1,2}, {3,4}}

En una próxima ocasión, veremos cómo iterar sobre arrays, y los Literales de matriz aninados. Hasta pronto!


Referencias

- Resumen de tipos de datos (2015, August). In Learn to Develop With Microsoft | MSDN. Retrived 10:00, August 22, 2015 from
https://msdn.microsoft.com/es-es/library/47zceaw7.aspx
- Funciones de conversión de tipos (Visual Basic) (2015, August). In Learn to Develop With Microsoft | MSDN. Retrived 10:00, August 22, 2015 from
https://msdn.microsoft.com/es-es/library/s2dy91zy.aspx
- Matrices en Visual Basic (2015, August). In Learn to Develop With Microsoft | MSDN. Retrived 10:00, August 22, 2015 from
https://msdn.microsoft.com/es-es/library/wak0wfyt(v=vs.120).aspx
- Información general sobre las constantes (Visual Basic) (2015, August). In Learn to Develop With Microsoft | MSDN. Retrived 10:00, August 22, 2015 from
https://msdn.microsoft.com/es-es/library/x2a031a0(v=vs.120).aspx

viernes, 21 de agosto de 2015

Hola Mundo! en Visual Basic .NET

El día de hoy veremos cómo imprimir nuestro primer script en Visual Basic .NET. El día de ayer vimos cómo hacer esto en el lenguaje C#, en Introduccion a C# .NET. En ambos casos, aprenderás cómo hacerlo desde consola (sin IDE) y con el entorno de Visual Studio.

Configuración Previa


Es necesario tener ya configurado un entorno de desarrollo con Microsoft Visual Studio .NET. Esto se logra si ha leído y practicado el post Introduccion a Visual Basic .NET, en donde además, se configuran los binarios del .NET Framework. Sin más preámbulo vamos a crear nuestro primer script.

Hola Mundo! sin IDE


Abrimos un bloc de notas y copiamos el siguiente código dentro de él.

Imports System

Module MyModule

   Sub Main()
      Console.WriteLine("Hola Mundo!")
      Console.ReadLine()
   End Sub

End Module

Guardamos el archivo y seleccionamos en Tipo la opción Todos los Archivos. Finalmente guardamos el archivo con el nombre HolaMundo.vb. Después de esto, abrimos una consola como administador y navegamos hasta el directorio en donde hayamos guardado el anterior archivo. Compilamos el el programa con el siguiente comando.

vbc /out:HolaMundo.exe HolaMundo.vb

Para probar el script abrimos el archivo generado (HolaMundo.exe) y observamos la salida en consola.



Hola Mundo! con IDE


Desde el Visual Studio seleccionamos "Archivo > Nuevo Proyecto" y en Plantillas buscamos Visual Basic > Windows > Windows Desktop y finalmente seleccionamos Aplicación de Consola. Al dar clic en aceptar el Visual Studio nos creará el siguiente esquema.

Imports System

Module MyModule

   Sub Main()

   End Sub

End Module

A partir de cual, debemos completar el código correspondiente según el primer ejemplo. Damos clic en Iniciar y tendremos entonces una salid por consola similar a la siguiente.



A continuación un vídeo tutorial que profundiza lo visto hoy en este post.




Referecias

- Compilar aplicaciones en consola en .NET Framework (2015, August). In Learn to Develop With Microsoft | MSDN. Retrived 22:00, August 21, 2015 from
https://msdn.microsoft.com/es-es/library/f492ca1w(v=vs.110).aspx
- Compilar y ejecutar ejemplos de código (2015, August). In Learn to Develop With Microsoft | MSDN. Retrived 22:00, August 21, 2015 from
https://technet.microsoft.com/es-es/library/ms160695(v=sql.90).aspx

Introducción a C# .NET

C# (C Sharp) es un lenguaje de programación de la plataforma Microsoft .NET, diseñado para ser simple, moderno, de propósito general y orientado a objetos. C# es un lenguaje fuertemente tipado, robusto y con un recolector de basura (Garbage Collector) que gestiona la memoria de manera eficiente. También provee soporte para internacionalización (i18n) y puede funcionar en sistema embebidos.

Configuración del entorno


Para empezar a desarrollar aplicaciones en C# debemos instalar el Framework Microsoft .NET tal y cómo se explica en el post Introduccion Microsoft .NET.html. Además de esto, es necesario configurara algunos parámetros del entorno .NET que se explican en el post Introduccion Visual Basic .NET.html. Esta última parte es importante ya que se configuran los binarios necesarios para ser ejecutados desde consola. Vamos a comenzar ahora con nuestro primer Script!, el clásico Hola mundo!.

Hola Mundo! sin IDE


Lo primero que debemos hacer es abrir un bloc de notas y escribir el siguiente código.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
   class Program
   {
      static void Main(string[] args)
      {
         Console.WrawLine("Hola Mundo!");
         Console.ReadKey();
      }
   }
}

Es aconsejable teclear el texto nosotros mismos, con esto nos ahorramos algún caracter extraño y vamos familiarizándonos con el lenguaje. Después de esto guardamos el archivo con "Archivo -> Guardar Como" y seleccionamos en Tipo la opción Todos los Archivos. Finalmente colocamos el nombre del archivo como HolaMundo.cs.

Enseguida, abrimos una consola como administrador y navegamos hasta el directorio en donde tengamos el archivo guardado. Tecleamos entonces el siguiente comando.

csc /out:HolaMundo.exe HolaMundo.cs

Al ejecutar el comando aparecerá un nuevo archivo en nuestro directorio denominado HolaMundo.exe. Finalmente al abrir dicho archivo obtenemos nuestro primer script.



Hola Mundo! con IDE


Desde el Visual Studio selecionamos "Archivo > Nuevo Proyecto" y en Plantillas buscamos C# > Windows > Windows Desktop y finalmente seleccionamos Aplicación de Consola. Al dar clic en Aceptar, el IDE nos creará el siguiente esquema.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
   class Program
   {
      static void Main(string[] args)
      {
      }
   }
}

A partir del cual, debemos completar el código tal cual está en el primer ejemplo. Damos clic en Iniciar/Start y tendremos una salida en consola similar, pero generada desde el IDE.



A continuación, se presenta un video tutorial que explica un poco más a fondo el uso del IDE y refuerza el entendimiento del primer script.



Referencias

- C Sharp (programming language). (2015, August 11). In Wikipedia, The Free Encyclopedia. Retrieved 04:41, August 21, 2015, from 
- Garbage collection (computer science). (2015, August 16). In Wikipedia, The Free Encyclopedia. Retrieved 04:42, August 21, 2015, from 
https://en.wikipedia.org/w/index.php?title=Garbage_collection_(computer_science)&oldid=676290470
- Compilar la línea de comandos con csc.exe (2015, August). In Learn to Develop with Microsoft Developer Network | MSDN. Retrieved 1:17, August 21, 2015, from
https://msdn.microsoft.com/es-es/library/78f4aasd.aspx
- Hello World, su primer programa (Guía de programación de C#) (2015, August). In Learn to Develop with Microsoft Developer Network | MSDN. Retrieved 1:17, August 21, 2015, from
https://msdn.microsoft.com/es-es/library/k1sx6ed2(v=vs.120).aspx

jueves, 20 de agosto de 2015

Instalación ClearOS

En el anterior post Introducción a ClearOS, vimos qué era ClearOS y cuáles eran sus objetivos como distro Linux. Básicamente, es una distro orientada a gateways y servidores de red, algo muy útil cuando queremos montar por ejemplo una UTM. A continuación, veremos cómo instalarla.

Configuración previa


Se sugiere instalar ClearOS en un entorno de pruebas, bien sea en un equipo destinado para esto o en una máquina virtual del VMWare o VirtualBox. En este tutorial se utilizará VirtualBox por ser el programa de virtualización más popular. También debes descargar la última versión del ClearOS alojada en https://www.clearos.com/products/clearos-editions/clearos-downloads. La versión actual es la v6.6, tal y como se muestra en la siguiente imagen.



Instalación del S.O.


Lo primero que debemos hacer es crear una nueva máquina virtual de tipo Linux 32-bits. Para este ejemplo, se reservarán 1024 MB para memoria RAM, y el tamaño del disco estará reservado dinámicamente. Todo lo demás, será configurado con los valores por defecto del VirtualBox.



Al crear la máquina, debemos configurar la unidad de CD virtual para iniciar desde el archivo .iso que hemos descargado. Esto se hace en la opción de Configuración >> almacenamiento >> Controlador IDE, seleccionando un espacio vacío, y en Disco Duro, escogiendo la ruta del archivo de ISO tal y como lo muestra la siguiente imagen.



Después de esto, ya podemos iniciar la máquina y arrancará desde el CD de instalación. Al iniciar la máquina saldrá el siguiente menú en el cual debemos seleccionar cualquiera de las siguientes dos opciones Install or upgrade an existing system o Install system with basic video driver.



Si al cargar el Kernel sale el siguiente error, significa que no tienes habilitadas las extensiones PAE en el sistema. ¿Qué es PAE?, Bueno, básicamente es una extensión de algunos procesadores para aceptar más de 4GB de memoria en sistemas de 32 bits. Más información en el siguiente enlace Physical Address Extension.



Para solucionar esto, simplemente debemos habilitar el soporte de extensión de memoria fìsica, en la configuración de VirutalBox. Más precisamente lo podemos habilitar en la opción Configuración >> Sistema, y seleccionando "Habilitar PAE/NX" en la pestaña Procesador.



Posteriormente, suponiendo que se ha seleccionado la opción Install or upgrade an existing system, aparecerá el siguiente mensaje de confirmación en modo texto el cual podemos saltarnos (skip).



Enseguida, aparecerá una pantalla con el logo corporativo de la distro. Damos clic en Next.



Seleccionamos el idioma que queremos para el S.O, en este caso, seleccionaremos Inglés.



Seleccionamos después la distribución del teclado.



Si no estamos seguros de qué tipo de dispositivos involucra la instalación, como en este caso, seleccionamos Basic Storage Devices.



A continuación, seleccionamos un nombre para el equipo.



Seleccionamos una zona horaria.



En esta parte, escribimos la contraseña que tendrá el usuario root. Para aquellos que no han utilizado antes sistemas Linux, el usuario root es un usuario con todos los privilegios.



Sin entrar en detalles, seleccionaremos la opción por defecto, el sistema deberá asignar los espacios necesarios para las particiones.



Aparecerá un mensaje de confirmación al cual debemos dar clic en "Write changes to disk".



Dependiendo de las características de hardware de la máquina, el proceso de instalación podría tardar varios minutos.



Finalmente, deberemos reiniciar la máquina para iniciar el nuevo sistema operativo instalado. Cuando la máquina vuelva a iniciar, no debemos presionar ninguna tecla ya que volvería a cargar la ISO que configuramos como disco virtual.



Al cagar totalmente el sistema, aparecerá la siguiente interfaz, la cual indica que el sistema se ha instalado correctamente.



En un posterior post veremos cómo configurar nuestra nueva máquina gateway. Para más información visita ClearOS 6 User Guide Hasta pronto!.


Referencias

- Chapter 3. Configuring virtual machines (2015, August). In Oracle VM VirtualBox. Retrieved 22:00, August 19, 2015, from https://www.virtualbox.org/manual/ch03.html#settings-processor 
- Starting the install (2015, August). In ClearOS. Retrieved 22:00, August 19, 2015, from https://www.clearos.com/support/documentation/clearos/content:en_us:6_a_starting_the_install
- Running A Small Business Server With ClearOS 6.3.0 (Community Edition) (2015, August). In Howtoforge Linux Tutorials. Retrieved 22:00, August 19, 2015, from https://www.howtoforge.com/running-a-small-business-server-with-clearos-6.3.0-community-edition

martes, 18 de agosto de 2015

Introducción a ClearOS

ClearOS es una distribución Linux basada en CentOS y Red Hat Enterprise, utilizada principalmente como network gateway y servidor de red. Con ClearOs se puede obtener el control de una red administrando el ancho de banda, la seguridad, servicios DNS y muchas otras características. A continuación enumeramos algunas de ellas.

Gateway


- Protocol Filter
- Web Access Control
- Content Filter

Network


- Dynamic DNS
- DHCP Server
- SSH Server
- OpenVPN
- Bandwidth Manager
- RADIUS Server

Server


- File Server
- FTP Server
- Directory Server
- SMTP Server
- Web Server

Como vemos, existen muchas características integradas en una sola distribución que ayudarán a optimizar el trabajo de Administradores de Servidores, Redes, Bases de datos, y otros. Finalmente, un video corto acerca del objetivo perseguido por esta distro Linux.



Referencias

- ClearOS. (2015, April 26). In Wikipedia, The Free Encyclopedia. Retrieved 04:53, August 18, 2015, from https://en.wikipedia.org/w/index.php?title=ClearOS&oldid=659241923

lunes, 17 de agosto de 2015

Configuración servidor DNS con BIND

Recordemos que los nombres de dominio nos ayudan a acceder a distintos sitios en internet de forma trasparente ingresando en la barra de navegación por ejemplo www.google.com en vez de su dirección ip 74.125.21.104. En el anterior post (Servidor en DynDNS) vimos como configurar un servicio de HOST DNS para apuntar un subdominio alojado en internet a nuestro servidor local y publicarlo en internet. Sin embargo, si lo que queremos en apuntar un dominio real en internet, como por ejemplo midominio.com y miempresa.com, debemos pensar en una solución acorde como por ejemplo rentar un servicio de hosting profesional, o mucho más complejo, montar un servidor DNS propio que punte dicho dominio a nuestro servidor. Este post cubre la segunda y más compleja alternativa.

Configuración previa


Para este propósito es necesario tener configurado ya un servicio de HOST DNS. Se sugiere en lo posible el servicio con Dyn.com, si embargo, existen muy buenas alternativas como Noip.com. En el siguiente enlace te enseñamos a configurar dicho servicio con Dyn. Es de notar, que se deben crear dos subdominios, ambos dirigidos hacia el mismo servidor. Finalmente, es necesario que ya se tenga alquilado un servidor en internet con algún registrador autorizado, para este ejemplo, supondremos que se ha comprado el dominio domain.com. También supondremos que los HOST DNS creados son dns1.dyndns.org y dns2.dyndns.org.

Servidor en DynDNS

Configuración del servidor DNS


Para configurar nuestro propio servidor DNS, utilizaremos BIND DNS el cual es el software más utilizado en internet para estos propósitos. Lo primero que debemos hacer es descargarnos la última versión del BIND DNS la cual se encuentra en la siguiente dirección https://www.isc.org/downloads. Debemos dar click la opción BIND, y seleccionar la versión estable del momento.



Enseguida aparecerá una ventana modal indicándonos la arquitectura deseada, dependiendo del servidor donde se quiera montar el servidor DNS, podemos seleccionar a 32 bits o 64 bits.



Al descargar el archivo, lo descomprimimos en cualquier carpeta y ejecutamos el instalador como Administrador. En la versión actual del BIND, la v9.10.2, el instalador es el archivo BINDInstall.exe.



Antes de instalar el programa, creamos un directorio en el disco local C llamado bind. Con esto, en el instalador podemos colocar como directorio de instalación C:\bind. La cuenta con la cual instalaremos el BIND debe ser Administrador o del Grupo Administradores, colocamos la clave, quitamos la opción Automatic Startup, dejamos lo demás como está por defecto e instalamos.



Lo ideal es que se cree una cuenta diferente a la de Administrador para correr el servicio del DNS. Sin embargo, esto requiere de configuraciones adicionales y que el sistema operativo tenga la Group Policy (instalación aquí), la cual, no viene por defecto en las versiones Home. Esto, con el fin de asignar a la nueva cuenta el permiso "logon as a service".

Si al instalar sale una ventana de dialogo preguntando si se desea seleccionar otra cuenta le damos click en No. Probablemente si no tienes el Visual Studio C++ Redistributable instalado tengas que instalarlo en la mitad del proceso, si ya lo tienes instalado debes cancelar esa segunda instalación. Finalmente, al aparecer el mensaje de confirmación de instalación damos click en Aceptar y cerramos la ventana del instalador.

Podemos verificar que se ha instalado correctamente si navegamos hasta la carpeta C:\bind y no está vacía. Veremos entonces dos carpetas nuevas, C:\bind\bin y C:\bind\etc. Para nuestro próximo paso debemos agregar la primera carpeta a la variable Path del sistema para poder ejecutar los comandos del BIND DNS desde la consola de windows. Después de esto, ejecutamos entonces el siguiente comando desde la consola como administrador.

rndc-confgen -a

Este comando crea una llave específica para el servidor y la escribe en el archivo C:\bind\etc\rndc.key. Después de esto, creamos los siguientes archivos en el mismo directorio.

Archivo rdnc.conf, sobre el cual definiremos la dirección del servidor DNS y la llave generada. El servidor sobre el cual queremos que llegue el DNS debe tener una dirección IP estática dentro de la red local, en este caso, suponemos que es la 192.168.1.100. Además de esto, dbemos reemplazar el parámetro secret por la llave que se generó en el archivo rndc.key,


rndc.conf
key "rndc-key" {
 algorithm hmac-md5;
  secret "K+d/EiibN8h3l8BdiDLAGflzIIlAOUmpSP8L25pPl7o=";
};

options {
 default-key "rndc-key";
 default-server 192.168.1.100;
 default-port 953;
};


Archivo named.conf, sobre el cual definiremos las zonas que crearemos en nuestro servidor. En este archivo, definimos la zona que crearemos en internet, en este caso, domain.com, y el archivo del cual se obtiene la configuración de esta zona.


named.conf
options {
 directory "C:/bind/etc";
 allow-transfer {none;};
 listen-on {any;};
};

zone "domain.com" {
    type master;
    file "C:/bind/dns/db.domain.com";
};

key "rndc-key" {
 algorithm hmac-md5;
 secret "K+d/EiibN8h3l8BdiDLAGflzIIlAOUmpSP8L25pPl7o=";
};

controls {
 inet 192.168.1.100 port 953
 allow { 192.168.1.100; } keys { "rndc-key"; };
};


Finalmente, creamos la carpeta C:\bind\dns y el archivo db.domain.com, sobre el cual estará especificada la configuración del dominio. En este archivo, deberemos reemplazar los dns por los que hayamos creado previamente en nuestra cuenta Dyn o Noip. Además, debemos colocar la dirección IP actual del primer DNS, en este caso 186.118.49.227.


db.domain.com
$TTL 15S

@       IN      SOA     dns1.dyndns.org. your.email.com. (
                        2007061907      ; serial
                        3H              ; refresh
                        30M             ; retry
                        4W              ; expire
                        15S )           ; min TTL

                NS      dns1.dyndns.org. ; name server
                NS      dns2.dyndns.org. ; name server

@                    A          186.118.49.227
dns1.dyndns.org.     A          186.118.49.227
dns2.dyndns.org.     A          186.118.49.227
www                  A          186.118.49.227

homepage        CNAME            www



Hasta ahora, los registradores de dominio y servidores DNS en internet no saben que hemos creado un nuevo servidor en internet. Debemos entonces entrar a la página del registrador al cual le hemos alquilado el dominio, en dicha página debe existir alguna zona en donde podamos editar las DNS del dominio, por lo general, vienen configurados dos dns por defecto, entonces los cambiamos por los que tengamos configurados en nuestra cuenta de HOST DNS.

Ahora, debemos configurar el router para que el BIND DNS pueda pasar a través de él y recibir peticiones de internet. Debemos abrir los puertos 53 - 59 y 81 - 953 sobre la ip del servidor, para esto puedes seguir el siguiente tutorial en el cual se explica cómo abrir puertos en el router.

Configurar router para publicar web



Adicionalmente agregamos las respectivas reglas de entrada al firewall.


Finalmente, abrimos una consola cmd y ejecutamos el siguiente comando.

named -f
named-checkconf c:\bind\etc\name.conf

La ejecución de estos comandos no debe arrojar output.

named-checkzone domain.com c:\bind\dns\db.domain.com

La ejecución de este comando debe arrojar OK.

Abrimos la ventana de serivicios y verificamos que el servicio ISC BIND esté iniciado. Si no, lo iniciamos.

Si el sistema encuentra algún error derivado del inicio del servicio, lo ideal es revisar el log del sistema operartivo en la ventan Event Log. A continuación un ejemplo.



Si todo ha salido bien, en este momento cualquier persona en el mundo podría acceder a nuestro servidor local con el nombre de dominio domain.com o www.domain.com. Si embargo, a nuestro servidor aún le falta una última configuración, un daemon. Dado que la mayoría de equipos en internet cambian constantemente de IP, necesitamos un proceso que cambie constantemente la dirección del archivo de configuración db.domain.com a la que tiene actualmente el primer DNS que tengamos configurado. Esto se logra creando un script en PHP en el mismo directorio que dicho archivo con el siguiente contenido.

update_ip.php
 
/*
 * # php update_ip.php zone_file dns zone
 */

// Set localtime zone
date_default_timezone_set("America/Bogota");

$online = true;

while (true)
{
   $dnsIp = gethostbyname($argv[2]);

   $zone = $argv[1];
   $zoneContent = file_get_contents($zone);
   preg_match('/\[?[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\]?/', $zoneContent, $z);
   $currentIp = $z[0];

   if ($dnsIp == $argv[2])
   {
      if ($online === true)
      {
          echo "Unable to connect to DNS at ". date('Y-m-d H:i:s') . "\n";
          $online = false;
      }

      $hd = fopen("logs.txt", "a+");
      fwrite($hd, "Unable to connect to DNS at ". date('Y-m-d H:i:s') . "\r\n");
      fclose($hd);
   }
   else {

      if ($online === false)
      {
         echo "Connected to ". $dnsIp ." at ". date('Y-m-d H:i:s') ."\n";
         $online = true;

         $hd = fopen("logs.txt", "a+");
         fwrite($hd, "Connected to ". $dnsIp ." at ". date('Y-m-d H:i:s') ."\r\n");
         fclose($hd);
   }

   if ($currentIp != $dnsIp)
   {
        $zoneUpdated = str_replace($currentIp, $dnsIp, $zoneContent);
        file_put_contents($zone, $zoneUpdated);
        echo "DNS updated to: " . $dnsIp ." at ". date('Y-m-d H:i:s') ."\n";
        echo exec("rndc reload " . $argv[3]);
        echo "\n";

        $hd = fopen("logs.txt", "a+");
        fwrite($hd, "DNS updated to: " . $dnsIp ." at ". date('Y-m-d H:i:s') ."\r\n");
        fclose($hd);
     }
   }

   sleep(1);
}

Abrimos una nueva terminal, navegamos hasta el directorio C:\bind\dns y ejecutamos el siguiente comando.

php %CD%/update_ip.php %CD%/db.domain.com dns1.dyndns.org domain.com

Sobra anotar, que debemos reemplazar los parámetros del archivo por los que tengamos en nuestro caso específico.

Notas Finales


La solución que se ha expuesto en este post no es una solución que deba implementar en un servidor en producción, solamente debe hacerse para efectos pedagógicos y en el área académica. No se admitirán reclamaciones de ningún tipo relacionadas con daños o perjuicios causados por seguir cada uno de los pasos descritos en este post.

Aplicar esta solución en servidores de producción producirá los siguientes problemas:

- Los robos de Google notarán probablemente tres copias igual de la misma web dado que la página podrá ser accedida desde tres direcciones distintas a saber, dns1.dyndns.org, dns2.dyndns.org y domain.com. Todo esto, provocará que Google no indexe nuestra web o la indexe de manera incorrecta.
- La propagación de los DNS en internet nunca se concretará. A pesar de que se puede acceder desde cualquier parte del mundo, si revisamos la propagación de los DNS de nuestra página con herramientas online, propablemente nunca veremos un chequeo satisfactorio.

DNS Checkers

- https://dnschecker.org/
- https://www.whatsmydns.net/
- http://dnscheck.pingdom.com/


Referencias

- Domain Name System. (2015, 27 de junio). Wikipedia, La enciclopedia libre. Fecha de consulta: 02:41, agosto 18, 2015 desde
https://es.wikipedia.org/w/index.php?title=Domain_Name_System&oldid=83445155
- BIND. (2015, July 31). In Wikipedia, The Free Encyclopedia. Retrieved 02:41, August 18, 2015, from https://en.wikipedia.org/w/index.php?title=BIND&oldid=673899632
- Documentation | Internet System Consortium. (2012). In Internet System Consortium. Retrieved 21:56, August 17, 2015, from https://www.isc.org/downloads/bind/doc/
- How to Set Up a Local Domain width Bind in Windows: 12 Steps. (2015). In wikiHow - How to do anything. Retrieved 21:56, August 17, 2015, from
http://www.wikihow.com/Set-Up-a-Local-Domain-with-Bind-in-Windows
- Managing a Domain using Dynamic DNS. (2015). In Ian Atkinson's Homepage. Retrieved 21:56, August 17, 2015, from http://www.ianatkinson.net/computing/ddns.htm

Servidor en DynDNS

Dyn.com es una empresa que provee soluciones en Cloud para el monitoreo, control y optimización de infraestructura online. Dyn se asegura de optimizar el tráfico de dominios en internet para acceder más rapidamente y de forma segura a nombres de dominio contratados. Uno de los servicios de más auge de esta empresa y uno de los más utilizados es el servicio de Host DNS, del cuál hablaremos en este post.

Qué es el servicio de HOST DNS ?


Es un servicio que nos otorga un nombre de dominio en internet para nuestro uso personal o empresarial. Los nombres de dominio que otorga Dyn por lo general son en realidad subdominos como por ejemplo mipagina.dyndns.org o mipagina.is-saved.org.

Para qué sirve tener un HOST DNS ?


Son útiles para redirigir todo el tráfico de internet a direcciones IP específicas. Recordemos que en la red de redes toda máquina tiene una dirección IPv4 o IPv6 como por ejemplo 191.111.163.238. Si tenemos un servidor Web o FTP, muy seguramente sería mucho mejor que nuestros clientes accedan a estos servicios mediante un nombre de dominio y no una dirección IP que nadie puede recordar.


Cómo configurar un servicio de HOST DNS ?


Lo primero que debemos hacer es crear una cuenta en Dyn. Accedemos a la dirección https://account.dyn.com/entrance, y llenamos los datos necesarios en el formulario. Probablemente nos llegue un mensaje al correo el cual deberemos confirmar para poder iniciar sesión.



Después de iniciar sesión, para agregar un servicio de host dns, debemos dar clic en Add Host Services en el panel de incio de nuestra cuenta. 



Colocamos el nombre del subdominio a nuestro gusto con el dominio adecuado (ej: example.is-saved.org). El servicio que debemos escoger es Host with IP Address, colocamos la IP actual y agregamos al carrito. Hemos colocado nuestra IP actual en IP Andreess para que dicho dominio al ser accedido en internet redirija hacia nuestro PC servidor.



Después de agregar al carrito aparecerá el precio del servicio, que por lo general son $0 USD. Damos clic en Activate Services y enseguida tendremos nuestro servicio de host dns activo.



Servidor en DynDNS


Para esto debemos tener ya configurado un servidor Web, FTP, DNS, o cualquier otro ya operativo, en este caso supondremos que es un servidor web IIS o Apache en funcionamiento local. Respecto a esto, los dos pasos cruciales para tener éxito en la redirección del dominio creado hacia nuestro host son los siguientes:

1. Configurar servidor local para pasar por el firewall del Sistema Operativo.


2. Configurar los puertos necesarios en el router para ser accedido desde fuera de la red local (internet)


Si sigues estos dos tutoriales al pie de la letra el trabajo ya está hecho en un 90%. Nótese que en el caso de tener una IP fija, no nada hay más por hacer, recuerda que al crear el servicio en Dyn colocamos la IP pública que teniamos en ese momento, si no ha cambiado hasta ahora, nuestro servidor ya debe estar en internet y puede ser accedido con el nombre de dominio que nos ha otorgado DynDNS.

Si en lugar de ello, se tiene una IP dinámica, como el 90% del planeta, deberemos instalar un programa que actualice nuestra IP al servidor Dyn en internet. Para esto, Dyn ha desarrollado DynUpdater el cual puede ser descargado desde siguiente enlace Dyn Updater 4.1.10 (CNET).

Después de decargar el updater nos pedirá usuario y contraseña de la cuenta Dyn, el usuario no es el mismo correo con el cual fue creada la cuenta, es en sí el nombre de usuario.



Enseguida, aparecerán los HOST DNS que hayamos creado, seleccionamos el adecuado, damos click en "Apply" y en "Ok". Con esto, ya no tendremos que preocuparnos de que nuestra IP cambie de dirección constantemente, pues Dyn DNS redirigirá el trafico del dominio creado hacia nuestro servidor en cualquier momento.


Referencias

- DNS hosting service. (2015, March 12). In Wikipedia, The Free Encyclopedia. Retrieved 16:08, August 17, 2015, from 
- Dynamic DNS. (2015, August 4). In Wikipedia, The Free Encyclopedia. Retrieved 16:08, August 17, 2015, from https://en.wikipedia.org/w/index.php?title=Dynamic_DNS&oldid=674482387