Artículos etiquetados "Windows"

Servidor Virtualizado con conexión NAT (VirtualBox y Windows)

————– Actualización ————–

Aunque el método usado en este artículo sigue siendo válido, con las nuevas versiones de VirtualBox ya es posible hacerlo todo desde el menu gráfico, cosa que se agradece bastante.

———————————————–

Últimamente, es bastante común montar servidores en máquinas virtuales y ese fue el caso que me ha llevado a crear este pequeño script que, en esta ocasión, es para sistemas Windows y con el conocido sistema de máquinas virtuales VIRTUALBOX.

En este mismo sistema, al igual que en muchos otros, existen varias opciones para la configuración de las tarjetas de red aunque para este caso en concreto nos centraremos en la opción por defecto y la tarjeta que, al menos antes, siempre se habilitaba por defecto, al menos en mi caso, que siempre es conexión mediante NAT y con la tarjeta PC NET.

Antes de nada diré que si ya está familiarizado con el NAT puede saltarse las siguientes lineas ya que, por si hay alguien a quien solamente «le suene» un poco o que directamente desconozca que es o como funciona, trataré de hacer una pequeña explicación.

Lo primero, como siempre es tener la maquina virtual funcionando (Evidentemente ;-)) y una vez tengamos la conexión mediante NAT, deberíamos poder conectarnos a Internet desde el sistema virtualizado sin ningún problema ni paso adicional que configurar la conexión en dicho sistema como si fuera una instalación física más, es decir, añadiendo una IP, máscara, puerta de enlace y DNS en el caso de que nos vayamos a conectar con una dirección estática o simplemente activando DHCP si tenemos algún dispositivo que nos permita una configuración de IPs dinámica. Sea cual sea el modo de conexión, nos es indiferente a la hora de montar el servidor virtualizado siempre y cuando la IP de nuestra máquina física, es decir, la que alberga la virtual tenga una IP fija o algún sistema que nos permita llamarla siempre de la misma forma aún siendo dinámica (Por ejemplo, algún sistema similar a DynDNS, NoIP de cara a internet o simplemente un router que de la posibilidad de asociar una dirección MAC a una direcc concreta de forma que aunque este configurado todo por DHCP siempre de la misma a la misma máquina ).

Se preguntará ¿¿Porque es necesario esto sobre todo cuando ya me conecto a internet?? pues bien, porque ahora mismo la máquina virtual conecta con «hacia fuera», por decirlo de alguna manera, pero no admite las peticiones que se le hagan desde la red como podrían ser las que se hacen a cualquier servidor así que es necesario realizar NAT (Network Address Translation) de forma que para acceder a este servidor virtualizado tendremos habilitar la correspondiente configuración en la maquina física que lo alberga para que al apuntar a esta (MAquina física)  nos redirija a la máquina virtual. Como explicarme nunca fue mi fuerte, vamos con los ejemplos:

Tenemos los siguiente:

Máquina VIRTUAL:
– IP: 10.0.2.15
– Servidor WEB (Puerto 80)
– Servidor SSH (Puerto 22)

Máquina FISICA (Sobre la que corre la Virtual)
– IP: 192.168.1.10

Pues en este caso de supuestos, para poder ver las WEB del servidor virtualizado tendríamos que hacerlo poniendo la IP de la máquina FISICA, es decir, esta es la dirección que tendríamos que escribir en el navegador (A falta de configurar un dominio aunque fuese local, por supuesto):
http://192.168.1.10
Y para acceder a las sesiones SSH:
ssh 192.168.1.10
Esto es debido a que, con las instrucciones que veremos a continuación habilitaremos que, el propio VIRTUALBOX, realice una redirección de los datos enviados a los puertos que digamos hacia la tarjeta de red y puerto de la máquina virtual y ahora que ya tenemos claras las nociones básicas, procedemos con lo importante.

 

