jueves, 21 de abril de 2011

[JUNIPER] Virtualizar JUNOS con QEMU o VIRTUALBOX para linux.

Últimamente muchas empresas están comprando equipos Juniper en lugar de Cisco para su red Core. Los que podemos trabajos con ellos sabemos que son equipos mas seguros y fáciles a la hora de configurarlos o realizar un troubleshooting. Por esta razón voy a explicar como virtualizar una JUNOS de Juniper para poder estudiar en casa  alguna de las certificaciones JUNIPER.

Antes de seguir, es recomendable leer el manual de instalación de GNS3, lo puedes bajar de aqui.
Por esto voy explicar como:

1.0 Convertir olive-base.img a olive-base.vdi

2.0 Usar JUNOS mediante Qemu

3.0 Configurar GNS3 para poder usar nuestro Juniper 

4.0 Problemas conocidos 

En primer lugar , y antes de nada, debemos comprobar que nuestro procesador soporta virtualizacion y en definitiva si nuestro Pc con linux soporta KVM, necesario para cargar la JUNOS virtualizada con GNS3 y crear una red. En una consola de comando ejecutamos (esto es imprescindible si queremos integrarlo con GNS3 para montar una red con equipos cisco):

Para ello basta con ejecutar:

$sudo egrep '^flags.*(vmx|svm)' /proc/cpuinfo

Si este comando produce alguna salida es que nuestro procesador soporta virtualización de hardware y podemos usar KVM, sino puedes seguir con este procedimiento pero debes saber que no podras usar la JUNOS virtualizada con GNS3 ni cargarla con qemu, porque te dará un error del tipo "Could not initialize KVM, will disable KVM support".

Nota: KVM es incompatible con Virtualbox, por tanto si instalas KVM y tratas de usar cualquier S.O. con Virtualbox debes borrarlo, previamente,  del kernel (modprobe -r kvm_amd o  modprobe -r kvm_intel) posteriormente puedes volverlo a cargar en kernel si necesitas usar kvm con la opcion -i.


Después de ejecutar el comando y ver que nuestro procesador soporta Virtualiación, (no me he parado a explicar que versión de qemu debemos tener , lo recomendable es tener una versión inferior a 0.12, en la web GNS3 tienes manuales y tutoriales de como instalar qemu, kvm y parchearlos) tenemos que descargarnos una junos ya empaquetada y virtualizada con Freebsd. Es decir no es necesario que nos rompamos la cabeza instalando Freebsd y posteriormente cargar la junos, una persona se ha currado todo este proceso tan tedioso, lo podéis encontrar en:

Junos para VMWARE:
http://www.vagos.es/showthread.php?t=1232533

Junos para Qemu:
http://www.vagos.es/showthread.php?t=1318714

Si tenéis que realizar el proceso de instalación de Freebsd, Olive y la junos podéis seguir el procedimiento que indican las siguientes web:


http://inetpro.org/wiki/Using_QEMU_with_Olive_to_emulate_Juniper_Routers

Esta web, que expongo a continuación, explica detalladamente como instalar Freebsd:

http://www.mplsvpn.info/2010/07/installing-qemu-for-junos-integration.html


Tenéis que saber que las Junos 8.4 y anteriores funcionan con Freebsd 4.4 mientras que las Junos 8.5 o superiores funcionan con freebsd 6.0.
Una vez que ya tenemos nuestra imagen ("Olive-base.img") podemos usarla tanto para qemu como para virtualbox. En el caso de virtualbox hay que modificarla.

NOTA: A ciertos amigos y compañeros de trabajo no les funciona este sistema porque no tienen claro que es Olive. Olive es parte y todo del software de Juniper, sin Olive no podemos hacer funcionar nuestro Junos Virtual. Este post trata de enseñar como hacer funcionar Juniper en GNS3, pero no trata de enseñar como compilar nuestra junos con Olive. Mas adelante podréis disponer de un link para descargar una Junos ya creada y modificada, es decir, sin necesidad de compilarlo con Olive porque ya está hecho esa parte.

1.0 Convertir olive-base.img a olive-base.vdi.
Nota: Ubuntu Maverik trae, en sus repositorios, una versión antigua de GNS3 que no soporta la integración de qemu y una imagen de Juniper, es por este motivo que todos los paquetes necesarios para correr GNS3 versión 0.7.3.2 necesitamos descargarlos, compilarlos e instalarlos. Afortunadamente la nueva versión de Ubuntu, Ubuntu Natty Narwhal trae, en sus repositorios, la versión 0.7.3.2 que si soporta Juniper. Lo comento por si intentáis instalar qemu desde sus repositorios en Ubuntu Maverick y GNS3 desde la web, debéis saber que puede daros problemas.

