MANUAL: Mikrotik, tips & tricks

Por si sirve de algo, diré que yo uso a veces unos script que me hice.
Con ellos apago y enciendo los datos. Con esto consigo que se reinicie el túnel PPPoE.
La mayor parte de las veces, obtengo nueva IP.

Lo mismo adaptándolo se pueden haces otras cosas.

Saludos.
@Yoniper, viendo el pantallazo que has adjuntado, he visto unas reglas de firewall curiosas en cuanto a temas de escaneo de puertos y tal.

Llevo tiempo que "sufro" intentos de acceso a mi router desde las ip's más variopintas. ¿Cómo lo tienes solucionado?


Saludos!!
 
Truco: Usar el servidor DNS, como servidor local para un dominio de intranet.
Con la opción de IP -> DNS -> Allow remote requests, estamos convirtiendo nuestro equipo en un servidor DNS, el cual podrá hacer las funciones de DNS caché y de servidor local. Para esto último podemos crear entradas estáticas a las IP's locales de nuestros dispositivos, resolviendolos luego vía nombre.dominio.

Por defecto, el router habrá creado una entrada que apunta a la IP del propio equipo, la cual podemos resolver con un ping a router.lan. Siguiendo con ese dominio .lan, podemos seguir añadiendo dispositivos para luego resolverlos por nombre. Ejemplo:
Código:
/ip dns static add address=192.168.88.2 name=miequipo.lan
/ip dns static add address=192.168.88.3 name=miotroequipo.lan
...
etc

Bonus: una vez tengamos nuestros equipos, todos bajo un mismo dominio (puede ser el .lan o cualquier otro que nos guste más), podemos añadir este dominio a la lista de dominios de búsqueda en el DHCP, de tal manera que nos lo entregue como parte de los datos que facilita el router cuando un cliente le solicita una IP.
Código:
/ip dhcp-server network set number=[find where gateway=192.168.88.1] domain=lan

De esta forma, una vez el servidor DHCP nos entregue una dirección, también nos entregará su dominio de búsqueda, tal que ahora podremos invocarlo con un ping simplemente al nombre del equipo: ping router deberia responder de la misma manera ahora que un ping router.lan
Me surge una duda respecto a ese tip&trick, que seguramente alguno de los compañeros sabe solventar.
El servidor DNS local que puede montarse en Mikrotik, al final como todo DNS, solo resuelve direcciones IP, pero no puertos.
¿Qué ocurre pues si tienes varios servicios corriendo en un mismo servidor (misma IP) pero con diferente puerto?
Imagino que para estos casos hay que usar un proxy inverso (Nginx, Swag o Traefik), pero siempre he visto que esto está pensado para acceder desde fuera de la red, es decir, a través de la IP pública (para eso se implementa también Hairpin NAT, para poder acceder desde dentro de la LAN con la IP pública).

Pero a mí se me ocurre otro caso, que no sé si podría resolverse con un Mikrotik.
¿Qué ocurre si quiero usar subdominios pero que sean solo accesibles desde mi LAN?
Por ejemplo:
servicio1.lan -> 192.168.1.20:8000
servicio2.lan -> 192.168.1.20:7000
servicio3.lan -> 192.168.1.20:6000

Serían accesibles desde LAN, pero desde fuera de la red no. Entiendo que de esta forma no hay que exponer ningún puerto. ¿Cómo se haría esto?
- ¿Configurando un proxy inverso pero sin abrir el puerto 80 ni el 443 en el router?
- ¿Haciendo una especie de mapeo de puertos dentro de las reglas de Hairpin NAT?

A ver si alguien se ha planteado esto alguna vez y nos cuenta como lo tiene implementado.
 
