diff --git a/pages/08.mikrotik-2/docs.md b/pages/08.mikrotik-2/docs.md index e514aae..65cf123 100644 --- a/pages/08.mikrotik-2/docs.md +++ b/pages/08.mikrotik-2/docs.md @@ -1,54 +1,75 @@ --- -title: 'mikrotik DDNS 2' +title: 'mikrotik Configuration Autobackup' --- #### 1. Script for DDNS -Create the following script with name `TanDNS` and the following permissions `write, test, read, policy` +Create the following script with name `TanBack` and the following permissions `ftp,read,write,policy,test,sensitive` ``` # Tanshu automatic DNS updates - -# User account info -:local user "user" -:local pass "123456" - -# Set the hostname or label of network to be updated. -:local host "home.tanshu.com" - -# Change to the name of interface that gets the changing IP address -:local inetinterface "pppoe-out1" - -#- No more changes need ------------------------------------------------------------- -:global previousIP; - -:if ([/interface get $inetinterface value-name=running]) do={ -# Get the current IP on the interface - :local currentIP [/ip address get [find interface="$inetinterface" disabled=no] address]; - -# Strip the net mask off the IP address - :for i from=( [:len $currentIP] - 1) to=0 do={ - :if ( [:pick $currentIP $i] = "/") do={ - :set currentIP [:pick $currentIP 0 $i] - } - } - - :if ($currentIP != $previousIP) do={ - :log info "TanDNS: Update needed" - :set previousIP $currentIP - -# The update URL. Note the "\3F" is hex for question mark (?). Required since ? is a special character in commands. - :local url "http://bifrost.tanshu.com/update\3Fdomain=$host" - :log info "TanDNS: Sending update for $host" - /tool fetch url=$url user=$user password=$pass mode=http keep-result=no - :log info "TanDNS: Host $host updated on TanDNS with IP $currentIP" - } else={ - :log info "TanDNS: Previous IP $previousIP and current IP equal, no update need" - } -} else={ - :log info "TanDNS: $inetinterface is not currently running, so therefore will not update." -} +:local date [/system clock get date]; +:local day [:pick $date 4 6]; +:local month [:pick $date 0 3]; +:if ([$month] = "jan") do={ :set month 01 }; +:if ([$month] = "feb") do={ :set month 02 }; +:if ([$month] = "mar") do={ :set month 03 }; +:if ([$month] = "apr") do={ :set month 04 }; +:if ([$month] = "may") do={ :set month 05 }; +:if ([$month] = "jun") do={ :set month 06 }; +:if ([$month] = "jul") do={ :set month 07 }; +:if ([$month] = "aug") do={ :set month 08 }; +:if ([$month] = "sep") do={ :set month 09 }; +:if ([$month] = "oct") do={ :set month 10 }; +:if ([$month] = "nov") do={ :set month 11 }; +:if ([$month] = "dec") do={ :set month 12 }; +:local year [:pick $date 7 11]; +:local time [:pick [/system clock get time] 0 5]; +:local filename ("Data/mikrotik-Home/mikrotik_$year-$month-$day-$time.rsc"); +/export file=export.rsc; +/tool fetch address=hopsngrains.com src-path=export.rsc user=tanshu mode=ftp password=tan12shu dst-path=($filen> +:log info "TanBack: Backup uploaded with filename $filename" ``` #### 2. Schedule the script -Create the following schedule with name `TanDNS-Update` and the following permissions `write, test, read, policy`, `5 minute` interval and `TanDNS` On Event. \ No newline at end of file +Create the following schedule with name `TanBack-Daily` and the following permissions `ftp,read,write,policy,test,sensitive`, `1 day` interval and `TanBack` On Event. + +#### 3. Server preperation + +```sh +mkdir -p ~/Data/mikrotik-Home +``` + +#### 4. Install gdrive +Install gdrive to backup the database to google account in case of data loss at webfaction +Go to `https://github.com/prasmussen/gdrive` and download `gdrive-linux-x64` in `~/bin/` +```sh +wget -o ~/bin/gdrive $URL_FOR_GDRIVE_LINUX_X64_BINARY +``` +Make it executable `chmod +x ~/bin/gdrive` + + +#### 5. Configure Google Drive +Link your gdrive to the account by running `gdrive list` and following the instructions. + +Create a folder called `mikrotik-Home` and get its id by running `gdrive list`. + +Create upload script named `mk.sh` in the home directory and make it executable `chmod +x ~/mk.sh` +```sh +#!/usr/bin/env bash +for filename in ~/Data/mikrotik-Home/*.rsc; do + hash=`sha512sum ${filename} | awk '{ print $1 }'` + if grep -q "$hash" ~/Data/mikrotik-Home/mikrotik.sha512sums; then + echo "File $(basename $filename) is uploaded" + else + echo "Need to upload $filename" + sha512sum "$filename" >> ~/Data/mikrotik-Home/mikrotik.sha512sums + ~/bin/gdrive upload --delete --parent 1eO7hJ6b8_4n43B8GWSVyBtoon4vZyhs6 "$filename" + fi +done``` + +#### 6. Automate Backups +Edit crontab using `export VISUAL=nano; crontab -e` and add the following line +```sh +0 1 * * * ~/mk.sh +```