.Entre las muchas cosas que incorpora VirtualBox, hay un comando llamado VBOXMANAGE.EXE desde el que se puede hacer de todo y que es, precisamente, el que utilizaremos para que nuestra máquina virtual admita conexiones desde el exterior, es decir, para que nuestro servidor funcione como lo que es. Como decia, entre las multiples funciones de VBOXMANAGE está la de configurar que las peticiones a ciertos puertos de la máquina FISICA pasen a nuestra máquina virtual.

 

A continuación muestro el comando y explico sus parámetros para esta tarea pero quizás este un poco más claro en el ejemplo que hay debajo. El comando a ejecutar es:

 

VBoxManage setextradata MAQUINA "VBoxInternal/Devices/pcnet/0/LUN#0/Config/PROCESO/"PUERTO O PROTOCOLO"" PUERTO

 

Es muy importante fijarse en que, para pasarle la orden de que escuche las peticiones en un puerto de la máquina fisica, indicamos, no solo el puerto de la máquina virtual sino que también la tarjeta de red que recibirá los datos.
VBoxInternal/Devices/pcnet/0/LUN#0/Conf...

 

Para estar seguros del nombre de la máquina sin tener que abrir el virtualbox, podremos hacer un listado de todas las máquinas virtuales que tenemos gracias, como no, al polivalente comando VBoxManage de la siguiente manera:

 

VBoxManage list vms

 

El proceso para abrir el servidor a las conexiones externas, por ejemplo las peticiones a un servidor web consiste en aplicar 3 veces el comando anterior para indicar, además de la tarjeta de red, como ya indicamos:

 

  1. Nombre de servicio y puerto de la máquina fisica
  2. Nombre del servicio y puerto de la máquina virtual
  3. Nombre del servicio y PROTOCOLO usado (Normalmente TCP)

 

De esta misma manera no estaremos obligados a usar el mismo puerto en ambas máquinas. Esto quiere decir que si, casualmente la máquina física que contiene la virtual, tuviese además un pequeño servidor WEB en el puerto 80, podríamos establecer con el anterior comando que dicha máquina reenvíe solo las peticiones, por ejemplo del puerto 8080, al 80 (Puerto estándar) de la máquina virtual. En definitiva, no hay restricción alguna respecto a los puertos salvo la de que no esté en uso.

 

Como pequeña nota, solo queda añadir que si tenemos algun sistema de FIREWALL configurado ya sea en la maquina física como en la Virtual, tendríamos que hacer los pasos pertinentes para que no bloquease el tráfico por lo puertos que haya pensado utilizar.

 

Pues bien, esa fue la teoría y ahora, el como aplicarla ya es tarea suya. Puede simplemente experimentar por su cuenta con el comando basándose esta breve explicación y, como siempre, también tiene la opción cómoda de descargarse el SCRIPT que he creado para automatizar todo el proceso. He de decir que, al menos en mi caso, es lo que estoy usando siempre gracias a la comodidad y rapidez del mismo.

 

Este Script no tiene que editarlo para cambiar puertos, protocolo o el nombres de servicio ya que se lo preguntará durante la ejecución del mismo. Eso si, funciona teniendo en cuenta que VirtualBox estará instalado en la unidad C: y el directorio por defecto, es decir:

C:\Archivos de programa\Oracle\VirtualBox

Si ese no fuera su caso, entonces si tendría que editarlo para modificar las primeras lineas, pues son las únicas que hacen referencia a dicha carpeta. Por supuesto, tambien es totalmente libre de editarlo para ver como está hecho 😉

Enlace de descarga del SCRIPT:  SCRIPT VIRTUALBOX a SERVER

Un saludo.

leer más

MiniScript VBS para avisar de nuevo correo

Este pequeño Script fue ideado para un caso muy concreto aunque se puede adaptar bastante más según las necesidades. En este caso, lo explicaré según el ámbito para el que fué ideado y que no es otro que el estar asociado a una regla de Outlook para activarse en cuanto llegue un correo de extrema importancia que no puede demorarse sin ser procesado.