Me surge una duda respecto a ese tip&trick, que seguramente alguno de los compañeros sabe solventar.
El servidor DNS local que puede montarse en Mikrotik, al final como todo DNS, solo resuelve direcciones IP, pero no puertos.
¿Qué ocurre pues si tienes varios servicios corriendo en un mismo servidor (misma IP) pero con diferente puerto?
Imagino que para estos casos hay que usar un proxy inverso (Nginx, Swag o Traefik), pero siempre he visto que esto está pensado para acceder desde fuera de la red, es decir, a través de la IP pública (para eso se implementa también Hairpin NAT, para poder acceder desde dentro de la LAN con la IP pública).

Pero a mí se me ocurre otro caso, que no sé si podría resolverse con un Mikrotik.
¿Qué ocurre si quiero usar subdominios pero que sean solo accesibles desde mi LAN?
Por ejemplo:
servicio1.lan -> 192.168.1.20:8000
servicio2.lan -> 192.168.1.20:7000
servicio3.lan -> 192.168.1.20:6000

Serían accesibles desde LAN, pero desde fuera de la red no. Entiendo que de esta forma no hay que exponer ningún puerto. ¿Cómo se haría esto?
- ¿Configurando un proxy inverso pero sin abrir el puerto 80 ni el 443 en el router?
- ¿Haciendo una especie de mapeo de puertos dentro de las reglas de Hairpin NAT?

A ver si alguien se ha planteado esto alguna vez y nos cuenta como lo tiene implementado.
No te sigo. En un dns, resuelves un nombre de dominio y lo asocias a una IP, independientemente del puerto que uses. Es decir si router.lan apunta a la 192.168.88.1, vas a poder acceder a todos los servicios que exponga esa IP, a través de su nombre de dominio igualmente. Es decir, router.lan:8080, accederá al servicio local que corra en la IP 192.168.88.1, en el puerto 8080. Y, para resolver eso en local, no necesitas ningún nginx ni nada por el estilo, simplemente concatenas el puerto al dominio con dos puntos y listo.

Saludos!
 
No te sigo. En un dns, resuelves un nombre de dominio y lo asocias a una IP, independientemente del puerto que uses. Es decir si router.lan apunta a la 192.168.88.1, vas a poder acceder a todos los servicios que exponga esa IP, a través de su nombre de dominio igualmente. Es decir, router.lan:8080, accederá al servicio local que corra en la IP 192.168.88.1, en el puerto 8080. Y, para resolver eso en local, no necesitas ningún nginx ni nada por el estilo, simplemente concatenas el puerto al dominio con dos puntos y listo.

Saludos!
Gracias por la respuesta @pokoyo , pero no es exactamente lo que proponía.
Lo que dices es correcto, pero implica saber/conocer los puertos que usan cada uno de tus servicios. Si tienes 2, pues vale. Si tienes varios, la cosa cambia.

Mi pregunta iba enfocada a que la resolución del subdominio redireccione localmente a una IP+puerto concreto.
Si tu dominio router.lan apunta a la 192.168.88.1, lo que yo propongo es lo siguiente, por ejemplo:

servicio1.lan -> Sería equivalente a router.lan:8080
servicio2.lan-> Sería equivalente a router.lan:7000
 
No, eso que pretendes no se puede hacer, al menos a priori y que yo sepa, usando el DNS del mikrotik. Podrías crear todos los subdominios que te diera la gana apuntando a una misma IP, y que esa IP resolviera el puerto a partir del subdominio consultado. Es decir, esa IP sería un web server con un proxy reverso (apache, nginx, lo que te de la gana)

Si tienes un NAS de synology en casa, se podría hacer. O corriendo un docker con un reverse proxy en una máquina que esté siempre encendida. O montándolo en una raspberry pi... como quieras. Pero directamente en el mikrotik, no se me ocurre cómo hacerlo.

Saludos!
 
No, eso que pretendes no se puede hacer, al menos a priori y que yo sepa, usando el DNS del mikrotik. Podrías crear todos los subdominios que te diera la gana apuntando a una misma IP, y que esa IP resolviera el puerto a partir del subdominio consultado. Es decir, esa IP sería un web server con un proxy reverso (apache, nginx, lo que te de la gana)

