Mikrotik script para recorrer lista de secrets pppoe y reemplazar IP’s

PPPoE Secrets: Migrar de IP privada “fija” a IP publica “fija”
Algo muy puntual que tuve que hacer cuando migre de IP Privadas a IP Publicas fue mantener la terminación de las IP de los clientes PPPoE de mi Red. Se preguntarán.. para que?. Bueno en mi caso tengo un sistema de gestión que maneja el servidor usando el API mediante PHP y Mysql. Entonces me tiene que quedar sincronizadas las IP del Mysql con las del Mikrotik. Por otro lado, siempre fui de la idea de que todos los secrets tengan una IP fija asignada, ya que cuando me reportan un problema, de virus, ataque o violación de derechos de autor, puedo identificar con velocidad de quien se trata.

Ejemplo 192.168.100.8     por 201.250.45.8

Para ello, elabore un script que me recorra la lista y reemplace lo que quiero.

El Script es el siguiente:

       :local BUSCA "192.168.100";
       :local REMPL "201.250.45";
       # recorro todos los secrets
       :foreach i in=[/ppp secret find] do={
       # guardo remote IP
          :local tmpIP [/ppp secret get $i remote-address];
       # guardo la primera parte
          :local ipfirst [pick $tmpIP 0 11];
       #guardo la ultima parte
          :local iplast [pick $tmpIP 12 15];
       #busco los secrets que tienen el rango de Ip a reemplazar
            :if ($ipfirst=$BUSCA) do={
                  :log info ($REMPL .".".  $iplast);
                 /ppp secret set $i remote-address="$REMPL.$iplast"
            }
       }

Solo tienes que editar las primeras 2 variables “BUSCA” por la IP actual que vas a buscar, y “REMPL” por la IP nueva que quieres asignar a cada secret. Si tienes 4 clases C tendras que ejecutar el script 4 veces.

Para importarlo hay que copiar y pegar lo siguiente en la consola:

sys scr add name=recorro_ppp_remoteAddress policy=\
    ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api source=":local\
    \_BUSCA \"192.168.100\";\r\
    \n:local REMPL \"201.250.45\";\r\
    \n# recorro todos los secrets\r\
    \n:foreach i in=[/ppp secret find] do={\r\
    \n# guardo remote IP\r\
    \n   :local tmpIP [/ppp secret get \$i remote-address]; \r\
    \n# guardo la primera parte\r\
    \n   :local ipfirst [pick \$tmpIP 0 11];\r\
    \n#guardo la ultima parte\r\
    \n   :local iplast [pick \$tmpIP 12 15];\r\
    \n#busco los secrets que tienen el rango de Ip a reemplazar\r\
    \n     :if (\$ipfirst=\$BUSCA) do={ \r\
    \n           :log info (\$REMPL .\".\".  \$iplast);\r\
    \n          /ppp secret set \$i remote-address=\"\$REMPL.\$iplast\"\r\
    \n     }\r\
    \n}"

Salutes

_________
Nicolas Daitsch
tech-nico.com

4 Comentarios

  1. Hola buenas , te hago una consulta. Creo que el script ya no esta en funcionamiento en las nuevas versiones. Cual seria el problema ?

  2. Miguel, si posiblemente, nunca mas lo tuve que utilizar, pero si vas probando paso a paso en la Terminal te va llegar a la linea que da error. O bien, ir modificando el script, e imprimiendo variables en el log para saber hasta donde esta llegando y donde no. Es muy comun que cambien las sintaxis de algunos comandos y los scripts terminen muriendo. Saludos.

  3. Gracias nico , el problema que yo tenia era muy tonto , yo no tenia IP’s fija en los secrest jeje , asi que cambie para que recorra las active Connections y asi mandarlas al temip y setear las ip fijas , capas hice mal , pero es lo que salio
    Disculpas por los orrores hortograficos .

Deja un comentario