Для поддержания актуального состояния прошивок MikroTik необходимо периодически обновлять их на всём парке устройств. И не всегда есть возможность открыть доступ в Интернет, чтобы устройство могло загрузить прошивку с серверов обновлений MikroTik. На этот случай вендор предлагает два штатных варианта действий: ручное или автоматизированное копирование прошивок на устройство с последующей перезагрузкой, либо настройка выделенного устройства в качестве источника обновлений для остальных устройств. Оба этих варианта имеют свои недостатки.
В этой заметке мы рассмотрим ещё один, альтернативный, вариант - это создание локального веб-сервера, который бы имитировал структуру каталогов оригинального сервера обновлений upgrade.mikrotik.com. Подобный сервер позволит решить две основные проблемы: распространение обновлений в локальной сети без доступа в Интернет и контроль за версией прошивок, которые будут устанавливаться на устройствах.
В случае выхода обновления прошивки администратор с помощью скрипта загружает новое обновление для всех интересующих его платформ. Проводиться обновление тестовой группы устройств, проверяется их работа. После тестирования можно выполнить развёртывание и на другие устройства. Или вернуть предыдущую версию, если новая версия не устраивает.
Далее пошаговая инструкция по развёртыванию и использованию локального сервера обновлений.
Настройка веб-сервера
На сервере с ОС Debian Linux создаём каталог для хранения прошивок:
$ sudo mkdir /srv/upgrade.mikrotik.com
На каталог необходимо назначить права доступа на запись для учётной записи, под которой будут загружаться прошивки. Например, если это администратор системы состоит в группе adm, то так:
$ sudo chgrp adm /srv/upgrade.mikrotik.com
$ sudo chmod 775 /srv/upgrade.mikrotik.com
Устанавливаем веб-сервер apache2:
$ sudo apt install apache2
Настраиваем виртуальный хост веб-сервера в файле /etc/apache2/sites-available/mikrotik.conf
<VirtualHost *:80>
ServerName upgrade.mikrotik.com
DocumentRoot /srv/upgrade.mikrotik.com
</VirtualHost>
Активируем веб-сайт:
$ sudo a2ensite mikrotik
$ sudo systemctl restart apache2
Веб-сервер готов.
Загрузка прошивок на локальный сервер обновлений
Представленный ниже скрипт miktrotik_up поможет нам в загрузке прошивок MikroTik нужной версии и архитектур.
#!/bin/bash -e
dir="/srv/upgrade.mikrotik.com"
url="https://upgrade.mikrotik.com/routeros"
archs=(mipsbe mmips arm tile)
v=$1
if [[ "x$v" == "x" ]]; then
echo "Usage: $0 6.49.3"
exit 1
fi
if [[ -d "$dir/$v" ]]; then
echo "$v already exists"
exit 1
fi
IFS=. read maj min mic <<EOF
${v##*-}
EOF
newest="NEWEST"
if [ $maj -eq 7 ] && [ $min -gt 12 ]; then
newest="NEWESTa"
fi
for i in ${!archs[*]}; do
if [[ $maj == "7" ]]; then
archsv[$i]="$v-${archs[$i]}"
else
archsv[$i]="${archs[$i]}-$v"
fi
done
mkdir $dir/$v
pushd $dir/$v
wget --quiet "$url/$v/CHANGELOG"
echo "================ CHANGELOG =============="
echo
cat CHANGELOG
echo
for i in ${!archsv[*]}; do
wget --quiet "$url/$v/routeros-${archsv[$i]}.npk"
sha256sum routeros-${archsv[$i]}.npk
if [ $maj -eq 7 ] && [ $min -gt 12 ]; then
wget --quiet "$url/$v/wireless-${archsv[$i]}.npk"
sha256sum wireless-${archsv[$i]}.npk
fi
done
ts=$(od -A n -l -j 40 -N 4 "$dir/$v/routeros-${archsv[0]}.npk" | tr -d " ")
echo "$v $ts" | tee LATEST "$newest$maj.stable" > /dev/null
if [ $maj -eq 7 ]; then
for i in ${!archsv[*]}; do
ln -s "routeros-${archsv[i]}.npk" "routeros-${archs[$i]}-$v.npk"
done
fi
popd
ln -sf $v/$newest$maj.stable $dir/$newest$maj.stable
if [ $maj -eq 7 ]; then
if [ $min -lt 12 ]; then
ln -sf $v/NEWEST7.stable $dir/NEWEST6.upgrade
fi
if [ $min -eq 12 ] && [ $mic -le 1 ]; then
ln -sf $v/NEWEST7.stable $dir/NEWEST6.upgrade
fi
else
ln -sf $v/LATEST "$dir/LATEST.6"
fi
В начале скрипта представлены переменные, которые при необходимости можно отредактировать:
- dir - путь к корневому каталогу веб-сайта
- url - ссылка для загрузки прошивок
- archs - массив с перечнем требуемых архитектур прошивок
Если для загрузки потребуется прокси, то необходимо указать переменные окружения с указанием адреса прокси:
$ export https_proxy=http://User:Password@Proxy.holding.com:3128/
$ export http_proxy=http://User:Password@Proxy.holding.com:3128/
Пример вызова скрипта для загрузки версии 6.49.13:
$ mikrotik_up 6.49.13
============== CHANGELOG ==============
What's new in 6.49.13 (2024-Apr-04 12:57):
*) defconf - fixed firewall rule for IPv6 UDP traceroute;
c880fbc9fbc976ec90db7d01712f2d371a50db7523a3c634e5003007cbf10b4e routeros-mipsbe-6.49.13.npk
8f03ac9e6625b3e33c75a2cb574d66d4603d4deb76a1111f4f9e03f7363dab64 routeros-mmips-6.49.13.npk
9fd8b890929f04842e548609d4bb0c8ee35acb0d1f94e5f514d3cc4a71fa338a routeros-arm-6.49.13.npk
5c45e79eb19d4e97706effd9c0e7dadd4f0fcc826ec0850e9d2c47e406ac7837 routeros-tile-6.49.13.npk
Будут загружены прошивки нужных версий и архитектур, указаны их контрольные суммы, которые при желании можно сверить с тем, что указано на сайте производителя.
Образуется следующая структура каталогов:
├── 6.49.13
│ ├── CHANGELOG
│ ├── LATEST
│ ├── NEWEST6.stable
│ ├── routeros-arm-6.49.13.npk
│ ├── routeros-mipsbe-6.49.13.npk
│ ├── routeros-mmips-6.49.13.npk
│ └── routeros-tile-6.49.13.npk
├── LATEST.6 -> 6.49.13/LATEST
└── NEWEST6.stable -> 6.49.13/NEWEST6.stable
Отдельный каталог для прошивок заданной версии и символические ссылки LATEST.6 и NEWEST6.stable в корне, которые указывают на нужную версию прошивки, которая будет загружаться на устройства.
Настройка устройств MikroTik на использование локального сервера обновлений
Штатного способа изменения сайта загрузок для MikroTik не предусмотрено, но есть обходной способ добиться этого, указав в конфигурации устройства статическую A-запись для upgrade.mikrotik.com
/ip dns static add name="upgrade.mikrotik.com" address=10.X.X.X
где 10.X.X.X – это адрес нашего локального веб-сервера обновлений MikroTik.
Далее на устройстве MikroTik обновление происходит штатным способом:
/system package update check-for-updates
/system package update install
Управление версиями прошивок
Версии RouterOS 6 и 7 независимы друг от друга. Поэтому можно спокойно загружать на локальный сайт прошивки 6-й и 7-й версии и проводить обновление как в пределах 6-й, так и 7-й. Для перехода с 6-й на 7-ю версию требуется явно указать канал обновлений upgrade в конфигурации MikroTik, тогда при обновлении он будет запрашивать актуальную прошивку 7-й версии.
Администратору будет достаточно поменять символическую ссылку для переопределения версии, которую будут загружать устройства с сайта.
Например, для версий ветки 6.x.x, чтобы переопределить на 6.49.10, надо выполнить команды:
$ ln -sf 6.49.10/LATEST /srv/upgrade.mikrotik.com/LATEST.6
$ ln -sf 6.49.10/NEWEST6.stable /srv/upgrade.mikrotik.com/NEWEST6.stable
Для версий ниже 7.12.1, например, задать версию 7.11.4 текущей:
$ ln -sf 7.11.4/NEWEST7.stable /srv/upgrade.mikrotik.com/NEWEST7.stable
$ ls -sf 7.11.4/NEWEST7.stable /srv/upgrade.mikrotik.com/NEWEST6.upgrade
Для версий 7.13 и старше, чтобы переопределить на версию 7.14.2:
$ ln -sf 7.14.2/NEWESTa7.stable /srv/upgrade.mikrotik.com/NEWESTa7.stable
Важные моменты, о которых стоит помнить:
- Устройства MikroTik с объёмом ОЗУ/Flash меньше 64 Мб не стоит обновлять до 7-й версии.
- В 7-й ветке есть переходная версия 7.12.1. Её необходимо загрузить на локальный сайт, так как через неё будут обновляться все устройства с более меньшей версией прошивки. Это связано с выделением отдельного пакета для беспроводных драйверов.
Использованные источники информации:
Ништяк, спасибо. Применим у себя.