Como he dicho antes, este VBScript fue diseñado para un entorno muy concreto que puedo resumir así:

  • Existen varias máquinas virtuales destinadas a la monitorización con diferentes herramientas.
  • Cada una de las máquinas tiene un Outlook configurado con la cuenta del cliente que representa.
  • Evidentemente, las máquinas están monitorizando por lo que no pueden tener el Outlook en pantalla.
  • Esto hace que, además de un equipo para trabajar, tengamos múltiples monitores con sus respectivas herramientas de monitorización abiertas de continuo.

En este entorno de trabajo se incorpora una nueva premisa: Si llegan correos de cierta aplicación, hay que procesarlos cuanto antes ya que tienen un tiempo de vida. En principio esto no es un problema pero dado que son varios monitores, que están a unos metros y que quienes los controlan tienen otras tareas, es relativamente sencillo que el paupérrimo aviso que nos muestra el Outlook se nos pase desapercibido de forma que solamente veremos ese correo tan urgente si hacemos un repaso máquina por máquina de forma manual, lo que tambien es bastante sencillo que transcurra más tiempo del debido entre repaso y repaso por lo que volvemos a influir negativamente en el tiempo de respuesta al correo urgente.

Si bien es cierto que las propias reglas del Outlook incluyen la posibilidad de mostrar un aviso en pantalla, este tampoco es realmente eficaz, al menos en este entorno, ya que no siempre se muestra encima de todas las ventanas (Haciéndolo quedar oculto) sino que alguna que otra vez falla y no sabemos porque, aunque con tanta máquina virtual, no es la primera aplicación que se nos vuelve loca. Así que tras barajar todas las posibilidades y probar algunas alternativas me he decantado por crear este pequeño VBScript que está resultando realmente eficaz y sencillo, combinación que lo hacen ser la solución perfecta, al menos en este caso. Además, gracias a su sencillez, es posible implementarlo en otros entornos haciendo unos cambios mínimos en el mensaje.

Veamos el Script:
Dim Shell : Set Shell = CreateObject("Shell.Application") : Shell.MinimizeAll
msgbox("Ha llegado un nuevo correo de APLICACION_ENVIADORA")

.Esta 2 lineas son el 75% de todo el proceso ya que el 25% restante es la regla que enlaza con este Script al darse la condición que le digamos.

La primera de las dos lineas lo que hará es ocultar TODAS las ventanas que tengamos visibles, es decir, es lo mismo que pulsar el boton de «Mostrar Escritorio».

Una vez que solo veamos el escritorio, nos mostrará un mensaje de advertencia informando de que ha llegado un nuevo correo de APLICACION_ENVIADORA. (Evidentemente la aplicación real no se llama así pero no creo que sea relevante para la explicación cual sea el nombre real de la aplicación).

Ahora solo nos queda ir al Outlook y entrar en:

Herramientas –> Reglas y alertas –> Nueva regla –> Comenzar regla en Blanco

Esto nos abrirá un pequeño asistente en el que podremos ir confeccionando los parámetros de la regla que, en este caso, quedarían así una vez terminada:

Aplicar esta regla a todos los mensajes procedentes

de  APLICACION_ENVIADORA@loquesea.com

y solo en esta máquina

iniciar Script_AppEnviadora.vbs


La primera parte de la regla es la condición, que en este caso comprobará si se cumple que el remitente de cada nuevo correo sea  APLICACION_ENVIADORA@loquesea.com que, en este caso, se trata de una aplicación y la parte otra parte de la regla, la relativa a la acción a desarrollar cuando se produzca la condición, es iniciar la ejecución de un programa, que en este caso, más que un programa es nuestro script de 2 lineas:  Script_AppEnviadora.vbs.

