————– 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
http://192.168.1.10
ssh 192.168.1.10
VBoxManage setextradata MAQUINA "VBoxInternal/Devices/pcnet/0/LUN#0/Config/PROCESO/"PUERTO O PROTOCOLO"" PUERTO
VBoxInternal/Devices/pcnet/0/LUN#0/Conf...
VBoxManage list vms
- Nombre de servicio y puerto de la máquina fisica
- Nombre del servicio y puerto de la máquina virtual
- Nombre del servicio y PROTOCOLO usado (Normalmente TCP)
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.
Amigo Alvaro,solo una duda;para el caso que mencionas de que existiera un servidor en la maquina host,las peticiones que haga hacia la maquina guest deberian terminar con el puerto que configure para redirigir, es decir tendria que escribir:
http://xxxx.xxx:»puerto»
????
Saludos y muy buena la info
Hola Jaime, correcto. Si el servidor es web, la direcc tendria que ser:
http://IP_maquina_host:puerto
Pero fíjate que no es la direcc de la máquina virtual la que debes poner sino la de la máquina físicia donde está ubicado el servidor virtual. De la misma forma, el puerto que debes incluir es el puerto de la física (HOST) también.
Esto implica tener un poco de cuidado ya que es posible que la máquina fisica que contiene la virtual tenga ya algún servicio usando algún puerto de escucha, por ejemplo, a mi me gusta tener acceso SSH a todas mis máquinas así que para habilitar el acceso a una máquina virtual por SSH de esta forma hay que tener en cuenta que realmente se le están dando 2 accesos SSH a la misma máquina (LA física que contiene la virtual). Cuando se hace la petición al SSH principal, es decir, el mismo SSH de la maquina física, es el Servidor SSH que tengas configurado el que hace la escucha así que seria una conexión normal PERO cuando al intentar conectar a la máquina virtual realmente es una petición a la física PERO quien está escuchando en el puerto asignado es el propio VIRTUALBOX quien se encarga de comprobar que el puerto al que estás intentando conectar está asociado al servicio ssh de la maquina virtual dada y una vez hecha esa redireccion o mapeo (Realmente eso es el NAT) la petición ya es enviada al servidor ssh instalado en la máquina virtual.
En el caso que expones, un http, seria así:
Peticion a la maquina fisica y puerto de la maquina fisica —-> Virtualbox Acepta la petición y lo reenvia a la máquina virtual (Proceso transparente para quien hace la peticion)
http://ip_maquina_fisica:puerto_maquina_fisica —> VirtualBox –> maquina_virtual:puerto
Es muy interesante todo lo vertido en este post. Ya te agregué a mi lector de feeds RSS, suerte
Perfecto, es justo lo que estaba buscando.
Muchas gracias y feliz 2011.
De nada, me alegro de que te sirva.
Un saludo y feliz año!!!
Gracias, bastante claro. Es justo lo que estaba buscando.
Me alegro de que os sea útil. Aún no he probado este script con la última version de Virtual Box, de hecho, aún no he probado la nueva versión (La 4.0) pero si he leido la lista de cambios y tiene unos cuantos respecto a estos temas, como un GUI para gestionar estas cosas y soporte para hacer los mapeados NAT en caliente, al menos sobre el papel pero ciertamente promete bastante.
hola alvaro quisiera saber como configurar un servidor isa un servidor exchange y un servidor dc en virtual box con todos los servicios practcamente para una pequeña red que necesite estos servicios he tratado en virtualbox y no he podido te agradesco tu ayuda gracias
Hola fercho,
¿Podrías concretar un poquito más tu pregunta? Básicamente lo que es la instalación en si, es igual que si fuese una fisica solamente que después hay que tener clara la estructura de la red, IP´s, donde está cada servicio, que unos enlacen con otros…etc
Pero necesitaría que concretases un poco más la pregunta.
No obstante, como apunte ¿Que versión de VirtualBox tienes? Lo digo porque lo que comento en este mismo artículo ya se puede hacer desde el mismo entorno gráfico del propio VirtualBox a partir de la versión 4.
Un saludo
Hola, buscando la solución a mi problema con virtualbox he dado con tu articulo, y me ha sido de gran ayuda, solo que tengo una pequeña duda, ¿ hace falta poner la tarjeta en modo NAT?. Muchas gracias anticipadas.
Hola David,
Ten en cuenta que, aunque puedes seguir haciéndolo como indico en el artículo, con la nueva versión de VirtualBox (VirtualBox 4) incluyen varias características nuevas, entre las que destaca un modo gráfico desde las mismas opciones, para realizar esto mismo y que, al parecer (Digo ‘al parecer’ porque aún no he podido probarlo) no es necesario ni reiniciar la máquina para ir aplicando los cambios.
Ciertamente esta nueva versión de VirtualBox promete mucho y estoy deseando meterme de lleno con ella, nada más que me libere un poco de tiempo.
Solucionado! Muchas gracias, ya tengo la maquina funcionando y en perfectas condiciones 😛
Saludos, amigo no se si me puedes ayudar con esto, pero quiero saber si esto aplica con un modem 3g, pero el inconveniente es que cada ves que marca cambia la ip publica. por modo bridge no se puede porque no me aparece en las interfaces de red. Si me puedes dar una mano te lo agradeceria mucho.
Hola Andrés,
Cuando hablas de un modem 3G entiendo que es porque quieres acceder al servidor instalado en la máquina virtual desde cualquier sitio con internet PERO fuera de tu casa/empresa/sitio donde esté la máquina virtual. Si es desde la lan o red «casera», o desde el mismo ordenador que tiene la máquina virtual, da igual que la conexión a internet sea a través de un modem.
De ser lo primero y que quieras acceder desde cualquier otro sitio que no sea la propia red/host donde está la VM, es decir, a través de internet, lo primero que deberías hacer es darte de alta en algún servicio del tipo «no-ip» o «dyndns». Este tipo de servicios, que tienen modalidad gratuita, lo que hacen es permitirte tener un servidor localizado por dns, tras una redirección de subdominio, a pesar de que tenga ip dinámica. Esto es, cada vez que te cambia la IP, este servicio se encarga de actualizarse, a través de un pequeño cliente que deberás instalar previamente, para apuntar a tu nueva IP asignada, de forma que siempre que trates de acceder a tu servidor a través de el subdominio que registres con ellos, no tendrás problema. Dicho subdominio suele ser del tipo:
EscribesLoQueSea.no-ip.com (Siempre y cuando la direcc esté libre, lógicamente)
EscribesLoQueSea.dyn-dns.org (Siempre y cuando la direcc esté libre, lógicamente)
…etc…etc
Si por el contrario es desde la misma lan o el mismo host donde está la máquina virtual que hace de servidor… el tema se simplifica bastante ya que es, básicamente, limitarse a los pasos del artículo que, te recuerdo, puedes configurar de forma gráfica (Sin script) desde el mismo panel de configuracion de VirtualBox a partir de la versión 4 (El artículo salió bastante antes… por desgracia :S)
muchas gracias por responder, si efectivamente era para que el servidor fuera visible desde afuera, configure la dirección en modo gráfico pero no me funciono, Me fue muy útil tu articulo porque investigue y di con esto y solucione lo que quería, la cuestión era que me tomaba en NAT la tarjeta intel por defecto y solo tuve que cambiar pcnet por e1000 como se muestra aquí.
$ VBoxManage setextradata «Server» «VBoxInternal/Devices/e1000/0/LUN#0/Config/guestweb/Protocol» TCP
$ VBoxManage setextradata «Server» «VBoxInternal/Devices/e1000/0/LUN#0/Config/guestweb/GuestPort» 80
$ VBoxManage setextradata «Server» «VBoxInternal/Devices/e1000/0/LUN#0/Config/guestweb/HostPort» 8080
Muchas gracias.
Muchas gracias funciona perfecto.
Muchas gracias hace rato que estaba buscando esto, solucionaste mis problemas xD bastante completo y por fin algo util!
Hola Alvaro de antemano gracias, tengo algunos lios con el virtualbox, resulta que al abrirlo inmediatamente mi conexión a internet se viene abajo, con esto quiero decir que me indica que sigue conectado pero sin acceso a internet, esto es enseguida de que lo inicio, utilizo windows7, 4gb de ram, ¿tendrás alguna idea de qué hacer para poder jugar con el vbox?
Hola Carlos,
Yo probaría a cambiar la configuracion de red del VirtualBox de menos a más pero antes miraría el visor de eventos de windows ya que es posible que, si te está generando algun mensaje de error, en el visor deberia de aparece (Mi PC –> Boton derecho –> Administrar –> Visor de eventos –> Registros de windows. Una vez en esa entrada, deberías revisar las ramas Sistema y Aplicacion. Ten en cuenta que puedes reproducir el problema para saber el momento exacto en el que se produce y asi desechar otros mensajes del visor que no cuadren con las horas)
Aunque windows no es precisamente famoso por tener un sistema de logs claros (Y facilmente no te solucione nada concreto ver el error generado) pero podria encaminarte ya en la direccion correcta para encontrar el motivo del problema.
para los que esten probando con centos recuerden habilitar el puerto 80 dentro del firewall ya que por defecto solo viene activado el puerto 22
Acabo de instalar VirtualBox y seguido de eso Windows server 2008 r2, ahora bien, despues de realizar la configuracion de la tarjeta de red como puente puedo darle ping desde el server virtual a cualquier PC de la red, pero en sentido inverso no. Puedes ayudarme con este caso, ya que deseo crear un servidor virtual con SO Window 2008r2
Hola. he buscado por la web este metodo y no funciona de ninguna manera… podrias dar mas especificaciones de como hacerlo. al parecer las conexiones que hago por linea de comando estan bn, tambien lo hice con tu script . al ejecutar netstat en el pc fisico aparece la conexion con el puerto que indique en la configuracion. incluso al tratar de conectarme desde el pc fisico a 127.0.0.1:8888 en la consola aparece la conexion establecida pero la pagina se queda en cargando y despues de unos segundos se cae y no conecta.
como puedo saver bn si esta en correcto funcionamiento la configuracion de la redireccion de puertos…??
abra que configurar otra cosa? firewall,antivirus,etc. en el pc fisico o virtual
detalle:
-pc fisico win7 ps1 64bit
-pc virtual centosServer 6.3 32bit apache 2.4
-virtualBox 4.2.6
se los agredeciria mucho cualquier dato…