Hoy me propuse algo simple, pero necesario en muchos escenarios, mejorar la automatización de esas tareas que nos generan más de un problema, una de ellas es la de agregar nuestra IP externa a un lista en el firewall de Mikrotik, esto para hacer un correcto uso del dstnat ya que si redireccionamos toda la red aun solo equipo en el puerto que queremos no tiene gracia ¿cierto?, además es fácil o relativamente fácil tener un script programado por tiempo que agregue dicha IP externa a una lista borrando constantemente la entrada anterior, sería algo así (el script):
[learn_more caption=»Código»]:local numeroipext [/ip firewall address-list find comment=»ip_ext»];
/ip firewall address-list remove number=$numeroipext;
:local test [ /ip address get [/ip address find interface=Internet] address ];
:local ip [:pick $test 0 [:find $test «/»]]; :put $ip;
[/learn_more]/ip firewall address-list add list=»IP Externa» address=$ip comment=»ip_ext»;[/quote]
Eso asumiendo que la interfaz ethernet o PPoE se llama «Internet» que original !!! Chan!
El problema que «puede» pasar es que si por alguna razón requieres de una comunicación muy, pero muy fluida y seteas cada 5 minutos el cron o Scheduler de Mikrotik tendrías un pequeño momento de desconexión, entonces que tal si hacemos mas interesante el script y le agregamos ese querido if que tanto nos gusta y que finalmente evita hacer la tarea de forma repetitiva y sin sentido, convirtiendo el proceso en algo más inteligente, pues ahora detectará si la IP externa actual es distinta de la que tenemos en la lista, reemplazando su dirección sólo cuando esta sea diferente. Manos a la Obra!
:local test [ /ip address get [/ip address find interface=Internet] address ];
:local ipvieja [ /ip firewall address-list get [/ip firewall address-list find comment=»ip_ext»] address ];
:local ip [:pick $test 0 [:find $test «/»]]; :put $ip;
#Debug para Saber IP
#:log info («IP_Actual = $ip»)
#:log info («IP_Vieja = $ipvieja»)
:if ($ip != $ipvieja) do={
:local numeroipext [/ip firewall address-list find comment=»ip_ext»];
/ip firewall address-list remove number=$numeroipext;
:local test [ /ip address get [/ip address find interface=Internet] address ];
:local ip [:pick $test 0 [:find $test «/»]]; :put $ip;
/ip firewall address-list add list=»IP Externa» address=$ip comment=»ip_ext»;
} else={
# Debug para saber si se realiza cambio
# :log info («No Cambia el Address-List IP Externa»)
}
[/learn_more] Y tarannn!! podemos setear incluso intervalos muy cortos como 1 minuto y simplemente se ejecutará al ser necesario :D, no se si está demás decir que para ver más info del script en el log es necesario remover los # del código que aparece antes de los :log info …Eso sería todo