Mostrando entradas con la etiqueta vmware. Mostrar todas las entradas
Mostrando entradas con la etiqueta vmware. Mostrar todas las entradas

miércoles, mayo 27, 2015

VMware Fusion: Configuración de NAT (network address traslation)

En esta pequeña serie de entradas sobre la configuración de red en VMware Fusion falta tratar la configuración de NAT (Network address translation). Este mecanismo permite que todas las direcciones de una red determinada, sean traducidas usando la dirección de la interfaz del Mac. Por ejemplo, si la interfaz vmnet4 que están usando nuestras máquinas virtuales tiene el rango 10.0.2.0/24, y la interfaz de salida de nuestro Mac es la en0 con IP 192.168.1.100, al tener activado el NAT, se producirá una traducción de direcciones en los paquetes IP1, cambiándose la dirección IP y el puerto origen. La dirección IP será asignada a la que tenga la interfaz de salida del Mac y el puerto origen a uno que se tenga disponible para esa misión. La configuración puede verse en la siguiente captura de pantalla


Configuración NAT

Cuando se activa el NAT en una interfaz de VMware fusion se genera un fichero de texto con estructura INI con la configuración. Este fichero se llama nat.conf y estará en la ruta /Library/Preferences/VMware Fusion/iface. Para la interfaz vmnet4, la ruta completa sería /Library/Preferences/VMware Fusion/vmnet4/nat.conf.

El fichero de configuración de nat tiene varias secciones. La configuración general se encuentra en la sección [host]. La configuración para el NAT de conexiones tcp en [tcp] y las comunicuaciones que usen udp en [udp]. Si queremos exponer servicios que corren en nuestras máquinas virtuales a través de la dirección IP que tenga configurada la máquina anfitrión será necesario configurar el mapeo tanto de conexiones TCP como de posible tráfico UDP. Eso se hace en las secciones [incomingtcp] e [incomingudp]. Además se puede configurar parámetros de DNS en la secciión [dns] y parámetros de NetBIOS en la sección [netbios]. Esta última sección no se usa en MacOS X.

La configuración general se realiza en la sección [host]. Aquí se especifica cuál es la dirección de la pasarela de NAT, la máscara de la red, la interfaz que se está configurando. Estos tres parámetros se configuran a través de la propiedades ip, netmask y device. Por ejemplo:

[host]
ip = 10.0.2.2
netmask = 255.255.255.0
device = vmnet4

En la sección [host] existe unas propiedades que nos permite controlar el comportamiento del NAT, en concreto, si se debe permitir el modo activo del protocolo FTP (activeFTP) , si se permite que los paquetes que lleguen al proceso de NAT tengan cualquier dirección Mac - no las asignadas por VMware Fusion - (allowAnyOUI), si se quiere quiere que cuando se desactive la interfaz de red en el anfitrion resetee las conexiones TCP (resetConnectionOnLinkDown) y si no se deben permitir las conexiones hacia la dirección IP de la pasarela NAT (resetConnectionOnDestLocalHost). Por defecto, estos cuatros parámetros tienen el valor 1 y por tanto están activados en la configuración de la la red que se está haciendo NAT

En las secciones [tcp] y [udp] se controlan los tiempos de expiración (timeouts) que el proceso encargado del NAT esperará para dar por finalizada una conexión NAT. En el caso de TCP, se utiliza la clave timeWaitTimeout, con un valor en segundos, que por defecto es 30. Cuando se cierra una conexión TCP, el último estado del protocolo es el llamado TIME_WAIT donde se espera para que el otro extremo de la conexión reciba el asentimiento que le hemos mandado. En el caso de UDP la propiedad es timeout y su valor por defecto es 60 segundos, indicando el tiempo que va a existir un mapeo en UDP mientras no exista tráfico.

