domingo 23 de noviembre de 2008

VirtualBox - Ubuntu 8.10 (Intrepid Ibex) - Red con Bridge entre máquina virtual y real.

Si les gusta trabajar con redes y levantar servicios, servidores y otras yerbas, pero necesitan tener su sistema operativo siempre en buenas condiciones, una posible solución es utilizar VirtualBox para correr un sistema virtualizado en el cual pueden trastear sin miedo a matar su S.O. El problema que surge es que por defecto la maquina virtual queda conectada con la máquina real a través de NAT. Esto hace que nuestra maquina virtual tenga una IP automática dada por VirtualBox y que por ende no no podamos verla como un equipo mas en la red, lo cuál nos limita las posibilidades enormemente.

La solución es configurar la conexión en modo bridge, o conectada a través de la interface anfitrión y darle a nuestra máquina virtual una IP válida en la red local. Peeeero...no todo es tan fácil en esta vida!!

Si ustedes tienen una red cableda (Su máquina real se comunica al router o el switch a través de un cable UTP) pueden resolver el problema rapidamente siguiendo este excelentísimo tutorial, cortesía de Sinergiatec (Además recomiendo que sigan este blog, siempre encontraremos información de interes en él).

Sin embargo, si tu máquina esta conectada a la red a través de Wi-Fi, el tutorial no funcionará. El problema se debe a que debe ponerse la placa de red en modo promiscuo (Modo de escucha). Dicho modo es totalmente diferente si tenemos placas cableadas o inalámbricas. Para que se entienda mejor, daremos un detalle de que significa el modo promiscuo para cada tipo de placa:

Placa cableda en modo promiscuo: La placa esta conectada a una red y además esta escuchando todos y cada uno de los paquetes que pasan por ella.

Placa inalámbrica en modo promiscuo: La placa esta desconectada de toda red y en modo busqueda de SSID (Buscando redes inalámbricas disponibles).

Bien es así que poner la placa inalámbrica en modo promiscuo hará que la misma quede desvinculada de la red, por lo que si, tendremos una red tipo bridge entre la máquina real y la virtual (Porque es por software, equivalente a estar cableda), pero estaremos desconectados del resto de los equipos de la red y no tendremos acceso a internet.

Para resolver este contratiempo, debes loguearte como root en una consola e ingresar los siguientes comandos:

sysctl net.ipv4.ip_forward=1
VBoxTunctl -b -u AdminRooT
ip link set tap0 up
ip addr add 192.168.0.102/24 dev tap0
parprouted ath0 tap0
route add -net 192.168.0.0 netmask 255.255.255.0 tap0

#* En la segunda línea pongo AdminRooT, pero corresponde poner el nombre del usuario que utilizará VirtualBox.
#* En la cuarta línea pongo 192.168.0.102, pero deben colocar CUALQUIER IP válida en la red y que no este en uso. El /24 representa la mascara de red.
#* En la última línea pongo 192.168.0.0, pero se trata de la dirección de red de mi red, valga la redundacia. 255.255.255.0 es la máscara de red.

Luego de esto deben ejecutar VirtualBox, y en la sección red de la máquina virtual deben configurar como se ve en la siguiente figura:

Noten que se seleccionaron las opciones:

Attached to: Interface anfitrion

Interface Name: tap0

A continuación solo queda encender la máquina virtual, configurar la placa de red con una dirección IP válida en la red local y listo, la máquina virtual queda conectada en red con la máquina real y con toda la red como si fuera un host mas.

Esta forma de configurarlo obliga a que cada vez que se quiere utilizar virtualBox se deban ingresar las línea antes mencionadas por consola. Para automatizar el arranque, deben incluir dichas líneas en el archivo rc.local (En ubuntu y debian se encuentra en /etc/rc.local). Solo debe tenerse la precaución de agregarlo al final del archivo pero antes de la línea que dice "exit(0)".

Este tutorial fue probado en Ubuntu Hardy Heron con VirtualBox 1.6 y en Intrepid Ibex con VirtualBox 2.0.4. En ambos casos funciono correctamente.


====================================================================
Fuentes:

http://sinergiatec.wordpress.com/
====================================================================

11 comentarios:

Fer Ambrosi dijo...

