Publica tu how-to

Dinos como hacer lo que sabes hacer, mándanos un email a wdonet@gmail.com y lo publicamos (dos días máximo) o si te interesa unirte al equipo de redactores, también háznoslo saber por correo.

Levantando una sencilla VPN con OpenVPN parte 2

Configuración de la VPN

Una vez que ya se tiene instalado OpenVPN en las máquinas servidor y clientes que serán miembros de la red virtual, hay que configurar correctamente el software, tanto en servicios como en generación de llaves de seguridad para poder tener la VPN funcionando.


Diseño de la red
La primer consideración importante a tener en cuenta es el diseño de la red virtual: qué máquinas formarán parte de la misma, si se formarán subredes dentro de la red virtual, cuestiones de ruteo y redireccionamiento, etc. Además se debe determinar el conjunto de direcciones IP que pertenecerán a las máquinas de la red.

En el RFC 1918, se establece que los rangos siguientes son exclusivos para redes privadas, es decir que ningún sitio en internet, que cualquiera podría ver, debe de tener asignada ninguna dirección de estos rangos, por lo que las múltiples redes privadas que puedan existir, virtuales o no, pueden hacer uso de estas direcciones IP para sus propósitos particulares.

Levantando una sencilla VPN con OpenVPN

¿Qué es una VPN?
VPN significa Virtual Private Network. Una VPN es una red virtual, que se configura para que todas las máquinas pertenecientes a la misma puedan verse como si se encontraran dentro de una misma LAN (Local Area Network), a pesar de poder encontrarse separadas por grandes distancias (y para el contexto del lenguaje de redes, fuera de una misma LAN).


¿Para qué sirve una VPN?
Bueno, pues las aplicaciones son muchas, pero en términos sencillos, se puede aprovechar para:
  • Compartir archivos
  • Establecer conexiones seguras
  • Disponer de servicios entre las máquinas que pertenecen a la VPN, como si estuvieran en una LAN
  • Juegos
  • etc. etc.

ORM : Mapeo Objeto - Relacional

Es una técnica de programación muy utilizada en paradigmas orientados a objetos, que te permite 'mapear' (es decir, emparejar un par de entidades de tu programa): por un lado una base de datos relacional y por otro lado objetos.

Por poner un ejemplo sencillo, una agenda con personas / direcciones y teléfonos.
En la base de datos relacional, pueden haber tablas para:
  1. Las personas, con datos como su nombre completo, edad, género
  2. Los teléfonos, con el dato del número telefónico y relacionados con las personas a través de una llave foránea (si la relación es 1-N) o una tabla de rompimiento (si la relación es N-M)
  3. Las direcciones, con datos para calle, número exterior e interior, colonia, etc. y relacionados con las personas, también a través de una llave foránea.

Por otro lado, en tu programa podrías tener los siguientes objetos:
  1. Un objeto persona, con una propiedad cadena para el nombre, una propiedad entera para la edad, una propiedad de una enumeración para el género.
  2. Un objeto telefono, con una propiedad cadena para el número telefónico.
  3. Un objeto direccion, con una propiedad cadena para cada campo de la misma tabla

Pero además, en tu objeto persona podrías tener lo siguiente:
  1. Una propiedad lista de objetos telefono
  2. Una propiedad de objeto direccion
Y de esta manera, una persona tiene uno o mas números telefónicos, y una dirección asociada.

Ahora bien, el ORM, además de permitirte modelar tu información de manera que utilices objetos para representar las relaciones de la base de datos, también puede permitirte la llamada persistencia. Esta propiedad se refiere al hecho de que, a través del motor del ORM y gracias al mapeo establecido (por ejemplo en un archivo de configuración XML) entre los objetos y las tablas de la base de datos, se consigue que los datos manipulados en los objetos se reflejen en la base de datos, y que cualquier cambio en los objetos mismos dentro del programa permita que el mapeo, además de ser declarativo (que establece el mapeo en sí entre objeto y relación), sea también del contenido.

En los lenguajes orientados a objetos existen muchos motores o frameworks que permiten implementar ORM en un sistema. Sin embargo, a veces es necesario o más sencillo implementar uno propio, con o sin persistencia.

En cuanto a los frameworks existentes, y que pueden usarse para desarrollar sistemas con un ORM, se encuentran por ejemplo:
  • Hibernate, para el lenguaje Java
  • Propel, para el lenguaje PHP
  • SQLAlchemy, para el lenguaje Python
  • Doctrine, también para PHP
  • etc...

Patrones de Diseño

Una lista de patrones de diseño

Patrón
Tipo
Otros nombres
Abstract Factory [fabrica abstracta]
de creación

Adapter [adaptador]
Estructural

Bridge [puente]
Estructural

Builder [constructor]
de creación

Chain of Responsability [cadena de responsabilidad]
Comportamiento

Command [comando]
Comportamiento
Action, Transaction
Composite [composición]
Estructural

Decorator [decorador]
Estructural

Facade [fachada]
Estructural

Factory Method [método de fábrica]
de creación

Flyweight [ligero]
Estructural

Interpreter [intérprete]
Comportamiento
Iterator [iterador]
Comportamiento
Mediator [mediador]
Comportamiento
Memento [recuerdo]
Comportamiento
Prototype [prototipo]
de creación

Proxy
Estructural

Observer [observador]
Comportamiento
Singleton [uno solo para siempre]
de creación

State [estado]
Comportamiento
Strategy [estrategia]
Comportamiento
Template Method [método plantilla]
Comportamiento
Visitor [visitante]
Comportamiento

Fuentes:
Una referencia rápida aquí, donde pueden descargar un PDF y sino, escribanme a wdonet@gmail.com, yo lo he de tener.