Mikrotik y Linux. Rutina y Automatización

Me presento, mi nombre es Andrey.

La tarea inicial era esta: crear cientos de configuraciones para Mikrotik, generar un certificado en cada ovpn, luego cargar configuraciones a cientos de configuraciones de Mikrotik, así como certificados y una clave.

La contraseña para cada certificado es única. Crear cientos de configuraciones con tus propias manos no tiene sentido, y mañana te dirán que hagas nuevas o te gustaría completar otros cambios en Mikrotik.

Lo que quería lograr:

  1. crear automáticamente muchos scripts;
  2. enviarlos automáticamente al equipo que necesito;
  3. para asegurarse de que funcionaron sin errores o para saber que la configuración no se ejecutó correctamente.

imagen

Usando Bash y FTP, todo funcionó.

Poco de teoría
En RouterOS, puede ejecutar scripts automáticamente (su archivo de script debería verse como name.auto.rsc). Después de que el archivo se cargue a través de FTP en el enrutador, se ejecutará automáticamente, como con el comando '/ import' (este método solo funciona con FTP).
Tan pronto como se descarga el archivo, se ejecuta automáticamente. La información sobre el éxito de la ejecución del comando se registra en el nombre .auto.log

AWK: lenguaje de secuencias de comandos tipo C para el análisis y el procesamiento línea por línea de una secuencia de entrada (por ejemplo, un archivo de texto) de acuerdo con patrones específicos (expresiones regulares). Se puede usar en scripts de línea de comandos.

Expect es una herramienta de prueba y automatización de Unix escrita por Don Libes como una extensión del lenguaje de script Tcl para aplicaciones interactivas como telnet, ftp, passwd, fsck, rlogin, tip, ssh y otras.


Para empezar, hice 3 archivos:

  1. El archivo List.txt en él registró el nombre de las conexiones OVPN (en mi caso, el nombre de la tienda) y la contraseña de la clave (separadas por pestañas);
  2. sh1.sh: archivo bash con el comando de análisis línea por línea en list.txt + pipeline;
  3. sh2.sh: un archivo bash que, utilizando Echo y variables, crea un archivo de configuración y escribe nuestra configuración en él.

Y entonces:

vi list.txt gamazin1 pass1 gamazin2 pass2 gamazin3 pass3 

 vi sh1.sh #!/bin/bash awk '{print "./sh2.sh "$1 " "$2}' ./list.txt | /bin/bash sudo chmod +x sh1.sh 

 vi sh2.sh #!/bin/bash echo /certificate > rsc/$1.auto.rsc echo import file-name=$1.crt passphrase=$2 >> rsc/$1.auto.rsc echo import file-name=$1.key passphrase=$2 >> rsc/$1.auto.rsc echo import file-name=ca.crt passphrase=$2 >> rsc/$1.auto.rsc echo /interface ovpn-client >> rsc/$1.auto.rsc echo add certificate=$1.crt_0 connect-to=10.10.10.10 name=$1_ovpn port=1111 user=$1 profile=default auth=sha1 cipher=blowfish128 >> rsc/$1.auto.rsc #      ehco. sudo ./sh1.sh 

Una advertencia!

$ 1.crt y $ 1.key los crearon de antemano utilizando el mismo list.txt, debido a esto, el nombre del archivo también es el nombre de la tienda.

Creó cien configuraciones. Ahora necesitamos enviarlos usando el mismo AWK y Expect + FTP.

Crea 4 archivos:

  1. Archivo List2.txt: en él almacenamos datos IP de Mikrotik | Iniciar sesión | Contraseña El nombre de la tienda. Separado por pestaña.
  2. newsh1.sh: archivo bash con un comando de análisis línea por línea en list2.txt + pipeline
  3. newsh2.sh: envía nuestros deseos a través de FTP utilizando el paquete Expect, que responde a las solicitudes de la consola.
  4. $ 1.auto.rsc: el archivo de configuración en mi caso, se crearon a partir de la variable $ 1, que era el nombre de la tienda en el script anterior. Ejemplo gamazin1.auto.rsc.

 vi list2.txt 192.168.1.1 admin password1 gamazin1 192.168.2.1 admin password2 gamazin2 192.168.3.1 admin password3 gamazin3 #  1  list.txt        

 vi newsh1.sh #!/bin/bash awk '{print "./newsh2.sh "$1 " "$2 " "$3 " "$4}' ./list2.txt | /bin/bash sudo chmod +x newsh1.sh 

 Sudo apt-get install expect vi newsh2.sh #!/bin/bash Mikrotik=$(expect -c " set timeout 3 spawn ftp $1 expect \"Name*\" send \"$2\n\" expect \"?assword:\" send \"$3\n\" expect \"ftp>\" send \"put $4.crt\n\" expect \"ftp>\" send \"put $4.key\n\" expect \"ftp>\" send \"put ca.crt\n\" expect \"ftp>\" send \"put $4.auto.rsc\n\" expect \"ftp>\" send \"bye\n\" ") sudo ./newsh1.sh 

Nota


Primero, enviamos los certificados con la clave, y luego solo la configuración (si lo hace en el orden inverso, comenzará a jurar que no existen tales certificados).

Configs y certificados esparcidos como pasteles calientes. Debido al nombre .auto.rsc a través de FTP, Mikrotik los introdujo automáticamente y se aplicó nuestra configuración.

Queremos saber que en todas partes todo es super, usando la configuración anterior cambiamos 1 línea.

ponerse get
 send \"get $4.auto.log\n\" #  .log    .rsc 


Descargamos todos los archivos a casa y los clasificamos, donde 0 bytes del tamaño del archivo tienen problemas con Mikrotik. Por el nombre del archivo, puede encontrar su IP en nuestro archivo list2.txt. Y en una buena versión, al abrir el archivo, puede ver "Archivo de script cargado y ejecutado con éxito".

También puede escribir scripts para estos archivos, pero solo tuve que ordenar los archivos por peso.

También escribí otro script, y después de todas estas acciones que cierran FTP y viceversa, se abre a través de SSH. Acabo de cambiar FTP a SSH para ...

Jugamos con FTP
 /ip service set ftp disabled=yes #  SSH    #      /file remove $4.auto.rsc 


Traté de empujar todo a la vez en 1 configuración, pero el archivo eliminado al final del comando no dio resultado; no pudo borrar el archivo del que recibí este comando. Todavía había matices.

Y al final ... ¡felicidad! Puede administrar listas individuales de Mikrotik o todas a la vez, como lo desee. Ahora, al abrir FTP y cerrar, puede enviar comandos y asegurarse de que se completen. Pero mi opinión es más conveniente que FTP, SSH no se cayó a mitad de camino , ya que estará seguro de que todo salió bien al buscar en la carpeta de registros.

En este artículo mostré las herramientas, pero puedes pensar en cómo usarlas tú mismo ...
Hice todo en Ubuntu 16.04.

Sobre auto.rsc en Mikrotik
Awk
Esperar

Source: https://habr.com/ru/post/480404/


All Articles