Enano, muy lindo tu blog... espero que lo sigas haciendo y me tengas en cuenta para lo que necesites...

Aunq no me hayas dicho q es tuyo, yo se que lo es.
Un abrazo y hasta pronto!!!

sinergiatec dijo...

Gracias por la mención a Sinergiatec. Voy a modificar mi post (con tu permiso espero) para que apunte a este en lugar de a la respuesta que diste en mi blog. Aquí lo tienes más completo.

Saludos!

AdminRooT dijo...

Sinergiatec, por supuesto que puedes modificar tu post para apuntarlo aquí. De eso se tratatodo esto, de compartir libremente nuestros conocimientos por el bien de la sociedad toda.

Saludos!

AdminRooT

christopher dijo...

AdminRoot

hola tengo coneccion por dhcp a traves de ath0 pero debo tambien levantar la interfaz pppoe para establecer mi conexion inalambrica

asi establesco mi conexion a internet normalmente

#!/bin/bash
poff -a
iwconfig ath0 essid wifitelsur_cpa key s:001F9F116F6AX
pon dsl-provider-telsur
plog

me genera las interfaces:

ath0 Link encap:Ethernet HWaddr 00:17:c4:xx:xx:xx
inet6 addr: fe80::217:c4ff:xxxx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:97298 errors:0 dropped:0 overruns:0 frame:0
TX packets:37627 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:123355348 (117.6 MiB) TX bytes:3844213 (3.6 MiB)

y


ppp0 Link encap:Point-to-Point Protocol
inet addr:200.126.93.75 P-t-P:216.155.73.202 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:47410 errors:0 dropped:0 overruns:0 frame:0
TX packets:37266 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:60566054 (57.7 MiB) TX bytes:3003832 (2.8 MiB)

como tendria que hacerla en este caso considerando las interfaces que te di anteriormente




una duda a que te refieres con:

1)
"En la última línea pongo 192.168.0.0, pero se trata de la dirección de red de mi red"

que pasa si yo estoy conectdo via dhcp inalambricamente?

2)
"En la cuarta línea pongo 192.168.0.102, pero deben colocar CUALQUIER IP válida en la red y que no este en uso. El /24 representa la mascara de red."

da lo mismo la IP cierto? esa es la ip que debo asignar a la maquina virtual?

3)
"A continuación solo queda encender la máquina virtual, configurar la placa de red con una dirección IP válida en la red local y listo"

esa es la ip 192.168.0.102, que interfaz debo levantar en la maquina virtual, eth0?


Saludos y gracias de antemanos

AdminRooT dijo...

Christopher,

El asunto de DHCP no tendría que ser un problema siempre y cuando tengas bien configurado tu servidor de DHCP o router (en caso que sea el router directamente). Lo que me parece mas raro es el tema de la interfaz PPP0, que no tiene porque hacerte falta para lenvantar la conexión inalámbrica (es Protoclo punto a punto...).

Necesitaría que me des mas detalles de tu red, para poder darte una respuesta que te sea de utilidad. Necesitaría saber si estas utilizando un router inalámbrico como servidor de DHCP, que router estas utilizando.
Por tus comentarios me da la sensación de que cada vez que quieres conectarte tenes que haces el proceso de "discado" de ADSL. Si ese fuera el caso es incorrecto, tendrás que enrutar el modem para que disque automaticamente al encenderlo.


En el caso de DHCP, la única diferencia es asegurarte que estas colocando direcciones válidas en la red, pero por encima de la máxima dirección que puede dar el servidor, cosa muy simple de hacer. Si podes enviame también como tenes configurado el servidor DHCP y que IPs estas utilizando, para poder revisarlo e indicarte si hace falta algún cambio.

1)
A lo que me refiero con que 192.168.0.0 es la dirección de mi red, es que tengo todas direcciones del tipo 192.168.0.x con máscara 255.255.255.0, con lo cuál la primer dirección del rango válido es la 192.168.0.0 y esa dirección no representa a ningñun equipo de la red, sino que es la dirección base de la red.


