Si lo que pretendes es navegar por internet en la máquina virtual, entonces no hay problema, configura la tarjeta de red en modo
NAT (por defecto viene así) y tu máquina virtual navegará por internet. Pero si quieres comunicar la red de tu ordenador anfitrión (Linux) con la máquina virtual, o en el caso de tener varias máquinas virtuales tener la posibilidad de conectarse las máquinas virtuales vía red; o incluso conectarse la máquina virtual con otros ordenadores reales.
¿Qué utilidad puede tener esto?, os daré algunos ejemplos:
- Es un método para compartir archivos entre la máquina virtual y cualquier otra, ya que habilitando samba puedes compartir esos archivos. Podrás utilizar tarjetas WiFi en la máquina virtual, inutilizables de cualquier otro modo.
- Ahora puedes mapear puertos a la máquina virtual, y usar así programas p2p o montar servidores en la misma.
- Es el perfecto banco de pruebas entre Servidores y Clientes disponiendo de un solo ordenador.
Solución para la nueva versión de VirtualBox 2.1.0Todo es más fácil, solo hay que definir un adapatador de red de tu máquina virtual como
interface anfitrión y elegir sobre que tarjeta de tu ordenador se define, por ejemplo eth0, wlan0, etc...
Solución para versiones anteriores a la VirtualBox 2.1.0Para que entendáis bien el proceso, lo voy a explicar basándome en la
configuración que tengo en mi portátil:
- Ubuntu 8.04 (que será el ordenador anfitrión, sobre el que se instaló VirtualBox PUEL), dispone de un usuario denominado ramon con privilegios de administrador, una tarjeta de red ethernet eth0 y otra tarjeta de red wifi wlan0 por la que accedo a internet por la red 192.168.1.0/24
- Una máquina virtual con Windows 2003 Server.
- Otra máquina virtual con Windows XP.
Basándose en la configuración anterior, hay 2 formas distintas de solucionar el problema
- Supuesto A) Las máquinas virtuales solamente se comunicarán con el ordenador anfitrión y entre ellas pero no podrán acceder a otras redes de ordenadores reales. Este caso es el recomendado si quieres tener a las máquinas aisladas por motivos de seguridad o por simplicidad. Aquí he configurado la red a través del interfaz eth0
- Supuesto B) Las máquinas virtuales se comunicarán con el ordenador anfitrión, entre ellas y con otras redes de ordenadores reales. Este caso está mas indicado para situaciones más complejas. Aquí he configurado la red a través del interfaz wlan0
Solución común al supuesto A ) y B): 1ª parteLa conexión entre la tarjeta de red de la máquina virtual y el ordenador anfitrión se obtiene definiendo un
TAP:
interfaz virtual que no tiene un interfaz de red hardware real por debajo. Mediante esta interfaz virtual se definirá un tunel para comunicarse la tarjeta de red de la máquina virtual con la tarjeta de red real del ordenador, más información en el
artículo de la wikipedia.
Pasos a realizar:1.) Las utilidades para configurar los interfaces TAP están en el paquete
uml-utilities. Se necesitará también el paquete
parprouted para establecer un puente transparente entre una IP y un
proxy ARP. Para instalar estos dos paquetes, abre una terminal de comandos y escribe:
$ sudo apt-get install -y uml-utilities parprouted
2.) Ahora hay que realizar un script que se ejecute cada vez que se inicie la máquina y configure automáticamente la red de tu máquina virtual. Para esto hay que editar el archivo /etc/rc.local, abre una terminal de comandos y escribe:
$ sudo gedit /etc/rc.local
Parte de la Solución para el supuesto A)
3.) Añade las siguientes líneas al archivo /etc/rc.local:
# Da permisos al grupo de usuarios vboxusers
# para usar el dispositivo /dev/net/tun
# TUN es un dispositivo Punto a Punto virtual.chown root:vboxusers /dev/net/tun
# Mete en los grupos vboxusers y uml-net al usuario ramon# para poder usar los dispositivos TAP y TUN de la red virtual # chmod 666 /dev/net/tun => esto ya no hace faltausermod -G vboxusers -a ramon
usermod -G uml-net -a ramon# Creamos el tap1 (interfaz de red para Windows 2003 Server): tunctl -t tap1 -u ramon# Activa la interfaz de red tap1ip link set tap1 up
# Si tienes una sola tarjeta de red eth0, dedicada a Internet,# es mejor usar otra interfaz de red:
# una interfaz de red virtual eth0:0 sobre la interfaz eth0
# para comunicarse con Windows 2003 Server
# la red que he elegido (192.168.7.0 /24)
# no debe interferir con la red 192.168.1.0 /24
# que es la usada para acceder a internet
ifconfig eth0:0 192.168.7.100 netmask 255.255.255.0 up# Configurar tap1con la dir. IP: 192.168.7.100ifconfig tap1 192.168.7.100 netmask 255.255.255.0 up#Ahora se crea un enlace entre el tap1 y el proxy,
# evitando que iptables te pudiese bloquear.
# Para esto, se activa el enrutamientoecho 1 > /proc/sys/net/ipv4/ip_forwardecho 1 > /proc/sys/net/ipv4/conf/tap1/proxy_arp# Establecer un puente entre eth0:0 y tap1 para comunicar la red
# del ordenador anfitrión con la red de la máquina virtualparprouted eth0:0 tap1# Ajustar la tabla de encaminamiento a la dirección IP
# de tu máquina de Windows 192.168.7.10 a través del tap1route add -host 192.168.7.10 tap1# sino tienes nada más que una máquina virtual
# no te hará falta todo lo que viene a continuación:
# Crear el tap2 (interfaz de red para Windows XP): tunctl -t tap2 -u ramon# Activa la interfaz de red tap2ip link set tap2 up# Añadir una nueva interfaz de red virtual eth0:1
# para comunicarse con la máquina virtual de Windows XP
ifconfig eth0:1 192.168.7.200 netmask 255.255.255.0 up# Configurar el tap2 con la IP: 192.168.7.200 / 24ifconfig tap2 192.168.7.200 netmask 255.255.255.0 up# Establecer un puente entre eth0:1 y tap2 para comunicar la red
# del ordenador anfitrión con la red de la máquina virtualparprouted eth0:1 tap2# Ajustar la tabla de encaminamiento a la dirección IP
# de tu máquina de Windows XP: 192.168.7.20 a través del tap2route add -host 192.168.7.20 tap2# pon el script justo antes de esta línea sino no te funcionará
exit 0
Parte de la Solución para el supuesto B)
# Damos permisos al grupo de usuarios vboxusers
chown root:vboxusers /dev/net/tun
# dar permisos al disposito dev/net/tun, no hace falta
# si metemos en el grupo vboxusers al usuario ramon
usermod -G vboxusers -a ramon
# Creamos el TAP1 (interfaz de red para Windows 2003 Server):
tunctl -t tap1 -u ramon
ip link set tap1 up
# Como se dispone de una sola tarjeta de red wlan0
# mediante la que accedemos a Internet creamos una nueva interfaz
# de red virtual wlan0:0 para comunicarnos con la máquina virtual
# en este caso la red escogida 192.168.1.0 /24 debe coincidir con la
# red que te permita acceder a Internet
ifconfig wlan0:0 192.168.1.100 netmask 255.255.255.0 up
# Le decimos al TAP cual es nuestra IP: 192.168.1.100
ifconfig tap1 192.168.1.100 netmask 255.255.255.0 up
#Ahora creamos un enlace entre el TAP y el proxy,
# evitando que iptables nos pudiese bloquear
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/tap1/proxy_arp
# Establecer la tarjeta de red con la se comunicará TAP1
# con nuestra red de la máquina anfitrión
parprouted wlan0:0 tap1
# Ajustar la tabla de encaminamiento a la dirección IP
# de tu máquina de Windows 192.168.1.101 a través del tap1
route add -host 192.168.1.101 tap1
# eliminamos del encaminamiento de la red 192.168.1.0/24
# asociada a tap1, para que no interfiera con wlan0
route del -net 192.168.1.0 netmask 255.255.255.0 tap1
# Creamos el TAP 2 (interfaz de red para Windows XP):
tunctl -t tap2 -u ramon
ip link set tap2 up
# Como se dispone de una sola tarjeta de red wlan0
# mediante la que accedo a Internet, creo una nueva interfaz
# de red virtual wlan0 para comunicarnos con la máquina virtual
ifconfig wlan0:1 192.168.1.200 netmask 255.255.255.0 up
# Le decimos al TAP2 cual es nuestra IP: 192.168.1.200
ifconfig tap2 192.168.1.200 netmask 255.255.255.0 up
#Ahora creo un enlace entre el TAP2 y el proxy,
# evitando que iptables nos pudiese bloquear
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/tap2/proxy_arp
# Establecer la tarjeta de red con la se comunicará TAP2
# con nuestra red de la máquina anfitrión
parprouted wlan0:1 tap2
# Ajustar la tabla de encaminamiento a la dirección IP
# de tu máquina de Windows 192.168.1.201 a través del tap2
route add -host 192.168.1.201 tap2
# eliminar la red 192.168.1.0 /24 asociada a tap2,
#para que no interfiera con el encaminamiento de wlan0
route del -net 192.168.1.0 netmask 255.255.255.0 tap2
# asegurate de poner este script antes de exit 0
exit 0
Solución común al supuesto A ) y B): 2ª parte4.) Ahora queda lo más fácil: configurar las máquinas virtuales para que puedan usar las tarjetas de red tap1 y tap2. El procedimiento a seguir es el siguiente:
- En la máquina virtual de Windows 2003 Server, vas a configurar dos adaptadores de red:
- Adaptador 1: de tipo NAT para poder navegar por Internet con Windows 2003 Server
- Adaptador 2: de tipo interface anfitrión (host interface) denominado tap1. Este será el que permitirá comunicar la tarjeta de red de Windows 2003 Server con Ubuntu 8.04 (concretamente con el interfaz eth0:0)
¿Cómo hacemos esto?
- Asegurate de que la máquina Virtual de Windows 2003 Server esté apagada.
- Pinchando sobre Red en la máquina Virtual de Windows 2003 Server y después sobre el Adaptador 1, a continuación asegurate que están activadas las casillas Habilitar Adaptador de Red y Cable Conectado. Posteriormente pincha a la derecha de (Attached to) (Conectar a) y escoge el tipo de dispositivo NAT.
- Después haz clic sobre el Adaptador 2, asegurate que están activadas las casillas Habilitar Adaptador de Red y Cable Conectado. Ahora pincha a la derecha de (Attached to) (Conectar a) y escoge el tipo de dispositivo Interface Anfitrión o Host Interface. Por último a la derecha de Interface name (nombre del interface) escribe tap1. (pincha sobre la foto de la derecha de mi blog si quieres ver como quedaría)
Ya solo tienes que configurar las dos tarjetas de Red en Windows 2003 Server, la primera de ellas será configurada por DHCP (obtener una dirección IP automáticamente) y la segunda le pones la dirección IP 192.168.7.10 con máscara de red 255.255.255.0.
- En la máquina virtual de Windows XP vas a configurar otros dos adaptadores de red:
- Adaptador 1: de tipo NAT para poder navegar por Internet con Windows XP.
- Adaptador 2: de tipo interface anfitrión (host interface) denominado tap2. Este será el que permitirá comunicar la tarjeta de red de Windows XP con Ubuntu 8.04 (concretamente con el interfaz eth0:1)
¿Cómo hacemos esto?
- Asegurate de que la máquina Virtual de Windows XP esté apagada.
- Pinchando sobre Red en la máquina Virtual de Windows XP y después sobre el Adaptador 1, a continuación asegurate que están activadas las casillas Habilitar Adaptador de Red y Cable Conectado. Posteriormente pincha a la derecha de (Attached to) (Conectar a) y escoge el tipo de dispositivo NAT.
- Después haz clic sobre el Adaptador 2, asegurate que están activadas las casillas Habilitar Adaptador de Red y Cable Conectado. Ahora pincha a la derecha de (Attached to) (Conectar a) y escoge el tipo de dispositivo Interface Anfitrión o Host Interface. Por último a la derecha de Interface name (nombre del interface) escribe tap2.
Ya solo tienes que configurar las dos tarjetas de Red en Windows XP, la primera de ellas será configurada por DHCP (obtener una dirección IP automáticamente) y la segunda le pones la dirección IP 192.168.7.20 con máscara de red 255.255.255.0.Para que funcionen todas las configuraciones establecidas anteriormente tienes dos opciones:a) Reiniciar el ordenador.b) Ejecutar el script que se inicia al arrancar el ordenador directamente, escribiendo en una terminal de comandos: $ sudo /etc/rc.local. A continuación cierra VirtualBox y vuelve a abrirlo.Ejemplo práctico, uso del servidor FTP: Si instalamos cualquier servidor (excepto el DHCP) en nuestra máquina anfitrión, por ejemplo, un servidor FTP como el vsftp, dicho servidor escuchará por dos direcciones de red: La dirección IP: 192.168.7.200 de la interfaz virtual eth0:0 y por la dir. IP 192.168.1.2 de la interfaz de la tarjeta de red eth0. Si necesitamos que escuche por más direcciones IP el servidor bastará con definir más interfaces virtuales. Como además tenemos activado el routing (posibilidad de enviar paquetes desde una red a otra distinta) con el script de /etc/rc.local:echo 1 > /proc/sys/net/ipv4/ip_forward, entonces si disponemos de más interfaz de red (eth1, wlan0, etc....), dicho servidor FTP también escuchará por las nuevas direcciones IP que tengan asociadas esas nuevas interfaces.
Como consecuencia tendremos un servidor FTP instalado en nuestra máquina anfitrión y que atiende a peticiones de la máquina virtual (que actúa como cliente FTP) y se conecta al servidor FTP a través de la dir. IP: 192.168.7.200 y desde el exterior de la máquina, desde otras máquinas reales (que también actuarán como clientes FTP) que se conectan al servidor FTP a través de la dir. IP: 192.168.1.2
En el caso del supuesto B) se puede conseguir instalar el servidor FTP en la máquina virtual de modo que cualquier ordenador o máquina virtual conectado a nuestra máquina anfitrión podrá ser cliente FTP de este servidor.
La única pega que presenta este método es que si deseas configurar la máquina virtual como servidor o cliente DHCP no te funcionará, ya que se necesita que tengan establecidas una dirección IP fija las tarjetas de red eth0:0, eth0:1, tap1, tap2 y las tarjetas de red definidas en las máquinas virtuales.
Buena suerte, espero que os funcione y si tenéis alguna duda o para lo que queráis, enviarme vuestros comentarios.
Hay otros métodos diferente al mío para configurar la red, aunque no lo he probado parece interesante el artículo del
blog de Vicente Navarro.