martes, 15 de septiembre de 2009

Olive sobre Ubuntu... "No hay color"

Esta es la traducción de una guia disponible en ingles en el siguiente enlace Using QEMU with Olive to emulate Juniper Routers. Esta guia describe los pasos de instalacion sobre un sistema Linux. Yo personalmente la he verificado sobre un sistema con Ubuntu 8.04 Hardy, sobre el actualmente ejecuto sin problemas una instancia con ocho routers virtuales sobre los que corren RIP, OSPF y BGP.

Instalar QEMU

Dependencias

Antes de compilar o ejecutar QEMU deben estar instaladas las siguientes dependencias:

sudo apt-get install build-essential
sudo apt-get build-dep qemu
sudo apt-get install libpcap-dev

Para la compilacion, deben estar instalados los siquientes paquetes:

sudo apt-get install gcc-3.4
sudo apt-get install subversion

Instalar el modulo "Kemu" (se necesita el 1.4.0pre1)

wget http://www.nongnu.org/qemu/kqemu-1.4.0pre1.tar.gz
tar zxfv kqemu-1.4.0pre1.tar.gz
cd kqemu-1.4.0pre1
./configure
make
sudo make install

Cargamos el modulo en la configuracion en ejecucion

sudo modprobe kqemu

Descargar el codigo de QEMU desde SVN en un directorio temporal

mkdir ~/src
cd ~/src
svn co svn://svn.savannah.nongnu.org/qemu/trunk -r 5193

Descargar e instalar el parche para Olive (habilita multicast en el chipset Intel emulado)

Este enlace funciona: http://shef.net.ru/misc/qemu-cvs20080910-brb_01-olive.patch

cd trunk
wget http://shef.net.ru/misc/qemu-cvs20080910-brb_01-olive.patch
patch -p1 < qemu-cvs20080910-brb_01-olive.patch

Compilacion e instalacion

Ejecutamos configure para fijar el prefijo (normalmente /usr/local/) y activar opciones proporcionadas por el parche

./configure --prefix=/usr/local/ --target-list=i386-softmmu

Una vez finalice con exito el script configure, ejecutamos make y make install

sudo make
sudo make install

Ahora la version de QEMU parcheada esta disponible en el prefijo especificado anteriormente
Instalacion de FreeBSD como SO invitado.

Descargar la imagen de FreeBSD 4.11 mini desde ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/ISO-IMAGES/4.11/4.11-RELEASE-i386-miniinst.iso

Creamos una imagen qcow2 para usar como disco duro de Olive. Le asignamos un tamaño de 4 gigabytes.

qemu-img create olive-base.img -f qcow2 4G

Iniciamos QEMU indicandole que arranque desde la imagen de FreeBSD descargada, que use de disco duro la imagen qcow2 y con el interfaz de red en modo "user", lo que permitira posteriormente copiar la imagen de junos via SCP.

sudo qemu -m 256 -hda olive-base.img -cdrom 4.11-RELEASE-i386-miniinst.iso -boot d -localtime -net nic,macaddr=00:aa:00:00:01:01,model=i82559er -net user

Seguir los pasos de instalacion por defecto de FreeBSD (modo de instalacion "User" estandar, sin instalar servicios adicionales o puertos). Cuando se llegue a la fase de particiones, usar los siguientes valores:

Punto de montaje: / Tamaño: 512M
Punto de montaje: swap Tamaño: 1024M
Punto de montaje: /config Tamaño: 12M
Punto de montaje: /var Tamaño: resto

En el paso de la instalacion donde pregunta si se usara DHCP para configurar el interfaz de red, hacerlo.



Una vez finalizada la instalacion de FreeBSD, se reiniciara la maquina virtual. En cuanto lo haga, salir de QEMU o matar el proceso para evitar que comience otra vez la instalacion.

Instalacion de Olive

Estamos listos para la instalacion de Olive en el host Qemu que hemos creado. Se necesitara disponer de una imagen de Junos (jinstall) recomendandose que sea una version menor de la 8.5, (ya que las versiones 8.5 y superiores se basan en FreeBSD 6).