2)
La direcciñon 192.168.0.102 es, basado en lo que te explico en 1) una dirección IP cualquiera, que no esta siendo usada ni por el servidor DHCP ni por ninguna máquina. el /24 es tal cuál lo mencionas, la máscara de red (Puede expresarse de cualquiera de las dos formas). Dda lo mismo cualquier IP que coloques siempre y cuando este libre, y no, no es la IP que asignaras a la máquina virtual, sino la IP que funcionará de puente para conectar la máquina virtual. El resultado final será una interface virtual llamada tap0 en tu máquina real que por un lado se conectará al resto de la red y por el otro lado se conectará a tu máquina virtual. para que dicha interface tap0 tenga conectividad debe tener una IP válida, y esa es la IP que le colocamos mas arriba.

3)
No, como te detallo mas arriba, la IP 192.168.0.102 no es la de la máquina virtual. En mi caso le puse 192.168.0.11, mientras que en la máquina real tengo la IP 192.168.0.1.
La IP de la máquina virtual es al igual que antes, cualquier IP del rango 192.168.0.x que no este siendo utilizada, y que sea distinta a la de la interface tap0 que acabamos de crear.


Espero que esta información te sea de utilidad, y si sigue sin funcionar puedes enviarme la información que solicito mas arriba, para tratar de juntos resolver tu problema. Otro dato que sería interesante tener es saber que sistema operativo y que versión estas utilizando, y que máquina virtual y versión estas utilizando.

Crhis, no te des por vencido, sigue intentando...te puedo asegurar que funciona y muy bien! Y ya sabes, si seguis con problemas, no tienes mas que avisar para que podamos ayudarte.

Sdos!!

AdminRooT

christopher dijo...

Hola muchas gracias por tu disposicion a ayudarme de verdad,

Mi red es un tanto extraña, no tengo acceso al router mi proveedor bloquea el acceso a la configuracion del router.

Bueno el tema es que para establecer mi conexion ya sea desde win o desde linux, debo aparte de cargar mi red y mi contraseña(que es lo que comunmente se hace), realizar un discado adsl(ppp0) ya que mi conexion es adsl. Recien hay me da una ip dinamica, ejemplo:

ppp0 Link encap:Point-to-Point Protocol
inet addr:200.126.106.169 P-t-P:216.155.73.202 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:1974 errors:0 dropped:0 overruns:0 frame:0
TX packets:2009 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:976159 (953.2 KiB) TX bytes:256202 (250.1 KiB)

si te fijas es una ip tipo 200 y algo.


A este router siempre accedo via ath0 inalambricamente ya que tengo un portatil, tambien puedo conectarme por cable(no es la idea) y es lo mismo interfaz eth0 y interfaz ppp0.

Yo trabajo con debian lenny con la version de virtual_box 1.6.6

El tema es que una maquina virtual linux puede salir a internet sin ningun problema, si en configuraciones de la maquina especifico en red NAT. Esto me da una ip tipo 10.0.2.15 en la interfaz eth0 de la maquina virtual.

Ahora colocando la interfaz anfitrion no es posible obtener una ip automaticamente de la maquina virtual.

Lo que yo quiero hacer es un ssh y scp hacia la maquina virtual que posee un centos, esto es para desarrollar una aplicacion de instalacion en java y tener varios servidores de prueba que en este caso serian las maquinas virtuales.

Bueno esos son datos me avisas si te falta algo para que me puedas ayudar.

Saludos

Christopher

AdminRooT dijo...

Crhistopher,

Por lo que me contas no tenes una LAN en tu casa, solamente un modem y una Laptop con la cuál inicias sesión ADSL (Conexión PPP0). Tu Proveedor ADSL te tiene que entregar un modem ADSL que adicionalmente puede ser tambien un router o no. En caso que lo sea deberías poder tener acceso configurarlo, por lo cuál asumo que es lisa y llanamente un modem).

Si estoy en lo cierto con todo esto, la cosa se hace un poco mas compleja. Veamoslo desde el punto de vista de computadoras reales y no de máquinas virtuales:

Si tuvieras un modem y quisieras conectar otra PC a la red, deberías o bien comprar un router y un switch, o bien configurar una PC con dos placas de red, una conectada al modem y la otra a la segunda PC, funcionando como un NAT (Lo cuál, es basicamente un router). O sea que no tendrías manera de conectar una nueva PC a la red, a no ser hagas las modificaciones necesarias.

