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
- Y dependiendo del protocolo, se puede cambiar IP's en las capas superiores