Desplegar MikroTik Cloud Hosted Router como un Servidor Privado Virtual en DigitalOcean

/

Cloud Hosted Router (CHR) es una versión de RouterOS diseñada para ejecutarse como una máquina virtual. Admite la arquitectura x86 de 64 bits y se puede usar en la mayoría de los hipervisores populares como VMWare, Hyper-V, VirtualBox, KVM y otros.

En este tutorial aprenderemos los pasos necesarios para desplegar la versión CHR de RouterOS en un VPS o Droplet, como se le denomina comúnmente, dentro de la plataforma de DigitalOcean. Montaremos la imagen en un servidor Ubuntu 18.04 LTS.

CHR tiene las características completas de RouterOS habilitadas de manera predeterminada, pero tiene un modelo de licencia diferente al de otras versiones de RouterOS.

El CHR tiene 4 niveles de licencia:

  • gratis
  • p1
  • p10
  • p-unlimited

La licencia de prueba gratuita de 60 días está disponible para todos los niveles de licencia pagados. Para obtener la licencia de prueba gratuita, debe tener una cuenta en MikroTik.com ya que toda la administración de licencias se realiza allí.

En el siguiente cuadro encontraremos las limitaciones de velocidad y el precio en dólares americanos entre las diferentes versiones:

LicenseSpeed limitPrice
Free1MbitFREE
P11Gbit$45
P1010Gbit$95
P-UnlimitedUnlimited$250

Para mayor información sobre el licenciamiento puede visitar el siguiente enlace -> https://wiki.mikrotik.com/wiki/Manual:CHR

Requisitos

Para culminar satisfactoriamente este tutorial se requiere lo siguiente:

  • Crear una cuenta en la plataforma de DigitalOcean
  • Crear una cuenta en la plataforma de MikroTik
  • Disponer de una licencia CHR

Pasos a seguir

Para este paso inicial tenemos dos opciones, la primera opción es crear el droplet directamente desde la plataforma web de DigitalOcean la cual es muy sencilla de manipular, o la segunda opción que consiste en crearlo desde nuestra interfaz de línea de comandos (CLI) según vimos en el tutorial acerca del uso de la herramienta Doctl.

La creación del droplet lo dejamos a criterio suyo, pudiendo recurrir a los apartados iniciales del siguiente tutorial para aprender a desplegar un VPS, dominio y proyecto a través de la herramienta Doctl -> http://itsge.org/como-configurar-un-sistema-de-mesa-de-ayuda-con-otrs/

Para conocer más sobre la herramienta Doctl, puedes ingresar al tutorial a través del siguiente enlace -> http://itsge.org/digitalocean-a-traves-de-doctl-cliente-oficial-de-interfaz-de-linea-de-comandos-cli/

Utilizaremos el Windows Terminal (Preview) para la ejecución de todo el tutorial. Para conocer como preparar nuestro entorno de trabajo recomiendo leer el apartado «Preparando nuestro entorno de trabajo» del siguiente enlace -> http://itsge.org/digitalocean-a-traves-de-doctl-cliente-oficial-de-interfaz-de-linea-de-comandos-cli/

Para conectarnos a nuestro servidor utilizaré en este tutorial nuestra consola de Ubuntu WSL (Windows Subsystem for Linux). La instalación de Ubuntu 18.04 WSL en Windows 10 se explica detalladamente en el siguiente enlace -> https://ubuntu.com/wsl

Para este proyecto específico hemos creado en nuestra plataforma de DigitalOcean lo siguiente:

  • Proyecto denominado ITSGE.SITE
  • Droplet con Sistema Operativo Ubuntu 18.04.3 (LTS) x64, plan Standard, 1 Gb de RAM, 1 vCPU, 25 GB disco SSD, 1000 GB de transferencia, centro de datos NYC1, autenticación por contraseña y nombre de host chr.itsge.site
  • Dominio denominado itsge.site con un registro DNS tipo A data chr apuntando a la IP pública de mi droplet

Descarga de imagen Cloud Hosted Router de Mikrotik

Para este laboratorio descargaremos la imagen de disco sin formato versión 6.45.8 LTS de CHR MikroTik y procederemos a descomprimir.

wget http://download2.mikrotik.com/routeros/6.37/chr-6.37.img.zip -O chr.img.zip  
gunzip -c chr.img.zip > chr.img 
ls -l

Con el comando ls -l listamos la carpeta donde estamos ubicados. Los archivos listados deben ser los siguientes:

