Установка Mikrotik CHR на виртуальную машину Proxmox

  • Автор:

CHR_ProxMox_installation-000.pngНе так давно мы рассказывали о виртуальном роутере Mikrotik CHR (Cloud Hosted Router), который представляет собой специальную версию RouterOS для виртуальных сред. Это дает возможность использовать все возможности Mikrotik без оглядки на производительность и физические ограничения роутеров официальной линейки. Сегодня мы поговорим о том, как установить CHR на виртуальную машину Proxmox, ничего сложного в этом процессе нет и даже есть соответствующая статья в официальной Wiki, но гладко было на бумаге...

Освоить MikroTik вы можете с помощью онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA. Автор - официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто еще не держал его в руках. В состав входят 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.

Изначально мы не собирались писать эту статью. Какой смысл переписывать то, что есть в официальной документации, тем более что там представлен готовый скрипт. Как говориться: нажми на кнопку и получи результат. Хотя сами мы его никогда не использовали, предпочитая все делать вручную. На самом деле процесс несложный: скачать и сконвертировать образ диска, затем создать виртуальную машину с ним. Но недавно с таким вопросом к нам обратился коллега и мы дали ему ссылку на официальную документацию.

А вот дальше все пошло не так. Скрипт оказался фактически нерабочим, кроме того, содержащим достаточно грубые ошибки. Начнем по порядку.

URL для скачивания образа диска указан неверно, при попытке перехода по нему нас ждет сообщение:

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>

Но скрипт игнорирует ошибку получения образа и продолжает свою работу, создавая виртуальную машину без жесткого диска.

Следующая ошибка - перед предложением указать свободный VM ID выводится список только виртуальных машин, существующие контейнеры игнорируются. И хотя Proxmox не даст создать еще одну виртуалку с существующим VM ID, но мусор в виде образа диска в системе останется.

После указания VM ID проверка на существование виртуальной машины производится некорректно, проверяется наличие каталога с образом диска, в то время как современные виртуалки могут использовать Thin LVM. Правильно будет проверять наличие конфигурационного файла виртуалки. При этом логика самой проверки неверна, установив наличие существующего образа скрипт предложит ввести новое значение VM ID, но новое значение проверяться никак не будет. Т.е. можно два раза указать неверное значение и скрипт продолжит свою работу.

С учетом всего вышесказанного мы серьёзно переработали скрипт и добавили в него новые функции. Наш скрипт выполняет следующие действия:

  • Скачивает образ Mikrotik CHR указанной версии и проверяет успешность этого действия
  • Выводит список всех виртуальных машин и контейнеров
  • Проверяет введенный VM ID на существование виртуальной машины или контейнера с таким идентификатором
  • Конвертирует образ и изменяет размер виртуального жесткого диска на указанный пользователем (новая функция)
  • Создает виртуальную машину с нужным образом диска

При возникновении ошибок на любом из этапов скрипт сообщает об ошибке и завершает свою работу.

#!/bin/bash

#vars
version="nil"
vmID="nil"

echo "############## Start of Script ##############

