Установка CHR

Cloud Hosted Router можно установить практически на любую виртуалку, но есть некоторые тонкости.

Заказав настройку MikroTik, вы получите 100% проработанное решение от опытного сетевого инженера.

Установка поверх Ubuntu

Если хостинг VDS/VPS предоставляет только готовый образ, можно накатить CHR поверх него, заменив данные на диске:

Для RouterOS 7 подмените ссылку на https://download.mikrotik.com/routeros/7.11.2/chr-7.11.2.img.zip и название chr-7.11.2.img.zip

sudo -i #переходим в root

apt update #обновляем список пакетов
apt install unzip -y #ставим архиватор

wget --inet4-only --no-check-certificate https://download.mikrotik.com/routeros/6.48.5/chr-6.48.5.img.zip #скачиваем версию CHR

unzip chr-6.48.5.img.zip #распаковываем

fdisk -l #смотрим список устройств дисков


----

Disk /dev/loop1: 55,45 MiB, 58130432 bytes, 113536 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop2: 71,38 MiB, 74838016 bytes, 146168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop3: 61,85 MiB, 64835584 bytes, 126632 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop4: 55,51 MiB, 58191872 bytes, 113656 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop5: 32,42 MiB, 33980416 bytes, 66368 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop6: 67,26 MiB, 70516736 bytes, 137728 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/loop7: 32,45 MiB, 34017280 bytes, 66440 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/vda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7800975b

Device     Boot Start      End  Sectors Size Id Type
/dev/vda1  *     2048 20971486 20969439  10G 83 Linux

----

Нас интересует /dev/vda

dd if=chr-6.48.5.img of=/dev/vda bs=4M oflag=sync #поблочно записываем образ на диск

echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger

После перезагрузки останется через консоль авторизоваться и поставить пароль, настроить сеть.

Установка поверх Ubuntu в Digital Ocean

Для DO процесс немного интересней

wget http://download2.mikrotik.com/routeros/6.48.5/chr-6.48.5.img.zip -O chr.img.zip  && \
gunzip -c chr.img.zip > chr.img  && \
mount -o loop,offset=33554944 chr.img /mnt && \
ADDRESS=`ip addr show eth0 | grep global | cut -d' ' -f 6 | head -n 1` && \
GATEWAY=`ip route list | grep default | cut -d' ' -f 3` && \
echo "/ip address add address=$ADDRESS interface=[/interface ethernet find where name=ether1]
/ip route add gateway=$GATEWAY
/ip service disable telnet
/user set 0 name=trololo password=PaSsW0rD
 " > /mnt/rw/autorun.scr && \
umount /mnt && \
echo u > /proc/sysrq-trigger && \
dd if=chr.img bs=1024 of=/dev/vda && \
echo "sync disk" && \
echo s > /proc/sysrq-trigger && \
echo "Sleep 5 seconds" && \
sleep 5 && \
echo "Ok, reboot" && \
echo b > /proc/sysrq-trigger

Скрипт сам прочитает настройки сети и пропишет их, заодно сменит имя и пароль admin на name=trololo password=PaSsW0rD

Этот способ можно переписать под любого хостера, заранее посмотрев названия интерфейсов.

Установка на Proxmox

Установка на свой гипервизор является идеальным решением, так как CHR займет всего 64Мб, что позволит быстрее делать бэкап и перемещать между нодами без СХД

В используемом ниже Bash скрипте нужно при запуске указать версию CHR и свободный vmID

В случае ошибок проверьте, что установлен архиватор и ссылка на образ рабочая

#!/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 https://download.mikrotik.com/routeros/$version/chr-$version.img.zip
    unzip chr-$version.img.zip
    echo "---------------------------------------------------------------------------"
fi
# List already existing VM's and ask for vmID
echo "== Printing list of VM's on this hypervisor!"
qm list
echo ""
read -p "Please Enter free vm ID to use:" vmID
echo ""
# Create storage dir for VM if needed.
if [ -d /var/lib/vz/images/$vmID ] 
then
    echo "-- VM Directory exists! Ideally try another vm ID!"
    read -p "Please Enter free vm ID to use:" vmID
else
    echo "-- Creating VM image dir!"
    mkdir /var/lib/vz/images/$vmID
fi
# Creating qcow2 image for CHR.
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
# 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 ##############"

Если способ не работает (а он не работает для серверов в кластере), то нужно создать минимальную машину и подмонтировать к ней диск:

wget https://download.mikrotik.com/routeros/6.48.6/chr-6.48.6.img.zip
unzip chr-6.48.6.img.zip
qm create 1001 --memory 256 --net0 virtio,bridge=vmbr0
qm importdisk 1001 chr-6.48.6.img local-lvm
qm set 1001 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-1001-disk-0 --boot c --bootdisk scsi0

Установка на OpenStack

Установка аналогична замене данных диска на Ubuntu, но для работы маршрутизации и NAT нужно произвести манипуляции с LAN портами в CLI OpenStack

openstack port set —allowed-address ip-address=0.0.0.0/0 ID_LAN_Порта