Si tienes un NAS de synology en casa, se podría hacer. O corriendo un docker con un reverse proxy en una máquina que esté siempre encendida. O montándolo en una raspberry pi... como quieras. Pero directamente en el mikrotik, no se me ocurre cómo hacerlo.

Saludos!
Hola @pokoyo !!!
Tengo, gracias a tu inmensa ayuda, un nginx proxy mánager trabajando en docker.
He creado los certificados para duckdns, y va muy fino.

Podria cambiar el duckdns y poner el DNS del mikrotik, creando los subdominios y así quitarme duckdns ??

Mil gracias por todo !!!!!
 
Sí, claro. Usa el ddns de mikrotik y saca los certificados para ese subdominio y listo. En la V7, incluso el propio mikrotik puede hacer la petición automáticamente a let’s encrypt para pedir que haga en certificado para ese subdominio.

Saludos!
 
Sí, claro. Usa el ddns de mikrotik y saca los certificados para ese subdominio y listo. En la V7, incluso el propio mikrotik puede hacer la petición automáticamente a let’s encrypt para pedir que haga en certificado para ese subdominio.

Saludos!
Guauuuuu !!!!!
Muchísimas gracias @pokoyo !!! me voy a poner a cambiar los pocos servicios que tengo expuestos con nginx al ddns de mikrotik !!!!
Feliz tarde y mucha salud en estos tiempos !!!! :)
 
Guauuuuu !!!!!
Muchísimas gracias @pokoyo !!! me voy a poner a cambiar los pocos servicios que tengo expuestos con nginx al ddns de mikrotik !!!!
Feliz tarde y mucha salud en estos tiempos !!!! :)
Muy buenas a todos. Con esto me peleé yo, y no me funcionó el tema de los subdominios con el DDNS de MikroTik, por lo que entendí que el dominio de MikroTik no acepta subdominios. Por lo tanto, para ese caso, usé un dominio de DuckDNS, y el de MikroTik lo uso para mí server principal.

Puedes probarlo simplemente haciendo ping a subdominio.serial.sn.mynetname.net y verás que no responde. En cambio si haces ping a subdominio.xxxx.duckdns.org verás que si responde.

Es como si cada dominio que nos da Mikrotik ya fuera un subdominio del dominio sn.mynetname.net, y claro lo que queremos es un subdominio de un subdominio... Creo que por eso no me funcionó

Saludos!!
 
Muy buenas a todos. Con esto me peleé yo, y no me funcionó el tema de los subdominios con el DDNS de MikroTik, por lo que entendí que el dominio de MikroTik no acepta subdominios. Por lo tanto, para ese caso, usé un dominio de DuckDNS, y el de MikroTik lo uso para mí server principal.

Puedes probarlo simplemente haciendo ping a subdominio.serial.sn.mynetname.net y verás que no responde. En cambio si haces ping a subdominio.xxxx.duckdns.org verás que si responde.

Es como si cada dominio que nos da Mikrotik ya fuera un subdominio del dominio sn.mynetname.net, y claro lo que queremos es un subdominio de un subdominio... Creo que por eso no me funcionó

Saludos!!
Es cierto, lo he estado intentando ahora y no funciona a través de nginx.
 
Es cierto, lo he estado intentando ahora y no funciona a través de nginx.
Puedes utilizar el dominio de MikroTik íntegro (sin subdominios, es decir, tuserial.sn.mynetnamet.net) y Nginx te lo gestionará bien con certificado SSL. Pero solo te valdrá para un servicio web. Si quieres exponer más servicios web, necesitas otro DDNS que si permita subdominios, como DuckDNS, o cualquier otro de pago.

Saludos!
 
Puedes utilizar el dominio de MikroTik íntegro (sin subdominios, es decir, tuserial.sn.mynetnamet.net) y Nginx te lo gestionará bien con certificado SSL. Pero solo te valdrá para un servicio web. Si quieres exponer más servicios web, necesitas otro DDNS que si permita subdominios, como DuckDNS, o cualquier otro de pago.