## Checking if temp dir is available..."
if [ -d /root/temp ]
then
echo "-- Directory exists!"
else
echo "-- Creating temp dir!"
mkdir /root/temp
fi
# Ask user for version
echo "## Preparing for image download and VM creation!"
read -p "Please input CHR version to deploy (6.38.2, 6.40.1, etc):" version
# Check if image is available and download if needed
if [ -f /root/temp/chr-$version.img ]
then
echo "-- CHR image is available."
else
echo "-- Downloading CHR $version image file."
cd /root/temp
echo "---------------------------------------------------------------------------"
wget --no-check-certificate https://download.mikrotik.com/routeros/$version/chr-$version.img.zip
unzip chr-$version.img.zip
echo "---------------------------------------------------------------------------"
fi
if [ ! -f /root/temp/chr-$version.img ]
then
echo "-- Error downloading CHR $version image file!"
exit 0
fi
# List already existing VM's and ask for vmID
echo "== Printing list of VM's on this hypervisor!"
qm list
echo "== Printing list of CT's on this hypervisor!"
pct list
echo ""
read -p "Please Enter free vm ID to use:" vmID
echo ""
# Create storage dir for VM if needed.
if [ -f /etc/pve/nodes/pve/qemu-server/$vmID.conf ]
then
echo "-- VM exists! Try another vm ID!"
exit 0
fi
if [ -f /etc/pve/nodes/pve/lxc/$vmID.conf ]
then
echo "-- CT exists! Try another vm ID!"
exit 0
fi
echo "-- Creating VM image dir!"
mkdir /var/lib/vz/images/$vmID
# Creating qcow2 image for CHR.
read -p "Please input image size, GB:" imgsize
echo "-- Converting image to qcow2 format "
qemu-img convert \
-f raw \
-O qcow2 \
/root/temp/chr-$version.img \
/var/lib/vz/images/$vmID/vm-$vmID-disk-1.qcow2
if [ $imgsize -ne 0 ]
then
echo "-- Resize image to $imgsize GB"
qemu-img resize \
/var/lib/vz/images/$vmID/vm-$vmID-disk-1.qcow2 +${imgsize}G
fi
# Creating VM
echo "-- Creating new CHR VM"
qm create $vmID \
--name chr-$version \
--net0 virtio,bridge=vmbr0 \
--bootdisk virtio0 \
--ostype l26 \
--memory 256 \
--onboot no \
--sockets 1 \
--cores 1 \
--virtio0 local:$vmID/vm-$vmID-disk-1.qcow2
echo "############## End of Script ##############"

Разберем его работу подробнее.

Секция ## Checking if temp dir is available..." проверяет наличие временной директории /root/temp и создает ее в случае отсутствия. Затем у пользователя запрашивается номер требуемой версии RouterOS и производится попытка ее скачать. Кроме исправленного адреса мы добавили опцию --no-check-certificate для wget, что позволяет исключить ошибки с проверкой валидности сертификата.

Затем производится проверка успешности скачивания и распаковки образа:

if [ ! -f /root/temp/chr-$version.img ] 

Если файл образа не существует - скрипт завершит свою работу.

CHR_ProxMox_installation-001.png

В случае успеха он выведет пользователю список не только виртуальных машин, но и контейнеров:

echo "== Printing list of VM's on this hypervisor!"
qm list
echo "== Printing list of CT's on this hypervisor!"
pct list

После ввода желаемого VM ID происходит проверка наличия конфигурационных файлов, как для виртуалок, так и для контейнеров:

if [ -f /etc/pve/nodes/pve/qemu-server/$vmID.conf ] 
then
echo "-- VM exists! Try another vm ID!"
exit 0
fi
if [ -f /etc/pve/nodes/pve/lxc/$vmID.conf ]
then
echo "-- CT exists! Try another vm ID!"
exit 0
fi

Если для указанного VM ID будет найден конфигурационный файл, скрипт сообщит что такая машина или контейнер существуют и завершит свою работу.

CHR_ProxMox_installation-002.pngПосле прохождения всех проверок, казалось бы, можно создавать виртуальную машину, но не будем спешить. По умолчанию образ диска имеет объем всего 64 МБ, что во многих случаях будет явно недостаточно.

CHR_ProxMox_installation-003.pngПоэтому мы добавили в скрипт новую функцию - установку нужного размера виртуального диска. Требуется указать нужное значение в ГБ или ноль, если вы не хотите увеличивать диск.

read -p "Please input image size, GB:" imgsize

После чего будет выполнена конвертация образа, установка указанного размера и создание виртуальной машины.

Все последующие действия требуется выполнять с правами суперпользователя root.

Сначала создадим сам файл скрипта в корневой директории суперпользователя:

touch /root/CHR_install.sh

И внесем в него приведенный выше текст, также можно скачать готовый скрипт с нашего сайта:

CHR_install.sh MD5: 47E29D66B33955BCFB94E6149B823CB2

Например, это можно сделать командой:

cd /root
wget --no-check-certificate https://interface31.ru/tech_it/files/CHR_install.sh