Sin embargo, para lo que se modifica este fichero realmente es para establecer reglas de NAT que hagan que servicios que se ejecutan en cualquiera de las máquinas virtuales que tienen acceso a la red que se está configurando se vean a través de la dirección IP del Mac que hace de anfitrión. Por ejemplo, si se tiene un servicio que usa el protocolo en la IP 10.0.2.10:443 y se quiere que se vea en 192.168.1.100:443 - asumo que esta es la dirección del Mac -, la sección [incomingtcp] se configuraría con la siguiente entrada.

[incomingtcp]
443 = 10.0.2.10:443

El formato es portmac = IP:port, donde portmac es el puerto que usará en la máquina anfitriona, IP es la en la red interna y port es el puerto en la máquina donde está el servicio. Se puede añadir las líneas que se deseen. El formato para [incomingudp] es el mismo. Comentar que después de modificar el fichero nat.conf de cualquier inteface es necesario rearrancar los servicios de red:

baldurgate:Library root$./vmnet-cli --stop
Stopped all configured services on all networks
baldurgate:Library root$./vmnet-cli --start
Enabled hostonly virtual adapter on vmnet1
Started DHCP service on vmnet1
Started NAT service on vmnet8
Enabled hostonly virtual adapter on vmnet8
Started DHCP service on vmnet8
Started all configured services on all networks

No he hablado de las secciones [dns] y [netbios] ya que sólo se utilizan cuando el anfitrión en Windows. El proceso donde está implementada la funcionalidad del NAT , vmnet-natd, es multiplataforma, y por tanto da soporte a esas opciones aunque no se utilicen en el Mac.

Documentación

Notas

  1. Y dependiendo del protocolo, se puede cambiar IP's en las capas superiores

martes, mayo 19, 2015

VMware Fusion: Capturando tráfico en las interfaces virtuales

Las herramientas de captura de tráfico de red que trae OS X, que se apoyan sobre la interfaz bpf (Berkeley Packet Filter) no puede capturar tráfico en las interfaces de las máquinas virtuales. Si se intenta poner a escuchar tráfico en una de las interfaces vmnet, que se tenga configurada , por ejemplo con el tcpdump, el sistema devolverá un error:

baldurgate:terron root$tcpdump -n -i vmnet5
tcpdump: vmnet5: No such device exists
(BIOCSETIF failed: Device not configured)
baldurgate:terron root$

Sin embargo, VMware Fusion tiene un programa que nos permite capturar todo el tráfico que vaya por las diferentes interfaces virtuales que se definan, vmnet-sniffer. Este programa se encuentran, si se instala por defecto en /Applications/VMware Fusion.app/Contents/Library. Es necesario pasarle la interfaz de la que se quiere pasar. Por ejemplo, si se quiere capturar tráfico desde la interfaz vmnet8:

baldurgate:Library root$./vmnet-sniffer -e  vmnet8
len  195 src 00:50:56:cc:ca:08 dst ff:ff:ff:ff:ff:ff IP src 172.16.221.1    dst 172.16.221.255  UDP src port 17500 dst port 17500
La opción -e hace que imprima las cabeceras ethernet. Si se desea, se puede grabar el tráfico que va capturando en un fichero con ayuda de la opción -w nombre de fichero. Posteriormente, este fichero puede analizarse con tcpdump o wireshark

viernes, mayo 01, 2015

VMware Fusion: Redes

Esta es la segunda de una serie de entradas donde quiero describir la configuración de las redes que utiliza VMware Fusion

Fusion tienen tres mecanismos para virtualizar las redes.

  • Usar un puente que se conecta a una de las interfaces físicas de la máquina anfitriona. VMware se encargará de pasar las tramas desde las máquinas virtuales a la red física. La máquina virtual estará en el mismo dominio de difusión que la máquina anfitriona donde se ejecuta Fusion. El proceso donde está esta funcionalidad es vmnet-bridge y vmnet-netifup
  • Redes privadas. Este es el tipo de redes que se describen en el post anterior. Estas redes las controlan el proceso vmnet-dhcpd
  • Redes NATeadas. Son redes privadas donde existe un mecanismo de traducción de direcciones donde las direcciones IP pueden ser enrutadas al exterior al usar este mecanismo para cambiar las direcciones IP origen y destino según corresponda. Además de los procesos del punto anterior, usa el proceso vmnet-natd para realizar estos procesos de tradución.