root@chr:~# ls -l
total 175316
-rw-r--r-- 1 root root 134217728 Apr 16 23:40 chr.img
-rw-r--r-- 1 root root  45302690 Sep 23  2016 chr.img.zip

Actualización e instalación de paquetes necesarios

Procedemos a actualizar los repositorios e instalar los paquetes quemu-utils y pv.

apt update -y
apt install -y qemu-utils pv

Uso de quemu-img

La herramienta de línea de comandos qemu-img es utilizada para dar formato a varios sistemas de archivo utilizados por Xen y KVM. qemu-img se debe utilizar para dar formato a imágenes de huéspedes virtualizadas, dispositivos de almacenaje adicional y almacenamiento de redes.

La opción ‘convert’ sirve para convertir un formato reconocido a otra imagen de formato. En nuestro caso convertiremos una imagen con formato RAW (.img) a QCOW2.

El formato de imagen QEMU qcow2 es el formato más versatil. Utilízado para imágenes más pequeñas (útil si su sistema de archivos no admite huecos, por ejemplo en Windows), encriptación opcional AES, compresión basada en zlib y soporte de múltiples instantáneas de VM.

qemu-img convert chr.img -O qcow2 chr.qcow2 

Verificamos el espacio disponible con el que contamos en nuestro VPS.

df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            481M     0  481M   0% /dev
tmpfs            99M  596K   98M   1% /run
/dev/vda1        25G  1.3G   23G   6% /
tmpfs           493M     0  493M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           493M     0  493M   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs            99M     0   99M   0% /run/user/0

Vemos que contamos con 23 GB de espacio disponible, por lo que Incrementaremos el tamaño de la imagen QCOW2 a 20 GB.

qemu-img resize chr.qcow2 1G

Habilitamos el controlador del kernel NBD en el host KVM.

modprobe nbd

Enlazamos el archivo al dispositivo nbd0.

qemu-nbd -c /dev/nbd0 chr.qcow2

Luego utilizaremos la herramienta partprobe el cual es un programa que informa al núcleo del sistema operativo de los cambios en la tabla de particiones.

partprobe /dev/nbd0

En Ubuntu y otros sistemas operativos Linux y UNIX, podemos usar el comando mount para adjuntar (montar) sistemas de archivos y dispositivos extraíbles como unidades flash USB en un punto de montaje particular en el árbol de directorios.

mount /dev/nbd0p2 /mnt

Archivo de configuración para RouterOS

Procedemos a averiguar los parámetros necesarios para crear el archivo que realizará la configuración inicial de nuestro RouterOS, como la IP pública, la ruta por defecto, el usuario y su contraseña, los DNS para resolución de nombres, desactivación del servicio telnet y la actualización de los paquetes a la última versión estable.

Averiguamos la IP pública asignada a nuestro VPS así como la máscara de red.

ip addr show eth0 | grep global | cut -d' ' -f 6 | head -n 1

Así mismo consultaremos la ruta por defecto de nuestra red interna.

ip route list | grep default | cut -d' ' -f 3

Abriremos en nuestra herramienta de edición de texto nano el archivo autorun.scr almacenado en la ruta /mnt/rw/.

nano /mnt/rw/autorun.scr

Copiaremos el siguiente texto, reemplazando la palabra IP_VPS por la IP pública consultada anteriormente incluyendo la máscara de red, así mismo también reemplazaremos la palabra GATEWAY por la IP de nuestra ruta por defecto. Y por último reemplazaremos la palabra PASSWORD por la clave de acceso que asignaremos al usuario root de nuestro nuevo sistema operativo RouterOS.

/ip address add address=IP_VPS interface=[/interface ethernet find where name=ether1]
/ip route add gateway=GATEWAY
/ip service disable telnet
/user set 0 name=root password=PASSWORD
/ip dns set servers=1.1.1.1,1.0.0.1
/system package update install

En mi caso particular, el archivo quedó de la siguiente manera:

/ip address add address=206.189.192.96/20 interface=[/interface ethernet find where name=ether1]
/ip route add gateway=206.189.192.1
/ip service disable telnet
/user set 0 name=root password=PASSWORD
/ip dns set servers=1.1.1.1,1.0.0.1
/system package update install

Presionamos Ctrl + X, aceptamos que deseamos sobreescribir el archivo presionando Enter y nuevamente presionamos Enter para aceptar el nombre del archivo sugerido.

Desmontamos el directorio montado en /mnt.

umount /mnt

Redimensionamiento de partición

Fdisk (disco fijo o disco de formato) es una utilidad de línea de comandos basada en texto para ver y administrar particiones de disco duro en Linux. Con fdisk puede ver, crear, cambiar el tamaño, eliminar, cambiar, copiar y mover particiones.

