Qué es esta entrada
Resumen de comandos útiles de RouterOS y del cliente SSH, agrupados por tema y
con comentarios. Todo lo que aparece aquí es lo que se usó realmente durante el
Proyecto ax³: la migración del hAP ac² al hAP ax³ con monopuesto
de O2, policy routing multi-región con ProtonVPN y Address Lists, DNS con Pi-Hole y Unbound, y backups.
Cómo usar esta entrada: usa el índice para saltar al bloque que
necesites. Cada bloque de código tiene un botón Copiar en la esquina
superior derecha. Los comandos están pensados para pegarse en la terminal de
RouterOS (New Terminal en WinBox o SSH) o en el cliente (FreeBSD/Linux/Windows).
Índice
SSH y acceso remoto
# Ver la configuración SSH actual
/ip ssh print
# Permitir autenticación por contraseña
/ip ssh set password-authentication=yes
# Solo permitir contraseña a usuarios SIN clave (recomendado tras importar claves)
/ip ssh set password-authentication=yes-if-no-key
# Forzar algoritmos criptográficos modernos (AES-GCM, ChaCha20, Ed25519)
/ip ssh set strong-crypto=yes
# Ver las claves SSH importadas de los usuarios
/user ssh-keys print
# Ver detalle (incluye fingerprint)
/user ssh-keys print detail
# Importar una clave pública a un usuario
/user ssh-keys import public-key-file=mikrotik_axe.pub user=carlos
# Eliminar una clave por índice
/user ssh-keys remove 1
# Eliminar una clave por fingerprint (más seguro)
/user ssh-keys remove [find fingerprint="SHA256:..."]
Valores de password-authentication:
yes — Login por contraseña siempre permitido.
no — Nunca permitido, solo clave SSH.
yes-if-no-key — Solo si el usuario no tiene clave asociada. Recomendado tras importar las claves.
Usuarios
# Listar todos los usuarios
/user print
# Habilitar un usuario y asignarle contraseña
/user set admin disabled=no password="TuContraseñaSegura"
# Asignar grupo (full = control total)
/user set admin disabled=no group=full password="TuContraseñaSegura"
# Dejar un usuario sin contraseña (solo entrará con clave SSH)
/user set carlos password=""
# Deshabilitar un usuario temporalmente
/user set carlos disabled=yes
Backups
# Backup binario (restaurable, incluye todo)
/system backup save name=ax3-2026-10-25-dual-vpn-OK
# Backup con contraseña (recomendado si sale del router)
/system backup save name=ax3-2026-10-25-dual-vpn-OK password="clave"
# Export legible (.rsc, sin contraseñas)
/export compact file=ax3-2026-10-25-dual-vpn-OK
# Export con datos sensibles (¡cuidado con dónde se guarda!)
/export file=ax3-2026-10-25-dual-vpn-OK show-sensitive
# Listar archivos existentes
/file print
# Restaurar un backup binario
/system backup load name=ax3-2026-10-25-dual-vpn-OK.backup
# Reiniciar el router
/system reboot
Nomenclatura recomendada:
ax3-AAAA-MM-DD-HHMM-<estado>.ext. Guardar siempre una copia
fuera del router (en tormenta, por ejemplo, con ZFS y snapshots).
Firewall — Filter
# Ver reglas
/ip firewall filter print
/ip firewall filter print stats
# Permitir LAN → WAN (con prioridad antes del drop final)
/ip firewall filter add chain=forward in-interface-list=LAN out-interface-list=WAN \
action=accept comment="Permitir LAN a WAN"
# Permitir LAN → VPN España
/ip firewall filter add chain=forward in-interface-list=LAN out-interface=proton-vpn \
action=accept comment="Permitir LAN a VPN España"
# Permitir LAN → VPN Marsella
/ip firewall filter add chain=forward in-interface-list=LAN out-interface=proton-vpn-marsella \
action=accept comment="Permitir LAN a VPN Marsella"
# Colocar una regla antes de otra (ej. antes del Drop final)
/ip firewall filter add ... place-before=[find comment="Drop todo lo dems"]
# Mover una regla después de crearla
/ip firewall filter move [find comment~"Permitir LAN a VPN"] \
destination=[find comment~"Drop todo lo dems"]
# Resetear contadores
/ip firewall filter reset-counters [find]
Firewall — Mangle (Policy Routing)
# Ver reglas y contadores
/ip firewall mangle print
/ip firewall mangle print stats
# 1. Excluir tráfico LAN del marcado (DEBE IR PRIMERO)
/ip firewall mangle add chain=prerouting dst-address-list=lan-directa \
action=return comment="No marcar tráfico LAN"
# 2. Marcar la conexión (usando Address Lists en lugar de IPs sueltas)
/ip firewall mangle add chain=prerouting src-address-list=vpn-marsella in-interface=bridge \
action=mark-connection new-connection-mark=conn-marsella passthrough=yes \
comment="Mangle: Marcar lista Marsella"
# 3. Enrutar por la tabla correspondiente
/ip firewall mangle add chain=prerouting connection-mark=conn-marsella \
action=mark-routing new-routing-mark=via-vpn-marsella passthrough=no \
comment="Mangle: Enrutar lista Marsella"
# --- MSS (Cálculo correcto = MTU - 40) ---
# PPPoE: MTU 1492 -> MSS 1452
/ip firewall mangle add chain=forward protocol=tcp tcp-flags=syn \
out-interface=pppoe-o2 action=change-mss new-mss=1452 passthrough=yes \
comment="MSS para PPPoE"
# WireGuard España: MTU 1420 -> MSS 1380
/ip firewall mangle add chain=forward protocol=tcp tcp-flags=syn \
out-interface=proton-vpn action=change-mss new-mss=1380 passthrough=yes \
comment="MSS para túnel España"
# WireGuard Marsella: MTU 1380 -> MSS 1340
/ip firewall mangle add chain=forward protocol=tcp tcp-flags=syn \
out-interface=proton-vpn-marsella action=change-mss new-mss=1340 passthrough=yes \
comment="MSS para túnel Marsella"
Orden crítico: la regla "No marcar tráfico LAN" debe ir
antes de cualquier mark-connection o mark-routing.
Además, es vital excluir las redes internas de los túneles (ej. 10.3.0.0/24)
en la lista lan-directa para evitar bucles.
Firewall — NAT
# Ver reglas
/ip firewall nat print
/ip firewall nat print stats
# Masquerade general (salida por PPPoE)
/ip firewall nat add chain=srcnat action=masquerade src-address=192.168.88.0/24 \
out-interface=pppoe-o2 comment="NAT general por PPPoE"
# Masquerade para el túnel España (debe ir ANTES que la general)
/ip firewall nat add chain=srcnat action=masquerade src-address=192.168.88.0/24 \
out-interface=proton-vpn comment="NAT para ProtonVPN España"
# Masquerade para el túnel Marsella
/ip firewall nat add chain=srcnat action=masquerade src-address=192.168.88.0/24 \
out-interface=proton-vpn-marsella comment="NAT para ProtonVPN Marsella"
# Masquerade para acceder al HGU (activar solo cuando se necesite)
/ip firewall nat add chain=srcnat action=masquerade src-address=192.168.88.0/24 \
out-interface=ether1 disabled=yes comment="NAT para entrar al HGU O2"
Listas de direcciones (Address Lists)
# Ver todas las listas
/ip firewall address-list print
# Añadir red a la lista "lan-directa" (Para evitar que vaya por la VPN)
/ip firewall address-list add list=lan-directa address=192.168.88.0/24 \
comment="LAN principal"
/ip firewall address-list add list=lan-directa address=10.2.0.0/24 \
comment="Red interna VPN España"
/ip firewall address-list add list=lan-directa address=10.3.0.0/24 \
comment="Red interna VPN Marsella"
# Añadir dispositivos a las listas de VPN
/ip firewall address-list add list=vpn-marsella address=192.168.88.100 comment="Dispositivo 1"
/ip firewall address-list add list=vpn-barcelona address=192.168.88.201 comment="Dispositivo 2"
Rutas y Tablas de Enrutamiento
# Ver todas las rutas
/ip route print
# Crear una tabla de enrutamiento personalizada (RouterOS v7 requiere FIB)
/routing table add name=via-vpn-marsella fib
# Salida por ProtonVPN Marsella
/ip route add dst-address=0.0.0.0/0 gateway=proton-vpn-marsella routing-table=via-vpn-marsella \
distance=1 comment="Salida por Marsella"
# Kill switch: blackhole si el túnel cae (Sintaxis correcta en v7)
/ip route add dst-address=0.0.0.0/0 blackhole=yes routing-table=via-vpn-marsella \
distance=2 comment="Kill switch Marsella"
Kill switch por blackhole: si el túnel está arriba, la ruta 1
(distance=1) está activa y la 2 nunca se usa. Si el túnel cae, la ruta 1 se vuelve
inactiva y entra la 2 (blackhole), descartando el tráfico marcado. No hay fuga
posible hacia la WAN normal. (Nota: en RouterOS v6 se usaba type=blackhole, en v7 es blackhole=yes).
DHCP y PPPoE
# Ver red DHCP configurada
/ip dhcp-server network print
# Forzar DNS a Pi-Hole
/ip dhcp-server network set [find] dns-server=192.168.88.244
# Fijar las IPs de los dispositivos (CRUCIAL para que las Address Lists no fallen)
/ip dhcp-server lease make-static [find]
# Ver cliente PPPoE
/interface pppoe-client print detail
# Asegurar que PPPoE añade ruta por defecto
/interface pppoe-client set [find name=pppoe-o2] add-default-route=yes
# DHCP client de ether1 sin añadir ruta (evita doble NAT)
/ip dhcp-client set [find interface=ether1] add-default-route=no
Doble NAT y VPNs: el DHCP client de ether1 debe tener siempre add-default-route=no. Además, si usas Address Lists para enrutar por VPN, las IPs deben ser estáticas (reservas DHCP) para que el router siempre reconozca al dispositivo.
DNS
# Ver configuración DNS del router
/ip dns print
# Desactivar el resolver del router (los clientes usan Pi-Hole)
/ip dns set allow-remote-requests=no
Cadena DNS: clientes → Pi-Hole (192.168.88.244) →
Unbound (192.168.88.160) → resolución recursiva. El router no participa.
Por eso allow-remote-requests debe estar en no.
WireGuard
# Ver interfaces WireGuard
/interface wireguard print
# Ver peers (comprobar que el Last-Handshake es reciente)
/interface wireguard peers print detail
# Ping por el túnel (desde el propio router)
/ping 10.2.0.1 count=3 interface=proton-vpn
# Ping a Internet usando la interfaz del túnel
/ping 1.1.1.1 interface=proton-vpn-marsella count=3
Diagnóstico, Monitorización y Rescate
# Ver interfaces activas y sus MTU
/interface print
# Ver direcciones IP asignadas (¡comprueba que no haya ninguna 'unknown'!)
/ip address print
# Ver conexiones activas con marca VPN
/ip firewall connection print where connection-mark~"vpn"
# Ver conexiones de un dispositivo concreto
/ip firewall connection print where src-address~"192.168.88.100"
# Ver logs de PPPoE o Firewall
/log print where topics~"pppoe"
/log print where message~"DROP"
# Ver contadores de mangle (las reglas de Arriba deben sumar paquetes)
/ip firewall mangle print stats
# --- RESOLUCIÓN DE PROBLEMAS ---
# Eliminar un peer WireGuard fantasma que rompe el túnel
/interface wireguard peers remove [find name="peerX"]
# Limpiar la interfaz 'unknown' si falla una importación de WireGuard
/ip address remove [find interface=unknown]
# Resetear las conexiones de una IP tras cambiar de VPN
/ip firewall connection remove [find src-address~"192.168.88.100"]
# Activar Safe Mode (revierte cambios si se pierde la sesión)
/system safe-mode
Cliente — comandos útiles
# Generar par de claves ed25519
ssh-keygen -t ed25519 -f ~/.ssh/mikrotik_axe -C "carlos@mikrotik-ax3"
# Ver fingerprint de una clave pública
ssh-keygen -lf ~/.ssh/mikrotik_axe.pub
# Limpiar entrada antigua de known_hosts
ssh-keygen -R 192.168.88.1
# Subir clave pública al router
scp ~/.ssh/mikrotik_axe.pub carlos@192.168.88.1:/mikrotik_axe.pub
# Conectar con clave específica
ssh -i ~/.ssh/mikrotik_axe carlos@192.168.88.1
# Descargar backups
scp carlos@192.168.88.1:/ax3-2026-10-25-dual-vpn-OK.backup .
scp carlos@192.168.88.1:/ax3-2026-10-25-dual-vpn-OK.rsc .
# Ver IP pública actual y ubicación geográfica
curl -s ifconfig.me
curl -s ipinfo.io/city
# Probar fugas DNS
nslookup whoami.akamai.net
nslookup dnsleaktest.com
~/.ssh/config (cliente)
Host mikrotik-ax3
HostName 192.168.88.1
User carlos
IdentityFile ~/.ssh/mikrotik_axe
IdentitiesOnly yes
Host mikrotik-admin
HostName 192.168.88.1
User admin
Con eso:
ssh mikrotik-ax3
scp archivo.bin mikrotik-ax3:/
Buenas prácticas aplicadas
| Elemento |
Valor correcto |
strong-crypto | yes |
password-authentication | yes-if-no-key (tras importar claves) |
| Fasttrack | Deshabilitado (rompe policy routing) |
allow-remote-requests (DNS) | no |
DHCP client de ether1 | add-default-route=no |
| PPPoE client | add-default-route=yes |
| Kill switch VPN | Ruta blackhole en tabla via-vpn |
| Regla de exclusión LAN | Primera en prerouting |
| MSS | MTU - 40 (Ej: 1452 PPPoE, 1380 España, 1340 Marsella) |
| Backups | .backup + .rsc, copia externa en tormenta |
| DHCP Leases | Hacer estáticas (make-static) para que no cambien de IP |
Arquitectura de referencia
O2 / Internet
│
Fibra óptica
│
┌──────────────────────────┐
│ MitraStar GPT-2541GNAC │
│ MONOPUESTO │
│ VoIP: teléfono fijo │
└────────────┬─────────────┘
│ Ethernet / PPPoE
▼
┌──────────────────────────┐
│ hAP ax³ │
│ PPPoE + NAT + Firewall │
│ WireGuard + ProtonVPN │
│ Policy routing │
└────────────┬─────────────┘
│
192.168.88.0/24
│
├── tormenta .160 FreeBSD 14.5 (Unbound, NFSv4, Kerberos, ZFS, Samba)
├── solaris .50 FreeBSD 14.5
├── raspberry .244 Raspberry Pi 3B + Pi-Hole
└── demás dispositivos
Cadena DNS: clientes → Pi-Hole (.244) → Unbound (.160) → recursivo
Cheatsheet de Proyecto ax³. Última actualización: 2026-10-25.
FreeBSD es genial!.