Cuando se instala por primera vez, Fusion va a crear dos interfaces virtuales, vmnet1 y vmnet8. vmnet1 es la intefaz host only, es una red que no se ve fuera del entorno de virtualización. Varias máquinas conectadas a esta red se verán entre ellas y con la configuración por defecto, con el Mac. vmnet8 es la intefaz NAT que por defecto configura Fusion. Las máquinas conectadas a esta red, por defecto podrán conectarse a otras redes a través de los mecanismos del NAT.

¿Dónde están los diferentes ejecutables de los procesos que he mencionado anteriormente?. Bien, como muchos programas de MacOS X , son un Bundle, es decir un directorio que agrupa un conjunto de recursos, entre otros los ejecutables de los programas. Por defecto, Fusion se instala en el directorio /Applications/VMware Fusion.app. Dentro del mismo, en la ruta Contents/Library nos encontraremos los diversos ejecutables usados para implementar las diferentes funciones del producto. Para el funcionamiento de las interfaces de redes los ejecutables que nos interesan serán vmnet-cli y vmnet-cli.

En la versión 6.x Fusion almacena sus archivos de configuración en el directorio /Library/Preferences/VMware Fusion. De los ficheros que hay en el mismo nos interesará a la hora de configurar la red el fichero networking que es una plantilla a partir de la cual se generarán la información que se almacena en los directorios vmnet* con la configuración de las interfaces. Dentro de cada directorio, existirá un fichero de configuración de dhcp , dhcpd.conf que será utilizado para proveer las direcciones en cada una de las subredes virtuales que se creen. Si además existe NAT en la red, existirá un fichero nat.conf con la configuración de la misma. Estos ficheros de configuración son usados por los procesos de Fusion para poder dar servicio sobre las redes virtuales.

Las interefaces virtuales sólo están presentes en el sistema cuando está ejecutándose el proceso de Fusion. Esto puede comprobarse con la ayuda del programa ifconfig -a , donde veremos interfaces llamadas vmnet1, vmnet8 por defecto si está en funcionamiento.

Una de las primeras tareas de configuración que se pueden plantear en este entorno es cambiar el direccionamiento de las redes que utiliza por defecto Fusion para su intefaz vmnet1, aquella que sólo da conectividad entre las máquinas conectadas a él. Por ejemplo, en mi sistema, si arranco Fusion y en el mac utilizo el ifconfig para ver su configuración:

baldurgate:VMware Fusion root$ifconfig vmnet1
vmnet1: flags=8863 mtu 1500
    ether 00:50:56:c0:00:01 
    inet 192.168.159.1 netmask 0xffffff00 broadcast 192.168.159.255

La red utiliza el direccionamiento 192.168.159.0/24 para proveer direcciones. Supongamos que se quiere configurar usando el direccionamiento 192.168.100.0/24. La manera más sencilla es editar la plantilla /Library/Preferences/VMware Fusion/networking para que utilice dicho rango de direcciones y hacer que el propio Fusion reescriba los ficheros dentro del directorio vmnet1 con ayuda del programa vmnet-cli. Posteriormente reiniciamos usando este mismo programa los procesos encargados de dar soporte a la red virtual. Si se edita la plantilla la sección que nos interesa es esta:

answer VNET_1_DHCP yes
answer VNET_1_DHCP_CFG_HASH 5E190C04568D690AE581FDFE8FF0B201744BF181
answer VNET_1_HOSTONLY_NETMASK 255.255.255.0
answer VNET_1_HOSTONLY_SUBNET 192.168.159.0
answer VNET_1_VIRTUAL_ADAPTER yes