Si no podéis usar Qemu por los motivos que explicado antes, podemos transformar nuestra imagen olive-base.img en una imagen que virtualbox entienda y usar. Para ello tenemos que ejecutar los siguientes comandos en una consola: 

$qemu-img convert olive-base.img olive-base.bin
$vboxManage convertdd olive-base.bin olive-base.dvi
$vboxManage modifyvdi olive-base.dvi compact

E iniciamos virtualbox, usando nuestra imagen olive-base.dvi. Es posible que nos de errores si tenemos kvm compilado, en este caso tenemos que borrarlo del kernel para poder continuar. Para hacer esto:

En primer lugar hay que buscar los módulos cargados.
Para este ejemplo buscaremos los módulos kvm:

$ /sbin/lsmod | grep kvm
kvm_intel 23169 0
kvm 89201 1 kvm_intel
Ahora eliminamos el módulo kvm_intel y luego el kvm. Este orden sigue el orden de dependencias por lo que evitaremos cualquier error.
$ sudo /sbin/modprobe -r kvm_intel
$ sudo /sbin/modprobe -r kvm
Así de simple. Ahora debemos configurar correctamente virtualbox, sino no nos arrancará. Las opciones para arrancar virtualbox de forma correcta son :

Sistema operativo: BSD
Version: FreeBSD
Memory size 256M
Audio disabled
Network
- Adapter 1
-Adapter type: Intel PRO/1000MT Desktop
-Attached to: NAT
- Adapter 2
-Adapter type: Intel PRO/1000MT Desktop
-Attached to: Internal Network
-Name: intf_R1_R2
- Adpater 3
-Adapter type: Intel PRO/1000MT Desktop
-Attached to: Internal Network
-Name: intf_R1_R3

Serial Ports
Enable ports 1
Port number: COM1
Port mode: Host Pipe
Check Create Pipe
Path: /tmp/olive1


Y con esto ya tendríamos nuestro Juniper operativo. 
root@% rootroot@%
root@% cli
root>
root> show version
Model: olive
JUNOS Base OS boot [10.1R1.8]
JUNOS Base OS Software Suite [10.1R1.8]
JUNOS Kernel Software Suite [10.1R1.8]
JUNOS Crypto Software Suite [10.1R1.8]
JUNOS Packet Forwarding Engine Support (M/T Common) [10.1R1.8]
JUNOS Packet Forwarding Engine Support (M20/M40) [10.1R1.8]
JUNOS Online Documentation [10.1R1.8]
JUNOS Voice Services Container package [10.1R1.8]
JUNOS Border Gateway Function package [10.1R1.8]
JUNOS Services AACL Container package [10.1R1.8]
JUNOS Services LL-PDF Container package [10.1R1.8]
JUNOS Services Stateful Firewall [10.1R1.8]
JUNOS AppId Services [10.1R1.8]
JUNOS IDP Services [10.1R1.8]
JUNOS Routing Software Suite [10.1R1.8]


Durante vuestras pruebas podréis comprobar que algunos comandos no funcionan en un Juniper virtualizado, como por ejemplo show chassis hardware, esto es normal, no disponemos de dos routing-engine ni fpc ni pic y qemu no puede suplir estos componentes.
Llegados a este punto os recomiendo hacer una copia de seguridad por si configuráis de forma inadecuada vuestro Juniper, lo comento porque al configurar algo nos pedirá que configuremos la contraseña de root y esto nos puede dejar fuera del equipo si no lo hacemos correctamente. Aunque, pensándolo bien, esto nos puede venir bien. Podremos aprender como recuperar la gestión de un equipo juniper en caso de perder la password. 

2.0 Como usar JUNOS mediante Qemu
Antes de seguir , es recomendable que instaléis correctamente qemu para permitir conexiones multicast, necesario para conectar un juniper con un cisco, por ejemplo o usar un cisco ASA, podéis saber como aqui.


Para poder acceder a la imagen con Qemu, desde la linea de comandos podemos usar: 
$qemu -m 256 -hda olive-base.img -boot c -localtime -nographic 