Iniciamos el host que hemos creado pero esta vez desde el fichero imagen (olive-base.img en nuestro ejemplo). Una vez mas vinculamos el interfaz de red al proceso "user".

sudo qemu -m 256 -hda olive-base.img -boot c -localtime -net nic,macaddr=00:aa:00:00:01:01,model=i82559er -net user

Una vez que ha iniciado completamente la maquina FreeBSD, accedemos como "root". Ejecutamos el comando:

netstat -r grep default

para encontrar el default gateway (nuestra maquina anfitriona). Es necesario que nuestra maquina anfitriona disponga de un servidor SSH ejecutandose.Una vez encontrado el default gateway, compiar la imagen de Junos via SCP sobre el SO invitado FreeBSD.

scp [usuario]@[IP_invitado]:[ruta_origen]/[fichero_jinstall.tgz] [ruta_destino]

Por ejemplo:

scp bbennett@10.0.2.2:~/Desktop/jinstall-8.3R1.5-domestic-signed.tgz /var/tmp

Modificacion del fichero Jinstall

Si la imagen de Junos es de una version superior a la 7.4, hay que modificar el fichero "jinstall" antes de instalar el paquete, ya que incluye un binario ("checkpic") que comprueba el hardware sobre el que se va a instalar y fallara. Para modificarlo, seguir los pasos descritos en el siguiente enlace:
http://inetpro.org/wiki/Using_QEMU_with_Olive_to_emulate_Juniper_Routers#Modify_jinstall_file

Instalando Olive

Si es una version 7.4 o inferior, no es necesario nada mas para instalar Junos, para lo que ejecutaremos el siguiente comando:

pkg_add -f [ruta]/[fichero_jinstall.tgz]

Por ejemplo:

pkg_add -f /var/tmp/jinstall-8.3R1.5-domestic-olive.tgz

Una vez haya finalizado la instalacion, detener la maquina virtual con el comando "halt" y matar el proceso de Qemu.

Primer arranque

Segun la version el fichero "jinstall" solo ha instalado un entorno de bootstrap por lo que es necesario un reinicio mas del SO invitado para finalizar la instalacion. Si en el paso anterior se reinicio la maquina virtual en lugar de detenerla, se observa que no hay salida a pantalla. Esto se debe a que un router Juniper no tiene salida VGA y lo redirige todo al puerto serie. En este caso no es un problema porque Qemu puede redirigir el puerto serie hacia la salida stdio o un puerto telnet.

Si en el paso anterior se detuvo la maquina virtual, es necesario el reinicio para redirigir la consola al puerto telnet.

sudo qemu -m 256 -hda olive-base.img -boot c -localtime -nographic -serial stdio

Esperar a que el proceso de bootstrap finalice. La maquina virtual Olive reiniciara automaticamente. Una vez finalizado el reinicio accederemos con el usuario "root". Ejecutar el comando halt y matar el proceso de Qemu.

En este punto, ya tenemos una imagen instalada de Olive

Es recomendable hacer una copia de esta imagen por si aparecen en el futuro problemas de disco o si se quieren tener distintas imagenes para distintos routers en lugar de usar routers virtuales dentro de una misma instancia.

qemu-img create -b olive-base.img -f qcow2 R1.img

Ahora se puede arrancar el router con el siguiente comando y comenzar a configurarlo:

sudo qemu R1.img -m 96 -nographic -daemonize -serial telnet::1001,server,nowait -localtime -net nic,macaddr=00:aa:00:60:00:01,model=i82559er -net socket,listen=:6000

jueves, 16 de julio de 2009

IPv6 y Vista

En este post solo quiero describir un problemilla (y su solución) que me encontré recientemente a la hora de intentar levantar un tunel IPv6 desde mi PC con Windows Vista usando como "tunnel broker" de Freenet6 y el cliente disponible en go6.net (Gateway6 Client).

La pongo aqui porque me costó mucho dar con ella, la busqueda en los foros, etc.. del mensaje de error que obtenía al intentar conectarme devolvía muchos resultados, pero en ninguno de los que consulte se concluía cual era la causa... Lo mas concreto que encontre simplemente sugeria
reinstalar el cliente, lo cual a mi nunca no me surtio efecto.

