Instalar router OpenWRT en VM • Proxmox
Preámbulo
OpenWRT es un sistema operativo que convierte un dispositivo en un router. Además, brinda características avanzadas que estaban solo disponibles en aparatos mucho más caros, como las VLANs, firewall y un Linux completo; Y permite estar en control de una red y sus dispositivos. Es ideal para crear VLANs, y así tener redes específicas para ciertas áreas / usos. También, con ciertas aplicaciones que pueden instalarse (y Docker externos) monitorear y graficar el tráfico de la red.
Permite aprender y practicar muchos conceptos sobre redes informáticas, a la vez de que es un software preparado para producción, y mucho más ligero que PfSense / OPNSense.
La instalación en este tutorial se explica en un entorno Proxmox, con una serie de comandos para instalar una máquina virtual Q35 y el sistema operativo dentro de una imágen de disco. Por ejemplo, acá hay un tutorial para la instalación en VirtualBox.
Además, se recurre a OpenVSwitch, y no se usarán los Linux Bridges comunes. Lo segundo me dio problemas a la hora de montar un bridge virtual en un puerto real, algo clave para poder construir un router físico.
Habiendo aclarado esto, empecemos.
Descargar imágen ISO
La imágen se debe descargar desde la web oficial. Primero, se selecciona la arquitectura del CPU dónde se ejecutará el sistema operativo, comúnmente “x86”.
A continuación, se muestran items como “64”, “generic”, “geode” y “legacy”. Se selecciona “64”, salvo que no tengas un procesador moderno. Una vez habiendo elegido la opción correcta, aparecerán distintos archivos. La documentación explica cada una, pero te adelanto que la opción generic-squashfs-combined-efi.img.gz tiene las mejores características, según mi criterio. Estas características son:
- Persistencia de la raíz del SO: el SO no podrá ser modificado por nosotros ni posibles atacantes.
- Tiene una partición para archivos de configuración: podremos editar el comportamiento del dhcp, vlan y firewall.
- Su sistema de particiones incluye una EFI: es compatible con una VM basada en chipset Q35.
- Ofrece 100MB para aplicaciones extra: no necesitamos ninguna para tener un router funcional, pero la opción está.
Subir la imágen a Proxmox
Copiamos el link de generic-squashfs-combined-efi.img.gz y vamos a nuestra terminal. Nos debemos dirigir al directorio dónde guardamos las imágenes ISO (dónde se guardan los instaladores de los sistemas operativos). Ese directorio debería ser /var/lib/vz/template/iso:
cd /var/lib/vz/template/iso
Una vez ahí, se ejecuta wget, para descargar el archivo generic-squashfs-combined-efi.img.gz:
wget https://downloads.openwrt.org/releases/24.10.1/targets/x86/64/openwrt-24.10.1-x86-64-generic-squashfs-combined-efi.img.gz && \
Y se descomprime:
gunzip openwrt-*.img.gz
A modo de documentar, al finalizar el comando gunzip, se mostrará este mensaje:
gzip: openwrt-24.10.1-x86-64-generic-squashfs-combined-efi.img.gz: decompression OK, trailing garbage ignored
La imágen de disco ahora se sitúa en /var/lib/vz/template/iso/openwrt-24.10.1-x86-64-generic-squashfs-combined-efi.img. Se utilizará esta ruta para instalar el sistema operativo en la máquina virtual.
Crear dos adaptadores de red para pruebas
Seguramente ya tengas un bridge virtual llamado “vmbr0”, pero hay que crear otros dos adaptadores para que el router pueda tener algo con qué jugar.
Para ello, primero se debe instalar open-vswitch:
apt update && apt install openvswitch-common -y
Y en el archivo /etc/network/interfaces, crear dos adaptadores para pruebas:
auto vmbr9001
iface vmbr9001 inet manual
ovs_type OVSBridge
# BRIDGE PARA PRUEBAS 1
auto vmbr9002
iface vmbr9002 inet manual
ovs_type OVSBridge
# BRIDGE PARA PRUEBAS 2
Luego, reiniciar la red con:
systemctl restart networking
Instalar la máquina con qm
Al ya tener la imágen, debemos instalarlo con un comando especial que convierta la imágen a algo que entienda qemu. Como verás en el comando siguiente, voy a configurar una máquina ID 201 con un núcleo cpu, 256MB de RAM y un disco VirtIO.
Para que tengas de referencia, mi OpenWRT con dos túneles Cloudflare (cloudflared) y alrededor de 10 VLANs consume sólo 170MB de RAM. El router maneja tráfico externo (ligero) y tiene conectado unos 12 dispositivos internamente, siendo uno de ellos un NAS, que maneja alrededor de 2GBit/s. Por ende, es correcto pensar que se estará muy bien con 256MB de RAM.
Se ordena la creación de la VM con el siguiente comando:
qm create 201 \
--name OpenWRT-test \
--memory 256 \
--socket 1 \
--cores 1 \
--machine q35 \
--bios ovmf \
--efidisk0 disk_images:0,size=128K \
--bootdisk virtio0 \
--boot c \
--onboot yes \
--vga qxl \
--net0 virtio=bc:24:11:26:f0:11,bridge=vmbr0,firewall=0 \
--net1 virtio=bc:24:11:b8:ea:14,bridge=vmbr9001,firewall=0 \
--net2 virtio=bc:24:11:57:7b:fc,bridge=vmbr9002,firewall=0 \
--virtio0 disk_images:0,import-from=/var/lib/vz/template/iso/openwrt-24.10.1-x86-64-generic-squashfs-combined-efi.img,format=raw
Al ejecutar este comando, se creará una máquina virtual y se volcará la imágen de OpenWRT en el disco 0 de dicha VM.
Ejecutar la máquina virtual
La máquina no iniciará sola, por lo que en la interfaz web de Proxmox deberá seleccionarse la VM 201 y, luego, apretar el botón “Start” de la esquina superior derecha.
Al entrar al item “Console”, puede parecer que OpenWRT deja de cargar el sistema y se cuelga, así:
Cuándo esto sucede, se debe seleccionar la consola con el mouse para hacer foco en la VM, y luego apretar la tecla ENTER. OpenWRT dará la bienvenida:
Configurar una contraseña
Es vital configurar una contraseña, para poder resguardar el router de manos ajenas. Para ello, se escribe y ejecuta el siguiente comando:
passwd root
Preguntará por la contraseña y su confirmación. Por motivos de seguridad, los caracteres tipeados no se muestran, pero la máquina los registra, así que se debe tipear sin preocupaciones. Al escribir la contraseña en las dos oportunidades (y de forma idéntica), el mensaje de éxito será:
passwd: password for root changed by root
Ver los adaptadores de red
Para poder configurar el router, es necesario primero reconocer los adaptadores.
Se debe escribir el siguiente comando para obtener las tarjetas de red disponibles:
ip addr
La salida será:
El adaptador br-lan es un bridge virtual montado sobre eth0. Esto está mal, porque el eth0 se utilizará para la red WAN. El archivo de networking debe sufrir algunas modificaciones, para poder tener acceso a internet y empezar a routear cosas.
Configurar IPs
Se debe editar el archivo de red mediante el software vi:
Si no sabés como usar vi, podés ver este sencillo video:
vi /etc/config/network
El archivo se verá así:
Se debe editar para que br-lan utilice el puerto eth1, y la WAN utilice el eth0. Esto es porque el eth0 está “mapeado” al bridge de proxmox que recibe internet, mientras que el eth1 será utilizado por la LAN (la red interna dónde estarían los dispositivos en una red hogareña, carente de VLANs). Aunque esta configuración es sencilla, se realizará así para probar cosas y tener un punto dónde el router funciona bien.
Además, se eliminaron las características de IPv6, que no se usarán en redes hogareñas (ni la mayoría de profesionales), al menos por unos largos años. La edición del archivo queda así:
Luego, se reinicia la red con:
/etc/init.d/network reload
Epílogo
La nueva versión 24.10 consume unos 15MB más de RAM que la anterior (23.05.5), pero contiene los paquetes más seguros hasta la fecha, con todos sus parches de seguridad.
Pronto se creará un nuevo post, para poder configurar el router completamente a nuestro gusto. Por ahora, si conectan máquinas virtuales o contenedores de Proxmox al adaptador “vmbr9001”, tendrán IP e internet.
Realiza un snapshot
Para tomar “una foto” de como está ahora la máquina virtual, debés seleccionar la máquina virtual > Snapshots > Take snapshot.
Así, en caso de tener mala suerte con los cambios, siempre podés volver a este estado de la máquina virtual, cuándo funcionaba.
¡Saludos!