Cambiándose por

answer VNET_1_DHCP yes
answer VNET_1_DHCP_CFG_HASH 5E190C04568D690AE581FDFE8FF0B201744BF181
answer VNET_1_HOSTONLY_NETMASK 255.255.255.0
answer VNET_1_HOSTONLY_SUBNET 192.168.100.0
answer VNET_1_VIRTUAL_ADAPTER yes

Ahora como root nos vamos al directorio del bundle donde están los programas encargados de configurar la red y ejecutamos las siguientes órdenes:

baldurgate:Library root$pwd
/Applications/VMware Fusion.app/Contents/Library
baldurgate:Library root$./vmnet-cli --configure
Stopped DHCP service on vmnet1
Disabled hostonly virtual adapter on vmnet1
Stopped DHCP service on vmnet8
Stopped NAT service on vmnet8
Disabled hostonly virtual adapter on vmnet8
Stopped all configured services on all networks
Backed up existing network settings to backup file "/tmp/vmware.b74CtC"
Restored network settings
baldurgate:Library root$./vmnet-cli --stop
Stopped all configured services on all networks
baldurgate:Library root$./vmnet-cli --start
Enabled hostonly virtual adapter on vmnet1
Started DHCP service on vmnet1
Started NAT service on vmnet8
Enabled hostonly virtual adapter on vmnet8
Started DHCP service on vmnet8
Started all configured services on all networks

He añadido la orden pwd para que se vea el directorio del sistema desde donde se están ejecutando las órdenes. Ahora se puede comprobar con ifconfig que se ha cambiado correctamente la interfaz

baldurgate:VMware Fusion root$ifconfig vmnet1
vmnet1: flags=8863 mtu 1500
    ether 00:50:56:c0:00:01 
    inet 192.168.100.1 netmask 0xffffff00 broadcast 192.168.159.255

Es interesante ver el fichero de configuración para la interfaz vmnet1 que ha generado el sistema. El fichero dhcpd.conf es un fichero de configuración para el servidor de dhcp del ISC. Asigna el rango de direcciones de DHCP que van a recibir las máquinas que se conecten a dicha interfaz y deja configurada la primera direccion fija para que la use el Mac para conectarse con las máquinas virtuales que tengan interfaces en esa red.


Referencias

viernes, abril 17, 2015

VMware Fusion: Nat, redes e interfaces privadas (I)

VMware Fusion permite la creación de redes privadas para conectar las máquinas virtuales que se ejecutan en en el mismo. Estas redes pueden ser independientes, conectarse al ordenador anfritión que ejecuta bajo Fusion y además pueden natearse para conectarse a otras redes externas al ordenador. La creación de una red de este tipo se hace a través del menú de preferencias del programa. A la hora de configurar la red, se puede definir la subred que tenga asignada, si en dicha subred existirá un servidor de DHCP que entregue direcciones IP o si se permitirá la traslación de direcciones (NAT) para permitir que dicha red salga con la dirección IP de ordenador donde Fusion se ejecuta como anfitrión. La pantalla de configuración es la siguiente


VMWare Fusion Network

En esta captura de pantalla se pueden ver:

  1. La lista de redes personalizadas configuradas.
  2. Si la red seleccionada se le permite traducción de direcciones (NAT). En este caso los paquetes que no vayan a la red privada, saldrán con la direción
  3. Si el Mac, que hace de anfitrión se conectará a la red privada que se ha creado.
  4. Si VMWare ejecutará un servidor de DHCP en la red. En el cuadro de diálogo si se activa se introducirá el rango de direcciones IP que utilizará dicho servidor DHCP para asignar las mismas a aquellas máquinas que las soliciten a través del protocolo DHCP

