вторник, 30 декабря 2025 г.

Собираем бекапы микротика

Ранее была заметка про бекапы на почту. Наверно с тех же пор я и забил их собирать, потому что 

- письма фильтруешь и складываешь в отдельную папку автоматом помечая прочитанными 

- если что то поломалось в скрипте  - ты все равно  узнаешь об этом довольно поздно 

Как идея складывать конфиги или бекапы или и то и то локально ( просто иметь последний за вчера ) а при необходимости собирать и ротировать их на каком нибудь сервачке или где нибудь в облаке 

для бекапа достаточно использовать простой скрипт в планировщике 

   /file remove asd.backup
   /system backup save dont-encrypt=yes name=asd; 

для экспортта конфига аналогично

    /file remove asd.rsc;
    /export compact file=asd.rsc;

надо учесть что в случае бекапа - погуглить параметры dont-encrypt,  encryption и password, а в случае выгрузки конфига - на hide-sensitive - это может быть полезно для скрытия данных в конфиге или шифрования самого фала ( ну либо не использовать если не боитесь утечки / действуете в закрытом контуре или шифруете  на следующем шаге) 

но если файла по какому то случаю нет - то получим ошибку no such item  - лучше проверить - тут немного модернизируем (логика простая - если файл есть -удалить и сделать бекап если файла нет - просто создать  как вариант при первом проходе планировщика )

:local fileName1 "asd.backup";
:if ([:len [/file find name=$fileName1]] > 0) do={
    /file remove $fileName1;
    /system backup save dont-encrypt=yes name=asd; 
    :log info ($fileName1 . " removed successfully.");
} else={
    :log info ($fileName1 . " not found, create new file.");
    /system backup save dont-encrypt=yes name=asd; 
}
:local fileName2 "asd.rsc";
:if ([:len [/file find name=$fileName]] > 0) do={
    /file remove $fileName2;
    /export compact file=asd.rsc;
    :log info ($fileName2 . " removed successfully.");
} else={
    :log info ($fileName2 . " not found, create new file.");
    /export compact file=asd.rsc;
}

в я забираю с самого сервачка обычным wget вот таким скрикптом (думаю не стоит объяснять что логин и пароль надо поменять на свои и пользователь такой должен быть - как вариант можно создать определенного пользователя и ограничить его только с определенного адреса самого сервера на случай утечки данных) 

#!/bin/bash
cd /mnt/1/mikrotik_bac
my_array=("192.168.89.1" "192.168.89.11" "192.168.89.12" "192.168.89.166")
user="USERMANE"
pass="PASSWORD"
for i in "${my_array[@]}"; do
 wget -O $i.backup ftp://$user:$pass@$i/asd.backup
 wget -O $i.rsc ftp://$user:$pass@$i/asd.rsc
done

тут будет не плохо добавить проверку доступности самого микрота - это делается доп циклом и следующим скриптом как тут

ping -c 1 -w 5 37.235.***.*** &>/dev/null
if [ $? -ne 0 ] ; then
echo "inet down Oo exit"
else

итоговый скрипт 

#!/bin/bash
cd /mnt/1/mikrotik_bac
date=`date "+%Y-%m-%d"`
my_array=("192.168.89.1" 
"192.168.89.11" "192.168.89.12" "192.168.89.166")
user="teminalk0"
pass="Oorah7oo"
for i in "${my_array[@]}"; do
ping -c 1 -w 5 $i &>/dev/null
 if [ $? -ne 0 ] ; then
 echo "mikbac2.sh:  $date host $i is  down Oo exit" &&  logger "mikbac2.sh:  $date host $i down Oo exit"
 else
 wget -O $i.backup ftp://$user:$pass@$i/asd.backup
 wget -O $i.rsc ftp://$user:$pass@$i/asd.rsc
 fi
done

далее папку можно либо запихать в системный логротейт ниже пример конфигурации ( положить в  /etc/logrotate.d/mikrotik и поднастроить под свои нуждики )  в примере дл файлов бекапа и конфигов если нужны только одни - оставить нужное 