Esta combinación funciona realmente bien, os lo puedo asegurar y en un entorno de monitorización no hay nada mejor para llamar la atención de quien esté en el puesto que ocultarle la herramienta con la que monitoriza, es infalible. Eso si, hay que tener en cuenta un punto realmente importante, esta regla que hemos creado es una regla de cliente y por tanto es completamente necesario que el cliente esté funcionando, es decir, es necesario tener el Outlook abierto para que se ejecute pero eso no lo voy a automatizar ya que mi intención es mejorar la efectividad y hacer más cómodo el trabajo, no sustituir a las personas por Scripts o automatizaciones, que ya hay bastante paro estos días en los que vivimos!!!!

Descargar el Script: SCRIPT.VBS

leer más

Automatizando chat con Office Communicator 2005

Automatizando chat con Office Communicator 2005

Hace tiempo que donde trabajo, se está utilizando el Office Communicator 2005 como herramienta de comunicación interna de la empresa y la verdad es que resulta muy útil y «cómoda» sobre todo para no estar siempre colgado del teléfono cuando necesitas hablar con personas de otros departametos o incluso de otras sedes pero cuando tienes muchos contactos agregados, comienza a ser como todo programa muy cargado, es decir, poco práctico y lento.

En mi caso, opté por agrupar las personas por departamentos pero ha llegado un momento en el que tampoco sirve como solución cuando quieres rapidez, y más si estás acostumbrado a un buen lanzador como QUICKSILVER en MAC, por eso he recurrido a esta combinación de script y lanzador de aplicaciones en el escritorio Windows del trabajo.

El primer paso era tratar de automatizar, en un script, la apertura de un chat, al menos, con las personas que más suelo utilizarlo que, normalmente son un grupo de 5 o 6, no más. Con este paso ya me encontré el primer problema ya que, por más que busqué, no apareció nada de información sobre parámetros para pasar por linea de comandos al communicator 2005 pero como se podría decir que soy bastante testarudo, mediante el método de ensayo y error, testeando los comando de programas similares he llegado conseguir abrir un chat con una persona a través de la linea de comandos de la siguiente manera:

COMMUNICATOR.EXE sip:direccion@correo.com

En teroria el parámetro sip:direccion, deberia de establecer una llamada sobre VoIP pero dado que en mi empresa esto no está configurado, no funciona así. Es más, con dicho parámetro me abre un chat con la persona cuya dirección sigue al sip:. Es de suponer que esto funcione de forma similar en otras instalaciones de Office Communicator 2005 pero si veis que no es así, buscaremos una solución

Tal cual está, ya tiene cierta utilidad porque añadiéndole un par de líneas tendriamos un pequeño script mediante el cual podremos con un simple clic inciar un chat, así que completemos un poco más el script para que sea útil

@ECHO OFF
CLS
CD "C:\Program Files\Microsoft Office Communicator"
COMMUNICATOR.EXE sip:direccion_correo@dominio

Evidéntemente cambiariamos direccion_correo@dominio por una dirección de correo válida de la empresa interconectada con el communicator.

Como hemos dicho, hasta aquí ya estaría bien ya que un script así es iniciable con el ratón y con situarlo en el escritorio bastaria para tenerlo a mano pero si son muchas las personas que queremos tener accesibles de esta forma, nos va a ocurrir el mismo problema que teníamos con ellas en el communicator: demasiados botones, demasiadas personas y lentitud para buscar una entre tantas.

Para volver a evitarlo y conseguir que este manual sea realmente útil, necesitamos recurrir a una pequeña aplicación similar al ya citado QUICLSILVER de MAC solo que en esta ocasión para Windows, un lanzador de aplicaciones. A pesar de que existen varias alternativas, nos vamos a quedar con EXECUTOR ya que puede tenerse funcionando correctamente sin falta de ser administrador de equipo (No es necesario realizar una instalación).

Executor en acción

Aspecto del cuadro de executor

Esta aplicación, una vez está arrancada, no es visible al usuario. Para «activarla» tendremos que presionar una combinación de teclas que, en mi caso, para tener la misma que en el MAC, he usado las teclas CTRL + SPACE. Cuando se pulsa dicha combinacion aparece un pequeño cuadro de texto en el que escribiremos el nombre de la aplicacion que queramos lanzar y se ejecutará.
Solamente con esta característica ya se gana un tiempo maravilloso pero lo mejor es que se pueden personalizar los comandos de la aplicación llegando ser realmente útil y comodo realizar muchas de las acciones cotidianas aunque en este caso solamente configuraremos el comando necesario para abrir un chat con la persona que queramos por communicator.

