Tech-nico.com

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

Salir de la versión móvil