El problema lo encontré en los dos equipos con Vista (con distinto hardware) en los que probé el cliente, y no así en uno con XP.

Según el sitio de soporte de la aplicación, la version 6.0 del cliente soportaba Vista, y tan solo se indicaba la necesidad de instalarlo/ejecutarlo con derechos de administrador.
La instalación se realizó sin problemas, pero al intentar ejecutar la aplicación, se mostraba un mensaje de error como el siguiente:

Instando a consultar el LOG para mas detalles. El LOG, tal y como se puede ver en la siguiente captura, indicaba un fallo en la ejecucion del fichero de configuracion de Windows (que lo que hace es configurar el interfaz tunel con los parametros negociados en las fases anteriores).

Principalmente intenté realizar las busquedas centrandome en el mensaje "Template script execution failed! Exiting with error code 30." como ya comenté sin mucho exito.

Finalmente encontré una entrada donde describía la solución (http://forum.go6.net/viewtopic.php?t=433), que consiste
basicamente en modificar un registro del Vista.
El registro se encuentra en la siguiente ruta:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\

es el registro
"DisabledComponents" y tiene que estar a valor 0.
Este registro es es una mascara de 6 bits (por defecto con valor a 0) que controla la activacion/desactivacion de los distintos tipos de tuneles, segun la siguientes combinaciones:

Bit 0 = 1 deshabilita todos los tipos de tuneles IPv6 (ISATAP, 6to4, y Teredo).
Bit 1 = 1 deshabilita todos los interfaces basados en 6to4.
Bit 2 = 1 deshabilita todos los interfaces basados en ISATAP.
Bit 3 = 1 deshabilita todos los interfaces basados en Teredo.
Bit 4 = 1 deshabilita IPv6 sobre los interfaces no-tunnel (LAN, PPP, etc...).
Bit 5 = 1 modifica la politica por defecto para preferir IPv4 sobre IPv6 cuando intenta conectarse.

Por alguna razón en los dos PCs donde probé, el registro tenía el valor 0xFF, asi que la solución pasó por poner el valor por defecto (0), pero realmente para este caso habría funcionado también poner el valor 0x2 (0000 0010).

Por último, es necesario reiniciar la máquina, y conectarse...


Y confirmar que salimos a Internet con IPv6...


jueves, 21 de mayo de 2009

Instrucciones para "plantar un Olivo"

Algunos/as de los que lean estas líneas, conocerán o habrán oído hablar de la existencia de un "emulador" de routers Juniper... "Olive". Pues bien, efectivamente existe, pero no es un emulador en si, si no el software JUNOS corriendo en un PC con especificaciones similares a las de la Routing Engine de un router Juniper sin PFE (forwarding engine).

Surge principalmente como plataforma de desarrollo software, nunca ha sido pensado como un simulador, nunca ha sido soportado ni enfocado al uso publico... en definitiva, para Juniper no existe.

Para los que deseen mas informacion, recomiendo este enlace: http://juniper.cluepon.net/index.php/Main_Page

¿Y para que sirve esto? Pues personalmente no creo que debido a este post, nadie deje de comprar un router a Juniper y pretenda montarse un ISP a partir de esta guia... supongo que sera util a aquellos/as interesados en familiarizarse con la interfaz de JunOS, realizar pruebas o preparar alguna certificacion.

Antes de continuar solo dejar claro algunos puntos:

No soy especialista en la electrónica de Juniper. Mi experiencia con este fabricante se reduce a hace un par de meses que empecé a tocar un switches de la familia EX para unas pruebas de integración. Como casi todo el hardware de Juniper, corren JunOS, y reconozco que me impresiono su flexibilidad y versatilidad.

No dispongo de imagenes de JunOS, aquel que este interesado en probar esto, deberia saber como conseguirla.

Esta quia de instalacion, es para una maquina virtual con Qemu sobre Windows, pero existen otras alternativas, como VMware, o directamente sobre un PC con FreeBSD.

Basicamente esto es la traducción libre de un artículo muy completo de Himawan Nugroho que se puede encontrar en el siguiente enlace... en ingles, of course :-)


