Что такое MikroTik CHR и зачем он на Proxmox
CHR — это Cloud Hosted Router. RouterOS в виде виртуальной машины. Тот же MikroTik, те же команды, та же логика — только запускается на любом гипервизоре.
Зачем это нужно. Тестовый стенд без физического железа. Лабораторная среда для изучения RouterOS. Маршрутизатор или файервол внутри Proxmox-кластера. Дешевле чем покупать отдельное устройство для каждой задачи.
По лицензии: бесплатная версия CHR ограничена 1 Mbps на интерфейс. Для лабы и тестов — хватает. Для продакшна нужна платная лицензия P1, P10 или Unlimited. Мы работаем с бесплатной — всё что показано в статье работает без покупки лицензии.
Системные требования
| Компонент | Минимум | В статье |
|---|---|---|
| Proxmox VE | 7.x и выше | 9.1.4 |
| RouterOS CHR | 7.x | 7.22.1 stable |
| RAM для VM | 256 MiB | 256 MiB |
| Диск для VM | 128 MiB | 128 MiB (local-lvm) |
| CPU | 1 ядро x86_64 | 1 ядро, host type |
| Сеть | 1 интерфейс | virtio, vmbr0 |
На момент публикации актуальная версия CHR — 7.22.1. Перед установкой проверь свежие релизы на mikrotik.com/download.
Архитектура стенда
CHR получает один интерфейс ether1 через virtio-драйвер. Он смотрит в vmbr0 — стандартный bridge Proxmox. Дальше — в твою локальную сеть. Просто и без лишних сущностей.
Часть 1: Установка CHR на Proxmox
Пошаговое видео, скринкаст консоли:
Шаг 1. Проверяем Proxmox
Заходи на Proxmox по SSH и проверяй версию:
pveversion
Результат:
pve-manager/9.1.4/5ac30304265fbd8e (running kernel: 6.17.4-1-pve)
Шаг 2. Смотрим хранилища
Нам нужны два хранилища: одно для образа, второе для диска VM.
pvesm status
Результат:
Name Type Status Total (KiB) Used (KiB) Available (KiB) %
local dir active 98497780 7058528 86389704 7.17%
local-lvm lvmthin active 855855104 373067239 482787864 43.59%
Образ CHR кладём в local — путь /var/lib/vz/template/iso/. Диск VM создаём на local-lvm — это lvmthin, быстро и без лишнего расхода места.
Шаг 3. Скачиваем актуальную версию CHR
Не хардкодим версию руками — получаем её у MikroTik автоматически:
STABLE=$(curl -s https://upgrade.mikrotik.com/routeros/NEWESTa7.stable | awk '{print $1}')
echo $STABLE
Результат:
7.22.1
Теперь скачиваем образ:
cd /var/lib/vz/template/iso/
wget https://download.mikrotik.com/routeros/${STABLE}/chr-${STABLE}.img.zip
MikroTik отдаёт RAW disk image в zip-архиве. 43 MB, скачивается за 10-15 секунд.
Шаг 4. Распаковываем образ
unzip chr-${STABLE}.img.zip
Результат:
inflating: chr-7.22.1.img
Шаг 5. Получаем свободный ID для VM
Не угадываем ID руками — Proxmox сам знает что свободно:
VMID=$(pvesh get /cluster/nextid)
echo $VMID
Результат:
110
Шаг 6. Создаём VM
qm create $VMID --name "mikrotik-chr-${STABLE}" --ostype l26 --memory 256 --cores 1 --cpu host --net0 virtio,bridge=vmbr0
Разберём параметры:
| Параметр | Значение | Зачем |
|---|---|---|
| —ostype l26 | Linux 2.6+ | CHR основан на Linux-ядре |
| —memory 256 | 256 MiB | минимум для ROS7 с одним интерфейсом |
| —cpu host | тип CPU host | передаём реальные инструкции CPU, быстрее чем эмуляция |
| —net0 virtio | virtio драйвер | паравиртуализация — лучшая производительность сети |
Шаг 7. Импортируем диск
qm importdisk $VMID /var/lib/vz/template/iso/chr-${STABLE}.img local-lvm
Результат:
transferred 128.0 MiB of 128.0 MiB (100.00%)
unused0: successfully imported disk 'local-lvm:vm-110-disk-0'
Proxmox скопировал RAW образ в LVM и создал диск vm-110-disk-0. Пока он висит как unused0 — не подключён к VM.
Шаг 8. Подключаем диск и настраиваем загрузку
qm set $VMID --scsi0 local-lvm:vm-${VMID}-disk-0 --scsihw virtio-scsi-single --boot order=scsi0
Подключаем диск как scsi0 через контроллер virtio-scsi-single и говорим VM грузиться с него. Без --boot order=scsi0 VM не знает откуда стартовать.
Шаг 9. Добавляем serial консоль
qm set $VMID --serial0 socket --vga serial0
Вот тут важно. CHR не имеет графического вывода. Без serial консоли qm terminal не откроется — получишь пустой экран. Эти две опции обязательны.
Шаг 10. Запускаем VM
qm start $VMID
Ждём 10 секунд пока CHR загрузится и подключаемся:
qm terminal $VMID
Нажимай Enter — появится приглашение сменить пароль. Установи пароль и попадёшь в консоль RouterOS. Для выхода из консоли — Ctrl+O.
Автоматический скрипт установки
Все шаги выше собраны в один скрипт. Запускай на чистом Proxmox — получишь рабочий CHR за 2-3 минуты:
#!/bin/bash
echo "=== ШАГ 1: Проверяем версию Proxmox ==="
echo "Убеждаемся что Proxmox актуальный и ядро загружено корректно"
echo "Запускаем -> pveversion"
sleep 3
pveversion
sleep 4
echo ""
echo "=== ШАГ 2: Смотрим доступные хранилища ==="
echo "Выбираем куда скачать образ и куда создать диск VM"
echo "Запускаем -> pvesm status"
sleep 3
pvesm status
sleep 4
echo ""
echo "=== ШАГ 3: Получаем актуальную версию CHR ==="
echo "Запрашиваем у MikroTik последнюю стабильную версию RouterOS 7"
echo "Запускаем -> curl -s https://upgrade.mikrotik.com/routeros/NEWESTa7.stable"
sleep 3
STABLE=$(curl -s https://upgrade.mikrotik.com/routeros/NEWESTa7.stable | awk '{print $1}')
echo "Актуальная версия: $STABLE"
sleep 4
echo ""
echo "=== ШАГ 4: Скачиваем образ CHR ==="
echo "Загружаем RAW disk image CHR прямо на Proxmox в папку для ISO"
echo "Запускаем -> wget https://download.mikrotik.com/routeros/${STABLE}/chr-${STABLE}.img.zip"
sleep 3
cd /var/lib/vz/template/iso/
rm -f chr-*.img chr-*.zip chr-*.zip.*
wget https://download.mikrotik.com/routeros/${STABLE}/chr-${STABLE}.img.zip
sleep 3
echo ""
echo "=== ШАГ 5: Распаковываем образ ==="
echo "Из zip извлекаем RAW img - именно его будем импортировать в VM"
echo "Запускаем -> unzip chr-${STABLE}.img.zip"
sleep 3
unzip chr-${STABLE}.img.zip
sleep 3
echo ""
echo "=== ШАГ 6: Получаем свободный ID для VM ==="
echo "Proxmox сам назначит следующий свободный ID - не будем угадывать"
echo "Запускаем -> pvesh get /cluster/nextid"
sleep 3
VMID=$(pvesh get /cluster/nextid)
echo "Используем ID: $VMID"
sleep 4
echo ""
echo "=== ШАГ 7: Создаём VM ==="
echo "Создаём пустую VM: Linux, 256MB RAM, 1 CPU, один сетевой интерфейс на vmbr0"
echo "Запускаем -> qm create ..."
sleep 3
qm create $VMID --name "mikrotik-chr-${STABLE}" --ostype l26 --memory 256 --cores 1 --cpu host --net0 virtio,bridge=vmbr0
echo "VM $VMID создана"
sleep 4
echo ""
echo "=== ШАГ 8: Импортируем диск ==="
echo "Копируем RAW образ CHR в хранилище local-lvm и создаём диск VM"
echo "Запускаем -> qm importdisk ..."
sleep 3
qm importdisk $VMID /var/lib/vz/template/iso/chr-${STABLE}.img local-lvm
sleep 3
echo ""
echo "=== ШАГ 9: Подключаем диск и настраиваем загрузку ==="
echo "Подключаем импортированный диск как scsi0 и указываем загружаться с него"
echo "Запускаем -> qm set ..."
sleep 3
qm set $VMID --scsi0 local-lvm:vm-${VMID}-disk-0 --scsihw virtio-scsi-single --boot order=scsi0
sleep 4
echo ""
echo "=== ШАГ 10: Добавляем serial консоль ==="
echo "Без serial консоли CHR не откроется в терминале Proxmox"
echo "Запускаем -> qm set $VMID --serial0 socket --vga serial0"
sleep 3
qm set $VMID --serial0 socket --vga serial0
sleep 4
echo ""
echo "=== ШАГ 11: Запускаем VM ==="
echo "Стартуем VM и ждём пока CHR загрузится"
echo "Запускаем -> qm start $VMID"
sleep 3
qm start $VMID
echo "Ждём загрузки CHR..."
sleep 10
echo ""
echo "=== ГОТОВО ==="
echo "VM ID: $VMID"
echo "Версия CHR: $STABLE"
echo "Подключение: qm terminal $VMID"
echo "Логин: admin / пароль пустой (Enter)"
Часть 2: Первая проверка CHR
VM запущена. Подключаемся и смотрим что внутри.
Пошаговое видео, скринкаст консоли:
Интерфейсы
/interface print
Результат:
Flags: R - RUNNING
Columns: NAME, TYPE, ACTUAL-MTU, MAC-ADDRESS
# NAME TYPE ACTUAL-MTU MAC-ADDRESS
0 R ether1 ether 1500 BC:24:11:97:B4:FD
1 R lo loopback 65536 00:00:00:00:00:00
Один интерфейс ether1 — запущен. Всё как ожидали.
IP адрес
/ip address print
Результат:
# ADDRESS NETWORK INTERFACE VRF
0 D 192.168.168.29/24 192.168.168.0 ether1 main
Флаг D означает DHCP. CHR получил адрес автоматически из твоей сети.
Проверка интернета
/ping 8.8.8.8 count=3
Результат:
SEQ HOST SIZE TTL TIME
0 8.8.8.8 56 104 36ms722us
1 8.8.8.8 56 104 37ms758us
2 8.8.8.8 56 104 37ms142us
sent=3 received=3 packet-loss=0% min-rtt=36ms722us avg-rtt=37ms207us max-rtt=37ms758us
Потери 0%, интернет есть. CHR маршрутизирует корректно.
Ресурсы системы
/system resource print
Результат:
uptime: 16m19s
version: 7.22.1 (stable)
build-time: 2026-03-23 14:35:15
factory-software: 7.1
free-memory: 55.1MiB
total-memory: 256.0MiB
cpu: Intel(R)
cpu-count: 1
cpu-frequency: 2494MHz
cpu-load: 1%
free-hdd-space: 69.3MiB
total-hdd-space: 89.2MiB
architecture-name: x86_64
board-name: CHR QEMU Standard PC (i440FX + PIIX, 1996)
platform: MikroTik
256 MiB RAM, из них 55 MiB свободно. Для роутера хватает с запасом.
Первый бэкап
Перед любыми изменениями делаем бэкап. Это правило номер один:
/system backup save name=chr-initial
Проверяем:
/file print
Результат:
# NAME TYPE SIZE LAST-MODIFIED
0 skins directory 2026-04-19 05:24:02
1 chr-initial.backup backup 19.4KiB 2026-04-19 05:45:09
Бэкап есть. Теперь можно двигаться дальше.
Меняем порт SSH
Порт 22 — первое что сканируют боты. Меняем на нестандартный:
/ip service set ssh port=2222
Проверяем подключение на новом порту:
ssh -p 2222 admin@192.168.168.29
Работает — едем дальше. Не работает — подключайся через qm terminal и смотри что пошло не так.
Часть 3: Отключаем лишние сервисы и настраиваем firewall
На чистом CHR запущено много лишнего. Смотрим.
Пошаговое видео, скринкаст консоли:
/ip service print
Результат:
Flags: D - DYNAMIC; X - DISABLED
# NAME PORT PROTO
0 ftp 21 tcp
1 telnet 23 tcp
2 www 80 tcp
3 ssh 2222 tcp
4 winbox 8291 tcp
5 api 8728 tcp
6 api-ssl 8729 tcp
FTP, Telnet, WWW, API — открытые порты без надобности. Оставляем SSH на 2222 и Winbox на 8291, всё остальное закрываем.
Отключаем ненужные сервисы
/ip service disable ftp
/ip service disable telnet
/ip service disable www
/ip service disable api,api-ssl
Проверяем результат:
/ip service print
Должны остаться только SSH на 2222 и Winbox на 8291. Остальные будут с флагом X — disabled.
Базовые правила firewall
Схема простая: разрешаем нужное, остальное дропаем.
Добавляем правила строго в таком порядке:
/ip firewall filter add chain=input connection-state=established,related action=accept comment=accept-established-related
/ip firewall filter add chain=input protocol=icmp action=accept comment=accept-icmp
/ip firewall filter add chain=input protocol=tcp dst-port=2222 src-address=192.168.168.0/24 action=accept comment=accept-ssh-mgmt
/ip firewall filter add chain=input protocol=tcp dst-port=8291 src-address=192.168.168.0/24 action=accept comment=accept-winbox-mgmt
/ip firewall filter add chain=input action=drop comment=drop-all
Проверяем что правила встали правильно:
/ip firewall filter print
Результат:
Flags: X - DISABLED, I - INVALID; D - DYNAMIC
# CHAIN ACTION PROTOCOL SRC-ADDRESS DST-PORT COMMENT
0 input accept established,related accept-established-related
1 input accept icmp accept-icmp
2 input accept tcp 192.168.168.0/24 2222 accept-ssh-mgmt
3 input accept tcp 192.168.168.0/24 8291 accept-winbox-mgmt
4 input drop drop-all
Проверяем что SSH ещё работает после добавления drop:
ssh -p 2222 admin@192.168.168.29
Работает — отлично. Делаем финальный бэкап:
/system backup save name=chr-firewall-basic
Таблица портов
| Сервис | Порт | Протокол | Статус | Доступ |
|---|---|---|---|---|
| FTP | 21 | TCP | отключён | — |
| Telnet | 23 | TCP | отключён | — |
| WWW | 80 | TCP | отключён | — |
| SSH | 2222 | TCP | активен | 192.168.168.0/24 |
| Winbox | 8291 | TCP | активен | 192.168.168.0/24 |
| API | 8728 | TCP | отключён | — |
| API-SSL | 8729 | TCP | отключён | — |
Troubleshooting
qm terminal не открывается — пустой экран
Не добавил serial консоль. Останови VM и добавь:
qm stop 110
qm set 110 --serial0 socket --vga serial0
qm start 110
VM запустилась но CHR не грузится
Диск не подключён как загрузочный. Проверь:
qm config 110 | grep -E "boot|scsi"
Должно быть boot: order=scsi0 и scsi0: local-lvm:vm-110-disk-0. Если нет — повтори шаг 8.
wget сохраняет файл как chr-7.22.1.img.zip.1
Предыдущий архив не удалён. Почисти и качай заново:
rm -f /var/lib/vz/template/iso/chr-*.img /var/lib/vz/template/iso/chr-*.zip*
wget https://download.mikrotik.com/routeros/${STABLE}/chr-${STABLE}.img.zip
SSH не подключается после смены порта
Подключись через консоль Proxmox и проверь что порт сменился:
qm terminal 110
В консоли CHR:
/ip service print
Смотри колонку PORT напротив SSH.
Заблокировал себя firewall-ом
Подключайся через qm terminal 110 — firewall не блокирует консоль Proxmox. Сбрасывай правила:
/ip firewall filter remove [find]
И добавляй заново в правильном порядке.
FAQ
Чем MikroTik CHR отличается от обычного RouterOS?
Только платформой и лицензией. CHR работает как виртуальная машина на x86_64. Команды, конфигурация, логика — всё идентично физическому MikroTik. Бесплатная версия ограничена 1 Mbps на интерфейс. Для снятия ограничения нужна платная лицензия.
Как проверить текущую лицензию CHR?
/system license print
Бесплатная версия покажет free. Для лабораторных задач этого достаточно.
Можно ли увеличить диск CHR после установки?
Да. Останови VM, увеличь диск в Proxmox и запусти снова — RouterOS увидит новый размер автоматически:
qm stop 110
qm disk resize 110 scsi0 +8G
qm start 110
Как удалить CHR и начать заново?
qm stop 110
qm destroy 110 --purge
rm -f /var/lib/vz/template/iso/chr-*.img /var/lib/vz/template/iso/chr-*.zip*
Почему SSH просит пароль на каждую команду в скрипте?
Каждый вызов ssh в bash — это новая сессия. Решается двумя способами: передавать пароль через sshpass или настроить SSH-ключи. Для продакшна — только ключи. Для тестового стенда — sshpass достаточно.
Что дальше
CHR установлен, базовая защита настроена. Лишние сервисы отключены, firewall закрывает всё кроме SSH и Winbox из локальной сети.
Это первая статья цикла по MikroTik CHR. Следующая — полная настройка безопасности: SSH только по ключам, смена имени устройства, защита от брутфорса, настройка NTP и логирования.
Оставайтесь на связи
Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.
Подписаться на IT-Аптеку →



Поставил CHR на Proxmox по статье. Работает отлично. Один вопрос — какую лицензию брать если использую только для тестов и обучения? P1 хватит или лучше сразу P10?
Для тестов и обучения P1 более чем достаточно — 1 Гбит/с пропускная способность, все функции RouterOS доступны. Ограничение P1 только в скорости туннелей, для лабораторных задач это не важно. P10 берут когда нужна реальная производительность в продакшне. Кстати trial лицензия на 60 дней бесплатна и тоже подходит для изучения.
А CHR на Proxmox нормально работает с SR-IOV для прямого доступа к сетевой карте? Хочу потестить производительность маршрутизации без виртуального свитча.
SR-IOV с CHR работает — нужна поддержка SR-IOV на сетевой карте (Intel X540, X550, Mellanox) и включить её в BIOS/UEFI. В Proxmox добавляешь VF как PCI device к ВМ. CHR увидит её как обычную сетевую карту. Производительность значительно выше чем через virtio — можно выжать почти линейную скорость. Для тестов маршрутизации это хороший вариант.
Спасибо за статью! Настроил CHR, хочу сделать несколько инстансов для разных тестов. Можно ли клонировать ВМ с CHR или надо каждый раз устанавливать заново?
Клонировать можно — в Proxmox правая кнопка на ВМ → Clone. Но учти что лицензия CHR привязана к hardware ID который формируется из параметров виртуального железа. При клонировании ID может измениться и понадобится переактивация. Trial лицензия активируется автоматически, платные нужно переносить через аккаунт MikroTik.