Primero verificaremos los parámetros del disco conectado a /dev/nbd0:

fdisk -l /dev/nbd0

Del resultado anterior deducimos lo siguiente:

  • El disco tiene un tamaño de 1 GB.
  • Tiene dos particiones, la primera de 32 MB y la segunda de 96 MB.

Lo que debemos hacer ahora es incrementar el tamaño de la segunda partición hasta que termine de ocupar el espacio libre del disco de 20 GB. Para ello utilizaremos la herramienta fdisk, eliminaremos la segunda partición, la volveremos a crear como partición primaria desde el sector 65537 hasta el sector 2097151 (opción predeterminada por lo que en este punto solo daremos Enter) y responderemos que no deseamos eliminar la firma ext3. Finalizamos grabando los resultados. El procedimiento lo veremos a continuación:

fdisk /dev/nbd0

Las teclas a ingresar para culminar este paso son las siguientes: d -> 2 -> n -> p -> 2 -> 65537 -> Enter (valor por defecto) -> n -> w.

Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Partition number (1,2, default 2): 2

Partition 2 has been deleted.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (65537-2097151, default 67584): 65537
Last sector, +sectors or +size{K,M,G,T,P} (65537-2097151, default 2097151):

Created a new partition 2 of type 'Linux' and of size 992 MiB.
Partition #2 contains a ext3 signature.

Do you want to remove the signature? [Y]es/[N]o: n

Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

e2fsck se utiliza para verificar la familia de sistemas de archivos ext2/ext3/ext4.

e2fsck -f -y /dev/nbd0p2

El comando anterior verificará que no existan errores en la nueva partición creada y corregirá los sectores defectuosos.

La herramienta resize2fs redimensionará los sistemas de archivos ext2, ext3 o ext4. Se puede utilizar para ampliar o reducir un sistema de archivos desmontado ubicado en el dispositivo.

resize2fs /dev/nbd0p2

Montaje de partición temporal

Para el siguiente paso montaremos un sistema de archivos temporal (TMPFS) sobre la carpeta /tmp.

mount -t tmpfs tmpfs /mnt

Ahora nos toca utilizar la herramienta pv (Pipe Viewer) la cual se puede insertar en cualquier canalización normal entre dos procesos para dar una indicación visual de la rapidez con la que pasan los datos, cuánto tiempo han tardado y cuán cerca estamos de su finalización. El programa gzip reduce el tamaño de los ficheros dados mediante el algoritmo de compresión.

pv /dev/nbd0 | gzip > /mnt/chr-extended.gz

Eliminaremos todos los procesos ejecutándose con la herramienta qemu-nbd.

killall qemu-nbd 

Reinicio con sysrq-trigger

La herramienta sysrq-trigger nos permite controlar el proceso de reinicio de nuestro servidor de una forma manual.

El comando siguiente desmonta todas las particiones montadas.

echo u > /proc/sysrq-trigger

Zcat descomprime ficheros por línea de comandos.

zcat /mnt/chr-extended.gz | pv > /dev/vda

Sincronizamos todas las operaciones en caché con el disco.

echo s > /proc/sysrq-trigger

Reiniciamos el sistema.

echo b > /proc/sysrq-trigger

Acceso por Winbox

El siguiente paso consiste en ingresar a nuestro servidor RouterOS a través de la GUI desarrollada por MikroTik llamada Winbox. Lo pueden descargar del siguiente enlace -> https://mikrotik.com/download

Ingresamos el FQDN de nuestro servidor, en mi caso chr.itsge.site, el usuario y su contraseña. Hacemos click en Connect.

Si todo los pasos se han realizado de forma correcta ya tendremos acceso a nuestro RouterOS actualizado a la última versión estable para configurar según nuestras necesidades.

Activación de licencia

El último paso necesario para tener todas las características disponibles de nuestro RouterOS es activar una licencia, sea que ya poseamos alguna o creemos una nueva tipo libre en la plataforma de MikroTik. En la imagen siguiente veremos donde ingresar para activar nuestra licencia.

El acceso es a través de /system/license -> Renew License e ingresamos nuestro usuario y contraseña de la plataforma de MikroTik y hacemos click en el botón Start.

En la siguiente imagen podemos ver un equipo VPS con RouterOS activado con una licencia P1.

Espero sea de utilidad este tutorial, tanto para usarlo en producción como para entornos de prueba. Si hubieran comentarios o consultas por favor no duden en hacerlas en los comentarios o a través de mis redes sociales.

Deja un comentario