Bueno, al lio... Pasos para la instalación:

1. Descargar la última versión de Qemu para Windows.

La Web de Qemu esta aqui. La versión de Qemu para Windows se puede descargar de aqui. La versión que he probado yo es 0.9.1. Descomprimir el fichero en un directorio local.

2. Descargar el software OpenVPN para crear un interfaz TAP.

Este es un interfaz virtual que será usado por JunOS como interfaz de gestión (fxp) permitiendo que Windows y Olive se comuniquen por el enlace virtual. La versión probada en esta caso es la OpenVPN 2.0.9 para Windows. Durante la instalación seleccionar solo ‘TAP-Win32 Virtual Ethernet Adapter’. Posteriormente podremos crear interfaces TAP adicionales.

3. Descargar la imagen de FreeBSD 4.4 mini ISO

JunOS se instalará posteriormente sobre FreeBSD.

4. Conseguir una imagen de JunOS.

Yo he probado con una 7.4R1.7. Posteriores versiones pueden requerir algún paso adicional. Por otro lado, versiones especificas para routers de la serie J en teoría (yo no lo he comprobado) chequean el hardware y no funcionan.

5. Descargar la versión modificada de Qemu, llamada Jqemu.

Guardarlo en la misma carpeta en la que se descomprimió Qemu. Jqemu es la versión de Qemu que proporciona el driver para la tarjeta de red virtual Intel i82559er.

6. Crear la imagen de FreeBSD/Olive.

Desde una ventana de DOS ejecutar el siguiente comando para asignar 3 Gigas a la imagen:

C:\qemu>qemu-img.exe create olive.img -f qcow2 3G
Formating 'olive.img', fmt=qcow2, size=3145728 kB

7. Guardar la imagen de ‘FreeBSD mini ISO’ en la misma carpeta que Qemu, y ejecutar el siguiente comando para arrancar FreeBSD desde la imagen.

C:\qemu>qemu.exe -L . -m 256 -hda olive.img -cdrom 4.4-mini.iso -boot d –localtime

Se abrirá una ventana de Qemu:

Dejar que se inicie la instalación de FreeBSD, y según las instrucciones del menú, seleccionar la instalación estándar y seguir los siguientes pasos:

- Saltar la configuración de Kernel
- Escoger instalación estándar

- En la pantalla de ‘fdisk’, pulsar “A“ para asignar todo el disco (los 3 gigas de la imagen) para BSD
- Seleccionar: ‘Install a standard MBR’
- Crear 4 particiones (pulsando “C”):
  • 512M con punto de montaje: /
  • 1024M para partición swap
  • 128M con punto de montaje: /config
  • El resto para una partición con punto de montaje: /var
- Seleccionar el tipo de instalación: ‘User’, y seleccionar “No” para ‘FreeBSD ports’
- Pulsar “X” para salir del menú e instalar desde CD/DVD
- Esperar hasta que termine

- Seleccionar "No" en las sucesivas pantallas (‘Ethernet/SLIP config’, ‘gateway’, ‘inetd’, ‘FTP’, ‘NFS’, ‘security’, ‘console’, ‘linux compatibility’, ‘set time’, etc…)
- Pulsar “X” para salir del menú
- Seleccionar “No” para ‘Browse FreeBSD package collection and initial user account’
- Fijar una password para root
- Seleccionar “No” para ‘Chance to set any last options’
- Pulsar “X” para salir de la instalación, lo que hará que se reinicie.
- Mientras reinicia, salir de Qemu pulsando Ctrl + Alt + 2, lo que nos mostrara un prompt, ejecutar "quit" para salir.

8. Transferir el paquete de JunOS desde Windows

En este punto, ya esta instalado FreeBSD y estamos en Windows. Ahora vamos a transferir JunOS desde Windows a nuestra maquina virtual BSD, por lo que necesitamos que esta disponga de un interfaz que podamos usar para conectarnos por ejemplo vía FTP.