Saludos!
Comprad un dominio propio, que cuesta dos duros, y los configuráis como queráis. Tenéis dominios por menos de 20€ al año.

Saludos!
 
Buenas, os comparto un tip&trick que me funciona y me gusta mucho:

Recibir un aviso por mail cuando un nuevo cliente recibe IP dinámica por DHCP
Es muy útil para detectar conexiones nuevas, pero las IPs de equipos conocidos, lo suyo es cambiarlas a estáticas
Lo he sacado de:



1. Configurar e-mail

/tool e-mail set address=usuario.servidor.com from=nombre@dominio.com password=tucontraseña port=465 start-tls=tls-only user=nombre@dominio.com


2. Configurar alerta
Esto debería ir en la caja de script del servidor dhcp en el que quieres que se ejecute - no en la pestaña de alertas.



:local recipient "destinatario@correo.com"
/ip dhcp-server lease
:if (($leaseBound=1) && ([/ip dhcp-server lease find where dynamic mac-address=$leaseActMAC]!="")) do {
:do {
:tool e-mail send to=$recipient subject="NUEVA CONEXION [MAC: $leaseActMAC]" body="La siguiente dirección MAC [$leaseActMAC] recibió la dirección IP [$leaseActIP] del servidor DCHP del router Mikrotik [$leaseServerName]"
:log info "Envío de alerta DHCP para la MAC $leaseActMAC"
} on-error={:log error "Error al enviar alerta por correo a $recipient"}


Espero que os funcione y os mole!!
 
Buenas, os comparto un tip&trick que me funciona y me gusta mucho:

Recibir un aviso por mail cuando un nuevo cliente recibe IP dinámica por DHCP
Es muy útil para detectar conexiones nuevas, pero las IPs de equipos conocidos, lo suyo es cambiarlas a estáticas
Lo he sacado de:



1. Configurar e-mail

/tool e-mail set address=usuario.servidor.com from=nombre@dominio.com password=tucontraseña port=465 start-tls=tls-only user=nombre@dominio.com


2. Configurar alerta
Esto debería ir en la caja de script del servidor dhcp en el que quieres que se ejecute - no en la pestaña de alertas.



:local recipient "destinatario@correo.com"
/ip dhcp-server lease
:if (($leaseBound=1) && ([/ip dhcp-server lease find where dynamic mac-address=$leaseActMAC]!="")) do {
:do {
:tool e-mail send to=$recipient subject="NUEVA CONEXION [MAC: $leaseActMAC]" body="La siguiente dirección MAC [$leaseActMAC] recibió la dirección IP [$leaseActIP] del servidor DCHP del router Mikrotik [$leaseServerName]"
:log info "Envío de alerta DHCP para la MAC $leaseActMAC"
} on-error={:log error "Error al enviar alerta por correo a $recipient"}


Espero que os funcione y os mole!!
Listo, movido a la primera página, siguiendo el formato del resto de tips&tricks.

Gracias por el aporte.

Saludos!
 
Buenas, os comparto un tip&trick que me funciona y me gusta mucho:

Recibir un aviso por mail cuando un nuevo cliente recibe IP dinámica por DHCP
Es muy útil para detectar conexiones nuevas, pero las IPs de equipos conocidos, lo suyo es cambiarlas a estáticas
Lo he sacado de:



1. Configurar e-mail

/tool e-mail set address=usuario.servidor.com from=nombre@dominio.com password=tucontraseña port=465 start-tls=tls-only user=nombre@dominio.com


2. Configurar alerta
Esto debería ir en la caja de script del servidor dhcp en el que quieres que se ejecute - no en la pestaña de alertas.



:local recipient "destinatario@correo.com"
/ip dhcp-server lease
:if (($leaseBound=1) && ([/ip dhcp-server lease find where dynamic mac-address=$leaseActMAC]!="")) do {
:do {
:tool e-mail send to=$recipient subject="NUEVA CONEXION [MAC: $leaseActMAC]" body="La siguiente dirección MAC [$leaseActMAC] recibió la dirección IP [$leaseActIP] del servidor DCHP del router Mikrotik [$leaseServerName]"
:log info "Envío de alerta DHCP para la MAC $leaseActMAC"
} on-error={:log error "Error al enviar alerta por correo a $recipient"}


Espero que os funcione y os mole!!
Ese script ya lo tenía en producción y está genial. Gracias a él me envió un aviso de que una MAC extraña se conectaba a mi DHCP por las mañanas, así que pude bloquearla.

Por cierto supongo que ya lo conocéis, pero aparte de "tool e-mail" también se puede utilizar Telegram para recibir avisos de tu router:


Quedan así de chulos:

bWzZDYdTZT.png


S@lu2.
 
Última edición:
Ese script ya lo tenía en producción y está genial. Gracias a él me envió un aviso de que una MAC extraña se conectaba a mi DHCP por las mañanas, así que pude bloquearla.

Por cierto supongo que ya lo conocéis, pero aparte de "tool e-mail" también se puede utilizar Telegram para recibir avisos de tu router:


Quedan así de chulos:

Ver el adjunto 84663

S@lu2.

Aquí doy una solución para telegram,


lo malo es que si usan ip fijas no te salta el aviso a no ser que configures el netwatch

Saludos
 
Ese script ya lo tenía en producción y está genial. Gracias a él me envió un aviso de que una MAC extraña se conectaba a mi DHCP por las mañanas, así que pude bloquearla.

Por cierto supongo que ya lo conocéis, pero aparte de "tool e-mail" también se puede utilizar Telegram para recibir avisos de tu router:


Quedan así de chulos:

Ver el adjunto 84663

S@lu2.
Buenas!!

¿Cómo pones emojis en los mensajes de Telegram? Jeje
 
Buenas!!

¿Cómo pones emojis en los mensajes de Telegram? Jeje
Hola!

Telegram admite caracteres en Unicode/UTF8 hexadecimal, los puedes ver aquí:
https://www.utf8-chartable.de/unicode-utf8-table.pl

Selecciona la opción de Emoticons:

ZsTHMAAGaP.png


Un ejemplo dentro de un script sería:

Bash:
# START Send Telegram Module
    :local MessageText "\F0\9F\9F\A0 MikroTik: IKEv2 tunnel is Down";
    :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
    $SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module

Donde \F0\9F\9F\A0 sería un círculo de color rojo.

S@lu2.
 
Muchas gracias @diamuxin por el tip. La verdad es que están muy chulas las notificaciones por Telegram.

Por cierto, otro tip que acabo de probar y muy chulo, seria indicar en el script de envio de mensaje que se quiere utilizar markdownv2, de esta forma:

Código:
/tool fetch url="https://api.telegram.org/bot$botid/sendMessage?chat_id=$chatid&parse_mode=MarkdownV2&text=$telegramMessage" keep-result=no

Y de esta forma puedes formatear el texto con negrita, cursiva, urls, menciones... tal y cómo se describe aquí:

 
Muchas gracias @diamuxin por el tip. La verdad es que están muy chulas las notificaciones por Telegram.

Por cierto, otro tip que acabo de probar y muy chulo, seria indicar en el script de envio de mensaje que se quiere utilizar markdownv2, de esta forma:

Código:
/tool fetch url="https://api.telegram.org/bot$botid/sendMessage?chat_id=$chatid&parse_mode=MarkdownV2&text=$telegramMessage" keep-result=no

Y de esta forma puedes formatear el texto con negrita, cursiva, urls, menciones... tal y cómo se describe aquí:

Muy interesante esa opción! Cuando tenga un ratito lo voy a probar, gracias!

S@lu2.
 
Arriba