piątek, 13 maja 2016

Automatyczna archiwizacja konfiguracji mikrotików z wielu lokalizacji

Mamy lokalizację główną + lokalizacje zdalne na lokalizacjach zdalnych mamy mikrotiki, które zarządzają całym bałaganem sieciowym. Chcemy mieć pewność, ze nasza konfiguracja w razie awarii, lub jakieś zmiany będzie do odzyskania. W takim razie robimy automatyczny backup konfiguracji mikrotików w dowolnej ilości lokalizacji.

W pierwszej kolejności konfigurujemy mikrotiki, żeby codziennie robiły backup swojej konfiguracji. Logujemy się do mikrotika  z poziomu wiersza poleceń wykonujemy następujące kroki.

Dodajemy do scheludera zadanie wykonania backupu o nazwie LOK1.backup (każą linijkę wklejamy oddzielnie):

/system scheduler
add name="backup" on-event="system backup save name=LOK1.backup" \
start-date=jan/01/1970 start-time=00:00:00 interval=10h comment="" \
disabled=no

Wykonujemy pierwszy backup ręcznie:

/system backup save name=LOK1.backup

Sprawdzamy, czy mamy serwis ftp aktywny (brak X znaczy że jest ok, w przeciwnym razie musimy go odblokwać):

/ip service print
Flags: X - disabled, I - invalid 
 #   NAME      PORT ADDRESS                                        CERTIFICATE   
 0   telnet      23
 1   ftp         21
 2   www         80
 3   ssh         22
 4 X www-ssl    443                                                none          
 5 X api       8728
 6   winbox    8291
 7   api-ssl   8729                                                none        

Dodajemy Grupę, politykę i użytkownika backup z hasłem i zezwalamy mu się łączyć z naszego adresu IP lub sieci (192.168.0.13/32):

/user group
add name="ftp" policy=ftp,!local,!telnet,ssh,!reboot,read,write,!policy,!test,!winbox,!password,web,!sniff,sensitive
/user
add address=192.168.0.13/32 comment="FTP backup" disabled=no group=ftp name="backup"
set [find name="backup"] password="Backup_Password"


Po stronie serwera, na który chcemy wykonać backup tworzymy plik z adresami ip i nazwą lokalizacji:

----------------------------------mikrotik.txt ----------------------------------
121.121.121.121 LOK1
122.122.122.122 LOK2
..
..
..
130.130.130.130 LOK
EOF
-----------------------------------END-OF-FILE---------------------------------

Pamiętajmy, żeby po EOF już nie było pustej linii. Pierwsza kolumna jest adresami ip naszych mikrotików, a druga nazwami lokalizacji, a także nazwami katalogów, gdzie backup trafi,oraz nazwami plików z backupem znajdujących się na mikrotikach. Następnie w tym samym katalogu (domyślnie jest to /backup/mikrotik. jak będzie inny wystarczy zmienić ścieżkę w zmiennej) umieszczamy poniższy skrypt i nadajemy mu prawa do wykonywania chmod +x nazwa_skryptu.sh


#!/bin/bash
echo "##########################################################################"
echo "##########################################################################"
echo "########                                                          ########"
echo "########                  MIKROTIK BACKUP SCRIPT                  ########"
echo "########                           V1.0                           ########"
echo "########                        13.05.2015                        ########"
echo "########                   by: Grzegorz Zalewski                  ########"
echo "########          http://informatycznezycie.blogspot.com          ########"
echo "########                                                          ########"
echo "##########################################################################"
echo "##########################################################################"

#Zmienne
USER=backup
PASSW=Backup_Password
data=`date +%F`
date=`date +%Y-%m-%d_%H_%M`
dir=/backup/mikrotik

#utwórz katalog z datą
cd $dir
mkdir $data
cd $dir/$data


#utwórz plik lokalizacji z pliku mikrotik.txt
awk '{print $2}' < $dir/mikrotik.txt > $dir/lokalizacja.tmp

#utwórz katalogi w pętli z pliku oddzialów
while read line
do
mkdir $line
#plik z jakiego ma petla korzytstać
done <$dir/lokalizacja.tmp

#połącz sie z oddziałami i pobierz pliki pętla
while read line
do
#wyciągnij pojedynczą linie z pliku mikrotik
echo $line > line.tmp
#utworz plik z adresem ip
awk '{print $1}' < line.tmp > ip.tmp
#utworz plik z nazwa lokalizacji
awk '{print $2}' < line.tmp > lok.tmp
#stwórz zmienne
ip=$(< ip.tmp)
odd=$(< lok.tmp)

#skrypt ftp
#passive - niektóre mikrotiki w trybie aktywnym nie listuja katalogow-wymuszamy tryb passive
#get * - pobierz plik i zapisz go w danej lokalizacji
ftp -v -n $ip >> $dir/$data.transfer.log <<SCRIPT
user $USER $PASSW
binary
passive
dir
get $lok.backup $dir/$data/$lok/$lok.backup.$date
quit
SCRIPT
#plik z jakiego ma petla korzytstać
done < $dir/mikrotik.txt

#usuń pliki tymczasowe
cd $dir
rm *.tmp
cd $dir/$data
rm  *.tmp

Jeśli wszystko wykonaliśmy poprawnie, to w katalogu (w naszym przypadku /backup/mikrotik)
powinien powstać katalog DATY np.: 2016-05-13 a w nim katalogi LOK1, LOK2, LOK3 itp, Wewnątrz powinny znajdować się pliki z backupem w nazwie zgodne z lokalizacja i ze znacznikiem czasowym ściągnięcia w nazwie. Jeśli plików brakuje, to w pierwszej kolejności sprawdzamy plik logu i szukamy informacji, co się stało. Następnie najlepiej spróbować połączyć się ręcznie z linii komend ftpem do mikrotika. Jeśli to nie pomoże należny jeszcze po stronie mikrotika sprawdzić:
- czy jest włączony conntrac i reguły do niego (established,related) 
- czy"Service ports" FTP jest zaznaczony
- czy pomiędzy klientem i serwerem jest stosowany jakiś NAT, albo szyfrowane połączenie

Gdy ostatecznie dopniemy kwestie konfiguracyjne i wszystko zadziała jak należny wystarczy dodać skrypt do crona. Ot cała robota.

Oczywiście skrypt można wykorzystać nie tylko do archiwizacji backupu konfiguracji mikrotików. Po niewielkich modyfikacjach może mieć różnorakie zastosowanie.

Brak komentarzy:

Prześlij komentarz