/mnt/1/mikrotik_bac/*.backup {
    su filalex filalex
    daily
    rotate 70
    maxage 150
    delaycompress
    compress
}
/mnt/1/mikrotik_bac/*.rsc {
    su filalex filalex
    daily
    rotate 70
    maxage 150
    delaycompress
    compress
}

либо выполнить внутри скрипта ротацию принудительно командой 

logrotate -f /etc/logrotate.d/mikrotik 

на этом все =) при появлении нового роутера в сетке
- добавить пользователя с паролем 
- сделать задачу в планировщике (не забыв поставить период 1 день конечно)
- как вариант скопировать код в скрипты и разово запустить для проверки 
- на серер добавить в массив новый адрес 



среда, 3 декабря 2025 г.

upnpc клиент проброса портов

 Вероятно когда давно ставили трансмишн, то сталкивались с проблемой что раздача не идет пока не открыть порт на роутере, который будет всетить в мир тачку с торент клиентом... решалось это либо установкой галки на роутере "использовать upnp" или жестким указанием порта в клиенте и ручной проброс натом в роутере. 

Мне всегда было интересно как это делается и хотелось динамику прикрутить скажем к ssh порту ноута - мол сменил роутер - ноут сам прокинул какой нибудь порт 2222 на себя (не важно какой он там адрес в локалке получил ) и нинадо идти в список клиентов, гадать на макадресах кто ноут - какой айпи - прописывать правило ната 

Ставим 

sudo apt install miniupnpc

Собственно сама команда 

upnpc -a 192.168.89.50 2222 2222 TCP 37.235.10.11

ну и хелп в помощь 

upnpc --help

upnpc : miniupnpc library test client, version 2.2.3.

 (c) 2005-2021 Thomas Bernard.

Go to http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/

for more information.

Usage : upnpc [options] -a ip port external_port protocol [duration] [remote host]

Add port redirection

        upnpc [options] -d external_port protocol [remote host]

Delete port redirection

        upnpc [options] -s

Get Connection status

        upnpc [options] -l

List redirections

        upnpc [options] -L

List redirections (using GetListOfPortMappings (for IGD:2 only)

        upnpc [options] -n ip port external_port protocol [duration] [remote host]

Add (any) port redirection allowing IGD to use alternative external_port (for IGD:2 only)

        upnpc [options] -N external_port_start external_port_end protocol [manage]

Delete range of port redirections (for IGD:2 only)

        upnpc [options] -r port1 [external_port1] protocol1 [port2 [external_port2] protocol2] [...]

Add all redirections to the current host

        upnpc [options] -A remote_ip remote_port internal_ip internal_port protocol lease_time

Add Pinhole (for IGD:2 only)

        upnpc [options] -U uniqueID new_lease_time

Update Pinhole (for IGD:2 only)

        upnpc [options] -C uniqueID

Check if Pinhole is Working (for IGD:2 only)

        upnpc [options] -K uniqueID

Get Number of packets going through the rule (for IGD:2 only)

        upnpc [options] -D uniqueID

Delete Pinhole (for IGD:2 only)

        upnpc [options] -S

Get Firewall status (for IGD:2 only)

        upnpc [options] -G remote_ip remote_port internal_ip internal_port protocol

Get Outbound Pinhole Timeout (for IGD:2 only)

        upnpc [options] -P

Get Presentation url


protocol is UDP or TCP

Options:

  -e description : set description for port mapping.

  -6 : use ip v6 instead of ip v4.

  -u url : bypass discovery process by providing the XML root description url.

  -m address/interface : provide ip address (ip v4) or interface name (ip v4 or v6) to use for sending SSDP multicast packets.

  -z localport : SSDP packets local (source) port (1024-65535).

  -p path : use this path for MiniSSDPd socket.

  -t ttl : set multicast TTL. Default value is 2.

  -i : ignore errors and try to use also disconnected IGD or non-IGD device.

суббота, 2 августа 2025 г.

Трансмишн в докере

Трансмишн в докере ...  lscr.io/linuxserver/transmission:latest  


 sudo docker  create --name=transmission -v /mnt/nfs/9091/config:/config -v /mnt/nfs/9091/downloads:/downloads -v /mnt/nfs/9091/watch:/watch -e PGID=1001 -e PUID=1001 -p 9091:9091 -p 51413:51413 -p 51413:51413/udp --restart=always

пятница, 11 июля 2025 г.

streamripper

задача: иногда пропадает инет и надо иметь в офлайне апру сотен треков любимой станции гуглим в нете список урлов типа вот такого https://gist.github.com/ergoz/e7837a54956116167db93b016dbd51a9

Ставим streamripper и запускаем его в скрине 

понедельник, 14 апреля 2025 г.

bashrc

чтобы в histoty отображалась дата ввода комнды export 

HISTTIMEFORMAT='%d.%m.%Y %H:%M:%S | ' 

 не отображать хостнейм и пользователя при ssh 

 PS1='[\W]\$ '