Ahora que ya he presentado el programa, vamos manos a la obra de nuevo:

Descargamos el EXECUTOR de la PAGINA OFICIAL.

Una vez descargado, tendremos que configurar 2 puntos para llamar a nuestro compañero de trabajo.

El primero es más bien las teclas que queremos tener para invocar el communicator y seleccionar que se inicie cuando arranquemos Windows. Esto se haria en el punto marcado en la siguiente captura:

Configuracion 1 del EXECUTOR

Configuracion 1 del EXECUTOR

Executor ya funcionaria sin más pero nos falta aún la parte que interesa para este artículo, llamar al communicator y que nos abra un chat con la persona indicada. Esto lo conseguiremos creando un nuevo comando para el executor que, en cuanto lo escribamos vaya directamente a ejecutar el SCRIPT que le indiquemos. así que vamos manos a la obra:

Crear un nuevo comando en EXECUTOR

Crear un nuevo comando en EXECUTOR

Para crear el nuevo comando nos situaremos en la pestaña «Keywords» y pulsaremos la tecla «INS» del teclado, lo que nos situará sobre el primer cuadro de texto llamado también «Keywords» y en el que escribiremos el nombre por el que queramos invocar el comando o script. En el caso de la captura he escrito compañero pero si tenemos en mente crear varios comandos para abrir chats,  sería recomendable asignarles los nombres de las personas como por ejemplo, Armando, Sonia, Jandro, como salen en los cuadros de la parte superior de la captura.

En el siguiente cuadro de texto tendremos que escribir la ruta completa hasta el script previamente creado.

Una vez hecho esto ya estaría preparado para ser invocado de forma rápida, cómoda y sencilla aunque se puede rizar el rizo asignándole una «Hotkey» en esa misma ventana, es decir, un atajo de teclado para invocar dicho comando o incluso cambiar el icono que tendrá el comando en executor cuando lo escribamos aunque no es necesario y lo veremos en otro artículo.

Y ya está, en cuanto apliquemos los cambios realizados ya podremos hacer la prueba y disfrutar de la comodidad. Si habeis dejado la configuración igual que yo los pasos serían los siguientes:

Desde cualquier ventana, pantalla, programa, es decir, esteis donde esteis, al pulsar:

CTRL + SPACE

Se abrirá una pequeá ventana similar a esta:

Executor en acción

Aspecto del cuadro de executor

Dentro de ella, tendremos que escribir el nombre que le hayamos dado al comando. Si habeis dejado el mismo que puse en el ejemplo seria: compañero. Realmente con que comenceis a escribirlo ya deberiais ver que os lo va autocompletando a la vez que muestra un icono, una vez veais la palabra tal y como la introdujísteis en la configuracion, solamente tendreis que apretar el intro para que el SCRIPT inicial se ejecute.

Ya veis que sencillo resulta tener todos los programas, scripts, incluso ubicaciones como el panel de control, mi pc o mis documentos en dos sencillos pasos de teclado.

Os aconsejo encarecidamente que echeis un vistazo a los comandos que vienen incluidos en la lista del propio EXECUTOR ya que os servirán de guía para crear otros nuevos. Además tened en cuenta que tambien admite parámetros y páginas WEB  por lo que podréis crear comandos compuestos, sin mucha complicación como algunos de los que tengo yo aunque la elaboración de los mismo la veremos en otro manual más adelante

Un saludo.

leer más

Abrir varias máquinas virtuales en diferentes servidores con autenticación mediante un solo clic (Script)