Pero si nos da error este paso, como un kernel panic y, posteriormente, no haga nada, debemos saber que esto es debido bien a que usamos la versión de GNS3 0.7.4 o bien porque estamos usando una version Qemu con un bug. Si estamos ejecutando la versión 0.7.3 y nos da este error puede ser que tengamos esa versión Qemu con el bug, para poder solucionarlo: 
(ojo con estos cambios, lo recomendable es desinstalar qemu y bajarse la versión de qemu anterior a la 0.12 e instalarlo.)

Primero instalar git: 
$sudo apt-get install git-core

Posteriormente nos descargamos nuestra bios y la compilamos:

$ git clone git://git.linuxtogo.org/home/kevin/seabios.git seabios
$ cd seabios
$ git checkout 8c8a880b584ccf8958d67e99a6750ba32d0b6454


Ahora modificamos la propia bios:
$vi ./seabio/src/config.h
Tenemos que buscar la linea CONFIG_SMBIOS y dejarlarla a 0:
// Support generation of SM BIOS tables (for emulators)
#define CONFIG_SMBIOS 0

 

Ahora compilamos:
$cd ..
$make

Y copiamos el bios.bin a su directorio correspondiente: 
$cp ./out/bios.bin /usr/share/seabios

Nota: Yo estoy usando Ubuntu 10.10 por tanto el directorio donde tengo seabios es /usr/share. Dicho directorio puede cambiar, según la distribución linux que uses.
Y ejecutamos nuestra imagen junos con qemu:
$qemu -m 256 -hda olive-base.img -boot c -localtime -nographic

Ahora debería cargar normalmente y sin errores.

3.0 Configurar GNS3 para poder usar nuestro Juniper
Ahora solo nos queda configurar GNS3 para que acepte nuestra imagen olive-base.img:


Debemos configurar GNS3 como se muestra en la imagen.

IMPORTANTE: Debemos configurar correctamente:
"Camino para el Qwrapper" 

lo podeis encontrar en:
Preferencia > Qemu 
y el camino es "/usr/share/doc/gns3/qemuwrapper.py".

4.0 Problemas conocidos 
A parte del bug que he explicado anteriormente, podemos encontrarnos con los siguientes errores.


1. 
El mayor problema que he tenido al tratar de usar una imagen de Juniper en GSN3 es un error que da cuando trato de conectar un cable desde un equipo ( sea el que sea) a otro equipo. El error que da es el siguiente: 

=> ---------Traceback lines (saved in exception.log)----------
Traceback (most recent call last):

File "/home/pedro/Escritorio/GNS3-0.7.4-src/src/GNS3/Scene.py", line 713, in slotAddLink
self.__addLink()

File "/home/pedro/Escritorio/GNS3-0.7.4-src/src/GNS3/Scene.py", line 675, in __addLink
if self.__topology.addLinkFromScene(self.__sourceNodeID, self.__sourceInterface, self.__destNodeID, self.__destInterface) == False:

File "/home/pedro/Escritorio/GNS3-0.7.4-src/src/GNS3/Topology.py", line 851, in addLinkFromScene
command = undo.AddLink(self, srcid, srcif, dstid, dstif)

File "/home/pedro/Escritorio/GNS3-0.7.4-src/src/GNS3/UndoFramework.py", line 123, in __init__
self.setText(unicode(translate("UndoFramework", "New link: %s (%s) -> %s (%s)")) % (source.hostname, srcif, dest.hostname, dstif))

TypeError: not all arguments converted during string formatting

 

Este error es causado porque usamos GNS3 versión 0.7.4.
(si no es así, borra todo e instala Qemu versión 0.11, GNS3 0.7.3 y pregunta a Google)  
Debemos usar GNS3 versión 0.7.3, ¿como hacerlo?:

cd /opt
sudo wget http://downloads.sourceforge.net/gns-3/GNS3-0.7.3-src.tar.bz2
sudo tar -xjvf GNS3-0.7.3-src.tar.bz2
sudo rm GNS3-0.7.3-src.tar.bz2
 

Y listo, ya podemos usar GNS3 con nuestro junos sin problemas. (No olvidéis configurar GNS3 correctamente, es decir qemu , qemuwrapper. etc)

Fuentes: Tantas web.... viva Linux

1 comentario:

  1. yo he isntalado en GNS3 que trae linux mint 14 por defecto, que por cierto es mas avanzado que la version actual.. y no me deja abrir la consola GNS3.... puede decirme que debo hacer....

    ResponderEliminar