Настройка автоматического резервного копирования конфигураций активного сетевого оборудования на OC Linux Fedora 36 Workstation ------------------------------------------------------------------------------------------------------------------------------------------------------ Все описанные ниже действия выполнялись под пользователем root ------------------------------------------------------------------------------------------------------------------------------------------------------ Всем привет! Для реализации данного проекта мне потребовалось: 1) Установка\настройка TFTP-сервера; 2) Написание bash-скрипта; 3) Настройка Crontab; 4) Подключение сетевой папки к PC с бэкапами, перекидывание бэкапов и очистка каталога tftpboot; 5) Ну и сетевые устройства, которые могут работать с протоколом TFTP. ------------------------------------------------------------------------------------------------------------------------------------------------------ 1) Установка\настройка TFTP-сервера ------------ yum update -y && yum upgrade -y |#|#| Поиск и обновление пакетов системы. ------------ yum install -y tftp tftp-server.x86_64 |#|#| Команда установки необходимых пакетов для tftp-server-a ------------ nano /usr/lib/systemd/system/tftp.service |#|#| Команда для редактирования конфигурационного файла tftp.service ------------ После установки необходимых пакетов заходим в конфигурационный файл /usr/lib/systemd/system/tftp.service и приводим его к следующему виду: [Unit] Description=Tftp Server Requires=tftp.socket Documentation=man:in.tftpd [Service] ExecStart=/usr/sbin/in.tftpd -c -p -s /var/lib/tftpboot StandardInput=socket [Install] WantedBy=multi-user.target Also=tftp.socket ------------ После внесения корректировок вводим следующие команды. ------------ systemctl daemon-reload |#|#| Команда для проверки наличия новых или изменённых юнитов и перезапуска systemd ------------ systemctl enable --now tftp-server |#|#| Команда для включения автозагрузки tftp-server-a ------------ systemctl status tftp-server |#|#| Команда проверки статуса tftp-server-a ------------ chmod 777 /var/lib/tftpboot |#|#| Изменяем права доступа на каталог ------------ Для систем с работающей с службой Firewalld разрешите порты TFTP. ------------ firewall-cmd --add-service=tftp --permanent ------------ firewall-cmd --reload ------------ На данном этапе TFTP-server настроен и функционирует! IP-адресом TFTP-server-a является IP-address PC. (Возьмём как пример адрес 10.10.10.10/24). ------------------------------------------------------------------------------------------------------------------------------------------------------ 2) Написание bash-скрипта ------------ Скрипт для выгрузки бэкапов из сетевых устройств написан на Bash. Как было написано выше, IP-адрес TFTP-Server-@: 10.10.10.10. ------------ Скрипт написан для следующих сетевых устройств: 1. ZyXEL GS2220-28HP 2. ZyXEL XGS4600-32 3. ZyXEL GS2210-24 4. D-Link DGS-1210-52 Gigabit Ethernet Switch 5. D-Link DGS-1210-52/C1 6. D-Link DGS-1210-52 7. D-Link DES-3200-26 Fast Ethernet Switch 8. Huawei USG6585E ------------ Вам не обязательно иметь данные сетевые устройства, они могут быть разными. Но! У сетевых устройств обязательно должна быть поддержка: 1. FTP/TFTP; 2. Подключение к консоли через Telnet.(Если вам очень критично, то можете заменить протокол Telnet на SSH. В моём примере указано подключение по протоколу Telnet). ------------ touch save.sh |#|#| Создание файла save.sh, в котором будет написан скрипт ------------ chmod 777 save.sh |#|#| Выдача всех возможных прав файлу save.sh ------------ nano save.sh |#|#| Редактирование файла save.sh ------------ Сам скрипт: #!/bin/bash #Saving switches and firewall settings set -x #Write memory and backuping ZyXEL GS2220-28HP DATE="$(date +%Y-%m-%d)" USER="admin" PASSWD="123456789" LOG="telnnet_conn.log" HOSTS=" 10.10.10.81 " for H in $HOSTS do echo START SCRIPT: >> $LOG date +%x-%R >> $LOG ( sleep 5; echo -en "$USER\r"; sleep 5; echo -en "$PASSWD\r"; sleep 5; echo -en "write memory\r"; sleep 60; echo -en "copy running-config tftp 10.10.10.10 ZyXEL_GS2220-28HP_10.10.10.81_$DATE\r"; sleep 60; echo -en "exit\r"; sleep 1; ) | telnet $H >> $LOG echo ========================= >> $LOG done ------------ Расшифровка: 1. Начинаться любой bash-скрипт всегда должен со строки, указывающий путь к bash-интерпритатору |#|#| #!/bin/bash 2. Включаем режим отладки, прописав set -x (позволяет наблюдать за ходом выполнения скрипта в терминале) |#|#| set -x 3. Задаем входные данные. В нашем случае это имя пользователя (USER), дата (DATE), пароль (PASSWD), названия файла, в который будет собираться вывод команд (telnnet_conn.log), и ip адреса, к которым будем подключаться телнетом (HOSTS). 4. Для организации подключения сделаем цикл с перебором ip адресов. for H in $HOSTS do #Тело цикла (выполняемые операции в цикле) done 5. Для удобства обработки вывода команд добавим строчку начала скрипта, используя echo и дату и время начала выполнения. echo START SCRIPT: >> $LOG date +%x-%R >> $LOG 6. Теперь начинается основная часть работы скрипта. Укажем команды, которые мы хотели бы, чтобы скрипт вводил за нас, а именно ввод логина, пароля, сохранения текущей конфигурации устройства в NVRAM и отправка сохраненного конфигурационного файла устройства на TFTP-Server. Команда "sleep 5,60,1" используется чтобы расставить паузы при выполнение команд. ( sleep 5; echo -en "$USER\r"; sleep 5; echo -en "$PASSWD\r"; sleep 5; echo -en "write memory\r"; sleep 60; echo -en "copy running-config tftp 10.10.10.10 ZyXEL_GS2220-28HP_10.10.10.81_$DATE\r"; sleep 60; echo -en "exit\r"; sleep 1; ) | telnet $H >> $LOG 7. Для удобства чтения выведем разделитель (=========), используя echo. echo ========================= >> $LOG done ------------ Далее выкладывать и расписывать скрипт весь/целиком не вижу смысла, т.к. порядок скрипта повторяется. Как исключение, выложу команды для различных устройств: ZyXEL GS2220-28HP write memory copy running-config tftp 10.10.10.10 ZyXEL_GS2220-28HP_10.10.10.81 | (наименование бэкап-файла на TFTP-Server-e) exit ------------ ZyXEL XGS4600-32 write memory copy running-config tftp 10.10.10.10 ZyXEL_XGS4600-32_10.10.10.82 exit ------------ ZyXEL GS2210-24 write memory copy running-config tftp 10.10.10.10 ZyXEL_GS2210-24_10.10.10.83 exit ------------ D-Link DGS-1210-52 Gigabit Ethernet Switch save upload cfg_toTFTP 10.10.10.10 D-Link_DGS-1210-52_10.10.10.84 logout ------------ D-Link DGS-1210-52/C1 save upload cfg_toTFTP 10.10.10.10 D-Link_DGS-1210-52_C1_10.10.10.85 logout ------------ D-Link DES-3200-26 Fast Ethernet Switch save all upload cfg_toTFTP 10.10.10.10 dest_file D-Link_DES-3200-26_10.10.10.86 logout ------------ Huawei USG6585E save config.cfg tftp 10.10.10.10 put config.cfg backup.cfg | (наименование бэкап-файла на TFTP-Server-e) quit ------------ Qtech QSW-3750-52T-AC copy running startup-config Y copy running-config tftp://10.10.10.10/Qtech_QSW-3750-52T-AC_10.10.10.87 Y exit ------------ Все бэкапы после запуска скрипта будут отправляться на TFTP-Server в каталог: /var/lib/tftpboot/ ------------------------------------------------------------------------------------------------------------------------------------------------------ 3) Установка/настройка Crontanb ------------ yum install -y cronie |#|#| Установка Crontab ------------ systemctl enable crond |#|#| Добавление службы Crontab в автозапуск ------------ systemctl start crond |#|#| Запуск службы Crontab ------------ crontab -e |#|#| Настройка записей в Crontab ------------ Наш скрипт называется save.sh, то соответственно настройка на запуск скрипта в каждую среду, в 9 часов 30 минут вечера каждой недели будет выглядеть следующим образом: 30 21 * * 3 /home/script/save.sh ------------ Подробную инфромацию по настройке Crontab можно найти: https://xn----7sbbaqhlkm9ah9aiq.net/news-new/gde-nayti-fayl-nastroyki-cron-linux-unix-crontab-file-location.html ------------ В принципе, на этом настройка Crontab закончена. ------------ После внесения изменений в Crontab, службу нужно обязательно перезагрузить. ------------ systemctl restart crontab |#|#| Команда перезагрузки службы Crontab ------------ systemctl status crontab.service |#|#| Командка для проверки состояния службы Crontab ------------------------------------------------------------------------------------------------------------------------------------------------------ 4) Подключение сетевой папки к PC с бэкапами, перекидывание бэкапов и очистка каталога tftpboot ------------ Для хранения конфигурационных файлов можно использовать и каталог tftpboot, но нужно же делать все по красоте!) Поэтому было принято решение сделать хранилку на nfs-сервере. В данном случае nfs-сервер я не поднимал. На nfs-сервере в конфигурационном файле, был добавлен ip-адрес PC с бэкапами(10.10.10.10) в белый список. Поэтому никаких учетных данных для входа мне не понадобилось. ------------ Пусть ip-адрес nfs-сервера будет: 10.10.10.50. ------------ nano /etc/fstab |#|#| Конфигурационный файл, в котором будет прописана строчка с монтированием нужного каталога при включение PC с бэкапами. ------------ В конце файла fstab прописываем следующую строку: 10.10.10.50:/mnt/backup/ss /mnt nfs default 0 0 ------------ Расшифровка!!! 10.10.10.50 |#|#| ip-адрес nfs-сервера /mnt/backup/ss |#|#| Созданный каталог на nfs-сервере /mnt |#|#| Каталог на PC с бэкапами, куда примонтируется каталог из nfs-сервера "/mnt/backup/ss". Т.е. в конечном итоге мы получим на PC с бэкапами каталог "/mnt", в который примонтированна папка "ss" с файлами. В каталоге "/mnt" мы увидим файлы из папки "ss". ------------ После внесенных изменений в конфигурационный файл fstab сохраняем его и выходим. ------------ showmount -e 10.10.10.50 |#|#| Данной командой можно воспользоваться для проверки доступности соединения к каталогам nfs-сервера. ------------ После проверки правильности написанной строки в конфигурационном файле fstab, можно уйти и на перезагрузку! ------------ reboot |#|#| Команда перезагрузки VM ------------ Если вы работаете в графической оболочке Fedora, то при правильном написании пути в файле fstab, у вас ОС прогрузится, если же нет, то у вас появится терминал, воспользуясь которым вы должны будете найти ошибку! ------------ Для проверки можете зайти в каталог "/mnt" и если у вас что-то было в папке "ss", то содержимое появится и в каталоге "/mnt" ------------ Следующие команды для удобства можете добавить в тот же скрипт "save.sh". ------------ Далее идём к копированию папки tftpboot вместе со всем её содержимым на nfs-сервер. Т.е. в каталог "/mnt". ------------ cp -R /var/lib/tftpboot /mnt |#|#| Данная команда копирует все содержимое, которое находится в каталоге /tftpboot вместе с папкой tftpboot в каталог /mnt. Т.е. после ввода данной команды в каталоге "/mnt" будет лежать папка "tftpboot" со всем её содержимым. ------------ chmod 777 /mnt |#|#| Выдадим все возможные права каталогу "/mnt" ------------ chmod 777 /mnt/tftpboot |#|#| Выдадим все возможные права каталогу "/tftpboot" ------------ mv /mnt/tftpboot /mnt/Backups_$(date +%d.%m.%Y) |#|#| Данная команда отвечает за переименование папки "tftpboot" на имя Backups_22.07.2022 ------------ rm -rf /var/lib/tftpboot/* |#|#| Данной командой можно очистить каталог tftpboot от старых конфигурационных файлов. ------------------------------------------------------------------------------------------------------------------------------------------------------ На этом пост завершён! Спасибо за внимание! Надеюсь, что кому-нибудь этот мануал пригодится)