Para el caso de maquinas virtuales, esto es igualmente válido, ya que al fin y al cabo, tu máquina virtual será una máquina mas en la red. Es por esto que cuando configuras VirtualBox para usar conexión NAT la maquina virtual tiene Internet. Pero el querer crear un puente a la máquina real, equivale a conectar una PC extra a la boca de un switch, por lo cuñal necesitas una puerta de enlace que no tienes, porque claro, no tiene un router en tu red.

La dirección que tu máquina toma en forma automática la toma a través de una conexión Punto a Punto (Point-to-point protocol, PPP). Tu máquina virtual nunca podrá conectarse y obtener una dirección. O en el mejor de los casos podrás hacer un puente entre ambas máquinas, pero solo tendrás internet en una de ellas. Si quieres conexión en la máquina virtual, bueno pues, tendrás que dejar sin conexión a tu máqina real!.

Todo esto es basandome en una red como te la describo al principio. Puede que este equivocado, pero a simple vista esto es lo que parece. Estuve dandole muchas vueltas al asunto, y de la única forma que me cierra y me suena lógico es esta.

Si los servidores que tu quieres montar quieres que tengan conexión de red con la máquina real para poder transferir información (Es lo que deduzco), no necesitas todo este rollo. VirtualBox te permite compartir un directorio del máquina real y montarlo en la virtual, de manera tal que puedes utilizarlo como si fuera local. Por ejemplo yo tengo una partición de datos que esta compartida con todas las VM que tengo, y de esa forma cualquier dato que guardo en una máquina puedo verlo desde otra.

Si tu red difiere de lo antes descripto, puede que mi explicación sea incorrecta. Cualquiera sea el caso, sería fantastico que lo indicaras aquí en el blog, para que cualquiera que se encuentre con un problema como el tuyo pueda saber que camino tomaste.

Te mando mis saludos, espero que esto sirva de algo, y ya sea que sigas con problemas, o mi explicación sea erronea, o logres resolverlo, espero que todos los lectores del blog nos enteremos.

Saludos!

AdminRooT

christopher dijo...

se me olvido mencionar tengo un modem inalambrico thomsomp speedtouch 585 V6

hay una foto del modelo http://fcc-egypt.com/images/prod7.gif

Saludos

christopher dijo...

Estoy de acuerdo con lo que me dices sobre compartir ficheros via un directorio compartido, sin emabrgo eso ya lo hago, el tema es poder emular esta maquina virtual como si fuera un servidor real con su ip propia y sus usuarios. Esto lo necesito para hacer pruebas via ssh y scp. Como no dispongo de muchos servidores quisiera hacerlo de esta forma ya que puedo emular muchas maquinas y entonces tendria muchos servidores virtuales para hacer pruebas que no perjudicarian a nadie, ya que puedo borrar o crear maquinas virtuales a mi antojo, no asi servidores reales.

Bueno seguire revisando el tema, pero eso es lo que quiero hacer
Saludos y muchas gracias nuevamente,
cualquier cosa nueva les aviso

Christopher

christopher dijo...

Hola a todos,
bueno les cuento que
- no logre configurar el puente, entre virtualBox y el anfitrion
- Sin embargo logre configurar la NAT de la red entre el anfitrion y el guest, y ahora puedo ingresar via ssh y traspasar archivos via scp y bueno eso era lo que buscaba desde un comienzo, para hacer pruebas y emular servidores reales.

La configuracion no es compleja, hay que redireccionar los puertos que necesitemos a puertos personalizados

por ejemplo para utilizar el puerto ssh en el guest, redireccionando el puerto 22 al 2222
seria algo asi:

ojo de ejecutar con el usuario que arranca VirtualBox comunmente, no necesariamente deber ser el root

Código:
$ VBoxManage setextradata "Mi_guest" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP
$ VBoxManage setextradata "Mi_guest" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22
$VBoxManage setextradata "Mi_guest" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 2222



ingreso ssh
Código:
ssh -p 2222 usuario_guest@127.0.0.1


trasferencia scp

Código:
scp -P 2222 usuario_guest@127.0.0.1


el bridge lo vere mas tarde, por mientras puedo avanzar con esta configuracion.

Saludos y se agradece la ayuda

Christopher

AdminRooT dijo...

Crhis,

Muchisimas gracia spor contarnos como lo lograste!

Saludos!

AdminRooT