Suponemos que, en Windows, hemos creado un interfaz virtual Tap que llamamos "tap1". A través del panel de control, modificar la configuración del interfaz, y le asignamos una dirección de red en una subred distinta a otras que tengamos configuradas (por limpieza) por ejemplo 10.1.1.1/8.

Arrancamos Qemu pero a través del ejecutable Jqemu, con las opciones para incluir el interfaz de red i82559er, MAC asignada y vincular la tarjeta de red al interfaz tap1:

C:/qemu>jqemu.exe -L . -m 256 -hda olive.img -localtime -net nic,vlan=1,macaddr=00:aa:00:00:01:01,model=i82559er -net tap,vlan=1,ifname=tap1

- Acceder a FreeBSD como root
- Configurar un interfaz fxp0 con una dirección en la misma subred que el interfaz tap1

#ifconfig fxp0 up 10.1.1.2

Asegurarse de que existe conectividad entre el interfaz tap1 de Windows y el interfaz fxp0 de FreeBSD

- Hacer ping a 10.1.1.1 desde la maquina virtual FreeBSD


Una vez verificada la conectividad, vía FTP transferimos el fichero JunOS desde Windows (no olvidar disponer de un servidor FTP):

#cd /var/tmp
#ftp 10.1.1.1

Fijar el tipo de transferencia a binario y hacer un get del fichero JunOS (jinstall-xxx.tgz).

9. Instalar JunOS

Para versiones >= 7.4, consultar aqui. De lo contrario, ejecutar el siguiente comando:

#pkg_add /var/tmp/jinstall-8.3R2.8-export-olive.tgz

Una vez finalizado solicitará reiniciar para continuar la instalación. Pues se reinicia:

#reboot

Mientras reinicia, salir a Qemu con Ctrl + Alt + 2 y ejecutar quit.

10. Accediendo a Olive por primera vez

Para acceder a JunOS lo tendremos que hacer por la consola Serial. Para ello iniciar Qemu redireccionando la salida a un puerto serie emulado por el puerto TCP local 1001.

C:\qemu>jqemu.exe -L . -m 256 -hda olive.img -serial telnet::1001,server -localtime -net nic,vlan=1,macaddr=00:aa:00:00:01:01,model=i82559er -net tap,vlan=1,ifname=tap1

Se abrirá una ventana de Qemu esperando conexión por el puerto TCP 1001.

- Desde una ventana de DOS o cualquier terminal hacer telnet al localhost por el puerto 1001



Si todo ha ido bien, se observara el proceso de instalación hasta que reinicie cuando haya finalizado.

- Una vez ha finalizado el la instalación de JunOS, accederemos a Olive por primera vez con usuario root y sin password.

Desde el prompt de BSD, ejecutar 'cli' para saltar al prompt de JunOS

root@%cli
root>edit
[edit] root#

- Asignar una password de root y a continuación asignar la dirección IP 10.1.1.2/8 al interfaz fxp0

[edit] root#set system root-authentication plain-text-password
New password:
Retype new password:
[edit] root#set interface fxp0 unit 0 family inet address 10.1.1.2/8 [edit] root#commit
commit complete

En este punto, debería existir conectividad entre el interfaz fxp0 de Olive al interfaz tap1 de Windows.

11. Para finalizar podemos instalar Kqemu para mejorar el rendimiento:

- En caso de Windows Vista, descargar Kqemu desde aqui, y ejecutar el instalador.
- En caso de Windows XP, descargar Kqemu desde aqui, descomprimir la carpeta, abrirla, localizar el fichero kqemu.inf, y con el botón derecho del ratón seleccionar 'instalar'.
- Desde una ventana de DOS abierta como Administrador ejecutar 'net start kqemu'

C:\>net start kqemu
The KQEMU virtualisation module for QEMU service was started successfully.

Ahora se puede iniciar Olive usando Jqemu con la opción 'kernel-kqemu':

C:\qemu>jqemu.exe -L . -m 256 -hda olive.img -serial telnet::1001,server -kernel-kqemu -localtime -net nic,vlan=1,macaddr=00:aa:00:00:01:01,model=i82559er -net tap,vlan=1,ifname=tap1