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.
Índice
- SSH y acceso remoto
- Usuarios
- Backups
- Firewall — Filter
- Firewall — Mangle (Policy Routing)
- Firewall — NAT
- Listas de direcciones (Address Lists)
- Rutas y Tablas de Enrutamiento
- DHCP y PPPoE
- DNS
- WireGuard
- Diagnóstico y Rescate
- Cliente — comandos útiles
- ~/.ssh/config (cliente)
- Buenas prácticas aplicadas
- Arquitectura de referencia
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:..."]
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
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"
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"
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
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
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!.