Un detalle importante. Por defecto, en el rango de direcciones que se asigna en el paso 4, al Mac se le asigna la primera dirección de la red y la IP del router o pasarela por defecto la segunda . Por ejemplo si en esa red virtual se está usando la dirección 172.16.0.0/24, se configura la conexión del Mac a la red virtual, éste aparecerá con la dirección 172.16.0.1, mientras que la pasarela (router) por defecto será la 172.16.0.2.

Para añadir una red lo que se hace es usar el botón + que hay en la esquina inferior de la lista de interfaces creadas. Para eliminar una red se pulsa el botón -

jueves, abril 10, 2014

Convertir una imagen VMWARE a formato RAW para usar en Proxmox

Hace unos días tuve la necesidad de usar el disco duro virtual de una máquina virtual de vmware en un entorno de virtualización Proxmox. El formato de disco que utiliza vmware es VMDK, pero Proxmox no permite su uso de manera nativa. Hay que convertirlo a formato RAW. Este formato sería el equivalente a una imagen exacta si dicha máquina virtual se hubiese instalado en un disco físico.

Para realizar dicha conversión se usa una de las utilidades de qemu, qemu-img que permite convertir la imagen entre distintos formatos. La conversión se lleva a cabo en los siguientes pasos

gunzip imagen.vmdk.gz # Sólo si la imagen está comprimida con gzip
qemu-img convert -O raw imagen.vmdk imagen.raw # -O especifica el formato de conversión

Una vez que termine el proceso, el fichero imagen.raw tendrá una imagen de disco equivalente a la información que estaba almacenada en la vmware, y podrá usarse en una máquina virtual definida en Proxmox

Como curiosidad, una imagen de este tipo puede montarse a través del loopback de Linux. Sólo hay que ver donde empieza cada partición y de qué tipo es. Puede obtenerse dicha información con el comando fdisk

fdisk -l imagen.raw
 
Disk imagen.raw: 1073.7 GB, 1073741824000 bytes
255 heads, 63 sectors/track, 130541 cylinders, total 2097152000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000de2fb

Device      Boot      Start         End      Blocks   Id  System
imagen.raw1   *        2048  2012336127  1006167040   83  Linux

Puede verse de la salida del fdisk cual es el sector donde empieza la partición , 2048 y que el tamaño de cada sector es de 512 bytes. Por tanto, el offset en bytes donde empieza la partición es 2048 * 512 = 1048576 . Se puede montar dicha partición en Linux con

mount -o loop,offset=1048576 imagen.raw /mnt

jueves, abril 23, 2009

Problemas con el ratón al convertir máquinas virtuales

Ayer me encontré con un problema tras convertir una máquina virtual creada con el Virtual PC a una para ser ejecutada con el VMWare Server. Para ello usé la herramienta gratuita VMware vCenter Converter, que permite crear máquinas virtuales a partir de otros formartos o incluso de un PC donde se esté ejecutando.

La máquina virtual que estaba convirtiendo, en formato Virtual PC (.vpc), tenía instalada las utilidades de gestión de máquina virtual de Microsoft, entre las que incluye un driver del ratón.Sin embargo, una vez convertida la máquina virtual al formato de VMWare, instalados las utilidades de éstas, el ratón no funciona. El problema viene de no haber desinstalado previamente las utilidades de Microsoft la imagen de la máquina, antes de realizar la conversión y posteriormente instalar las propias de VMWare.

Para corregir este error, lo unico que hay que hacer es modificar una entrada del registro:

  • Ir a la entrada HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96F-E325-11CE-BFC1-08002BE10318}.
  • Editar el valor UpperFilters.
  • Eliminar de dicho valor la cadena msvmmouf.
  • Reiniciar la máquina virtual.
Una vez realizado los pasos anteriores podemos instalar las VMWare Tools y el ratón funcionará correctamente.

Referencias

  1. VPC to VMWare - Mouse Problem Fix

Technorati Tags: , ,