Затем, вне зависимости от того, каким образом вы создали скрипт, сделаем его исполняемым:

chmod +x /root/CHR_install.sh

Теперь его можно запускать, для этого, если вы находитесь в /root выполните:

./CHR_install.sh

Из иных расположений:

/root/CHR_install.sh

В ходе работы скрипта вам потребуется ответить на три вопроса: указать версию RouterOS так как она указана на сайте (6.48.1 или 6.49beta27), номер идентификатора виртуальной машины (VM ID) и желаемый размер виртуального диска в ГБ:

CHR_ProxMox_installation-004.png

Результатом работы скрипта будет созданная виртуальная машина, перед запуском вы можете проверить и изменить ее параметры:

CHR_ProxMox_installation-005.pngОбратите внимание, что скрипт создает единственный сетевой интерфейс, который подключает к vmbr0. Сама же RouterOS настроена таким образом, что на интерфейсе ether1 включен DHCP-клиент и при наличии в сети DHCP-сервера автоматически получит от него адрес. Однако вы можете настроить любую иную сетевую конфигурацию. Более подробно читайте в нашей статье о настройке сети в Proxmox VE.

CHR_ProxMox_installation-006.pngТакже не забудьте проверить и включить автоматический запуск виртуальной машины, по умолчанию он выключен:

CHR_ProxMox_installation-007.pngЕсли же вам нужно расширить виртуальный диск уже существующей машины, то ее следует выключить и выполнить следующую команду:

qemu-img resize /var/lib/vz/images/105/vm-105-disk-1.qcow2 +4G

В данном случае мы увеличили диск виртуальной машины с идентификатором 105 на 4 ГБ.

Освоить MikroTik вы можете с помощью онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA. Автор - официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто еще не держал его в руках. В состав входят 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.

Дополнительные материалы:


Mikrotik

  1. Оборудование MikroTik класса SOHO. Общий обзор и сравнение возможностей
  2. Производительность младших моделей Mikrotik hEX и hAP. Экспресс-тестирование
  3. Базовая настройка роутера MikroTik
  4. Расширенная настройка DNS и DHCP в роутерах Mikrotik
  5. Автоматическое резервное копирование настроек Mikrotik на FTP
  6. Проброс портов и Hairpin NAT в роутерах Mikrotik
  7. Настройка IPTV в роутерах Mikrotik на примере Ростелеком
  8. Настройка VPN-подключения в роутерах Mikrotik
  9. Настройка черного и белого списков в роутерах Mikrotik
  10. Настройка выборочного доступа к сайтам через VPN на роутерах Mikrotik
  11. Настройка OpenVPN-сервера на роутерах Mikrotik
  12. Безопасный режим в Mikrotik или как всегда оставаться на связи
  13. Настройка Proxy ARP для VPN-подключений на роутерах Mikrotik
  14. Настраиваем Port Knocking в Mikrotik
  15. Резервирование каналов в Mikrotik при помощи рекурсивной маршрутизации
  16. Настраиваем родительский контроль на роутерах Mikrotik
  17. Настраиваем IKEv2 VPN-сервер на роутерах Mikrotik с аутентификацией по сертификатам
  18. Расширенная настройка Wi-Fi на роутерах Mikrotik. Режим точки доступа
  19. Mikrotik CHR - виртуальный облачный роутер
  20. Настройка контроллера CAPsMAN (бесшовный Wi-Fi роуминг) на Mikrotik
  21. Настройка VPN-подключения на роутерах Mikrotik если подсети клиента и офиса совпадают
  22. Настраиваем использование DNS over HTTPS (DoH) на роутерах Mikrotik
  23. Настройка PPTP или L2TP VPN-сервера на роутерах Mikrotik
  24. Установка Mikrotik CHR на виртуальную машину Proxmox
  25. Защита RDP от перебора паролей при помощи оборудования Mikrotik

The Dude

  1. The Dude. Установка и быстрое начало работы
  2. Централизованное управление обновлением RouterOS при помощи The Dude

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал



Loading Comments