La verdad es que no pasó mucho tiempo para que buscase la forma de automatizar el arranque de las máquinas virtuales necesarias para el trabajo del dia a dia ya que, mi mania por automatizarlo todo era un verdadero impedimento para realizar la rutinaria acción de introducir el servidor y el nombre de usuairo con la password cada vez que tenia que arrancar una de las varias máquinas virtuales.

La verdad es que es uno de los scripts más simples que puede haber pero a su vez resulta de lo más útil. La parte principal del script es la de la(s) linea(s) que invoca al VMware server pasándole directamente como parámetros los datos que nos pide si lo ejecutamos sin más. La verdad es que, casi mejor que paso al ejemplo práctico que a tratar de explicarlo con palabras.

La linea clave es la siguiente:
start "VM 1" /min vmware -h IP_SERVER -u NOMBRE_USER -w CONTRASEÑA
Y ahora pasamos a explicar cada una de las partes de la misma:

  • start: Comando del terminal de Windows que sirve para invocar programas sin salirse del Script.
  • VM 1: Nombre que le damos a la ventana. En mi caso solo dura mientras se abre.
  • /min: Abre las ventanas minimizadas. Muy útil cuando son varias las ventanas a abrir o queremos ir haciendo otras cosillas.
  • vmware: El comando para abrir el vmware.
  • -h: Parámetro para poder pasar la dirección del Host o servidor donde están las máquinas virtuales.
  • -u: Parámetro que permite especificar el nombre de usuario para abrir las maquinas.
  • -w: Último parámetro cuya finalidad es poder especificar la password del usuairo de las máquinas.

En mi caso, la idea era, no solo abrirlas mediante un simple clic, evitando dar un monton de pasos repetitivos sino que tambien las abriera en orden ya que cuando son muchas máquinas el orden es más bien una necesidad que una manía. El problema es que no importa el orden en el que las invoques desde el script ya que entran en juego otros factores como la velocidad/saturación de la red, carga de trabajo/usuarios que tenga cada uno de los servidores…etc y todos estos puntos hacen que unas veces tarde más una que otra sin seguir un orden constante y/o lógico.
Para evitar este pequeño problema, se puede recurrir a mil soluciones aunque la verdad es que la primera que me se me ocurrió, fue la que quedó hasta el dia de hoy y es hacer un ping a la dirección loopback de la máquina añadiéndole un >NUL tras invocar cada una de las máquinas. Con esto gano los segundos necesarios para que no se altere el orden con el que quiero que se abran las máquinas.

Una vez aclarados todos estos puntos, no me queda más que mostraros el pequeño Script, así que vamos allá…

@echo off
cls
rem ########################################################
rem # Script arranque maquinas Virtuales Version 1 beta #
rem ########################################################
rem ## ##
rem ## Script automatizado para arrancar las maquinas ##
rem ## virtuales con un solo comando. Made in Win :-( ##
rem ## por Alvaro Anaya ##
rem ## ##
rem ########################################################
echo.
echo.
echo Script para el arranque automatizado de las VM
echo.
echo Procediendo al arrancado...
echo.
echo Arrancando maquina 1...
start "VM 1" /min vmware -h IP_SERVIDOR -u USUARIO -w PASSWORD
ping 127.0.0.1 >NUL
echo.
echo Arrancando maquina 2...
start "VM 2" /min vmware -h IP_SERVIDOR -u USUARIO -w PASSWORD
ping 127.0.0.1 >NUL
echo.
echo Arrancando maquina 3...
start "VM 3" /min vmware -h IP_SERVIDOR -u USUARIO -w PASSWORD
ping 127.0.0.1 >NUL
echo.
echo Arrancando maquina 4...
start "VM 4" /min vmware -h IP_SERVIDOR -u USUARIO -w PASSWORD
echo.

Por supuesto, se pueden añadir o eliminar el número de máquinas a abrir o mejorar el script considerablemente pero lo que está claro es que funciona y lo hace muy bien, de hecho en mi trabajo es uno de los «must have» que todos hemos comenzado a usar diariamente por su sencillez y comodidad.

leer más