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 con ProtonVPN, 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 e interfaces
- Rutas
- DHCP y PPPoE
- DNS
- WireGuard
- Diagnóstico y monitorización
- Cliente — comandos útiles
- ~/.ssh/config (cliente)
- Comandos de rescate
- 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-15-produccion # Backup con contraseña (recomendado si sale del router) /system backup save name=ax3-2026-10-15-produccion password="clave" # Export legible (.rsc, sin contraseñas) /export compact file=ax3-2026-10-15-produccion # Export con datos sensibles (¡cuidado con dónde se guarda!) /export file=ax3-2026-10-15-produccion show-sensitive # Listar archivos existentes /file print # Filtrar por nombre /file print where name~"ax3-2026" # Restaurar un backup binario /system backup load name=ax3-2026-10-15-produccion.backup # Reiniciar el router /system reboot
ax3-AAAA-MM-DD-HHMM-<estado>.ext. Ejemplo:
ax3-2026-10-15-1730-pre-monopuesto.backup. 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 detail
/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
/ip firewall filter add chain=forward in-interface-list=LAN out-interface=proton-vpn \
action=accept comment="Permitir LAN a VPN"
# Colocar una regla antes de otra
/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"]
# Activar/desactivar temporalmente el log de una regla
/ip firewall filter set [find comment~"Drop todo lo demás"] log=yes log-prefix="DROP: "
# 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
# 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"
# Mover la regla de exclusión al principio
/ip firewall mangle move [find comment~"No marcar"] \
destination=[find comment~"Marcar conexin de xiaomi"]
# Marcar la conexión de un dispositivo
/ip firewall mangle add chain=prerouting src-address=192.168.88.51 in-interface=bridge \
action=mark-connection new-connection-mark=solaris-vpn passthrough=yes \
comment="Marcar conexión de solaris"
# Enrutar por VPN según la marca de conexión
/ip firewall mangle add chain=prerouting connection-mark=solaris-vpn \
action=mark-routing new-routing-mark=via-vpn passthrough=no \
comment="Enrutar solaris por VPN"
# MSS para PPPoE (MTU 1492)
/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"
# MSS para túnel WireGuard (MTU 1420)
/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 WireGuard"
mark-connection o mark-routing.
Si no, el tráfico hacia Pi-Hole, Unbound o cualquier host local se marcará con
via-vpn y se enviará por el túnel, rompiendo el DNS sin motivo aparente.
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 (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"
# 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"
# Resetear contadores
/ip firewall nat reset-counters 2
Listas de direcciones e interfaces
# Ver lista de direcciones
/ip firewall address-list print
# Añadir red a la lista "lan-directa"
/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=192.168.1.0/24 \
comment="LAN del HGU O2"
/ip firewall address-list add list=lan-directa address=10.2.0.0/24 \
comment="Red interna ProtonVPN"
# Ver miembros de listas de interfaces
/interface list member print
# Añadir interfaz a la lista WAN
/interface list member add list=WAN interface=proton-vpn
Rutas
# Ver todas las rutas
/ip route print
# Ver rutas de la tabla via-vpn
/ip route print where routing-table=via-vpn
# Ver solo la ruta por defecto
/ip route print where dst-address=0.0.0.0/0
# Salida por ProtonVPN
/ip route add dst-address=0.0.0.0/0 gateway=proton-vpn routing-table=via-vpn \
distance=1 comment="Salida por ProtonVPN"
# Kill switch: blackhole si el túnel cae
/ip route add dst-address=0.0.0.0/0 type=blackhole routing-table=via-vpn \
distance=2 comment="Kill switch"
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 # Ver pool DHCP /ip pool print # Cambiar rango del pool /ip pool set default-dhcp ranges=192.168.88.10-192.168.88.254 # Ver cliente PPPoE /interface pppoe-client print detail # Monitorizar la sesión PPPoE /interface pppoe-client monitor [find] once # 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 tiene
add-default-route=yes, RouterOS instalará una ruta
0.0.0.0/0 via 192.168.1.1 que reintroduce el NAT del HGU. Debe estar
siempre en no.
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: si se
activa, se salta Pi-Hole y Unbound.
WireGuard
# Ver interfaces WireGuard /interface wireguard print # Ver peers /interface wireguard peers print # Ver detalle (endpoint, allowed IPs, última conexión) /interface wireguard peers print detail # Ping por el túnel /ping 10.2.0.1 count=3 interface=proton-vpn
Diagnóstico y monitorización
# Ver interfaces activas y sus MTU /interface print # Ver direcciones IP asignadas /ip address print # Ver conexiones activas con marca VPN /ip firewall connection print where connection-mark~"vpn" # Ver conexiones de una IP concreta /ip firewall connection print where src-address~"192.168.88.51" # Ver conexiones al Pi-Hole /ip firewall connection print where dst-address~"192.168.88.244" # Ver logs de PPPoE /log print where topics~"pppoe" # Ver logs de firewall con prefijo concreto /log print where message~"DROP-OTROS" # Ver contadores de mangle /ip firewall mangle print stats # 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 # Debug de conexión SSH ssh -v -i ~/.ssh/mikrotik_axe carlos@192.168.88.1 # Descargar backups scp carlos@192.168.88.1:/ax3-2026-10-15-produccion.backup . scp carlos@192.168.88.1:/ax3-2026-10-15-produccion.rsc . # Ver IP pública actual curl -s ifconfig.me # 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:/
Comandos de rescate
# Ver reglas de mangle en orden (lo primero al depurar policy routing) /ip firewall mangle print # Ver si las reglas tienen tráfico (contadores) /ip firewall mangle print stats # Ver si hay rutas en la tabla via-vpn /ip route print where routing-table=via-vpn # Ver el peer WireGuard activo /interface wireguard peers print # Resetear una interfaz /interface wireguard disable proton-vpn /interface wireguard enable proton-vpn # Resetear conexiones de una IP (útil tras cambiar política) /ip firewall connection remove [find src-address~"192.168.88.51"] # Ver qué cae en el drop final /ip firewall filter set [find comment~"Drop todo lo demás"] log=yes /log print where message~"DROP" /ip firewall filter set [find comment~"Drop todo lo demás"] log=no
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 | 1452 para PPPoE, 1380 para túnel |
| Backups | .backup + .rsc, copia externa en tormenta |
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 .51 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-15.
FreeBSD es genial!.