MikroTik CHR — это полноценный RouterOS, только не на железной коробке, а на арендованной виртуалке. За пару сотен рублей в месяц вы получаете в облаке роутер с белым IP: VPN-сервер, IPIP/WireGuard-туннели до офиса, маршрутизация, failover — всё, что умеет MikroTik, но на VPS. Ставится он не как обычный софт: образ RouterOS нужно записать прямо на системный диск виртуалки, затерев установленную там Linux. Сам процесс — минут на десять, но есть два места, где спотыкаются почти все: маска /32 у хостера и урезанное busybox-окружение в режиме восстановления. Разберём установку от и до, с обоими подводными камнями.

Что понадобится

  • VPS с Ubuntu/Debian (свежесозданный — его не жалко) и доступом к VNC-консоли и режиму восстановления в панели хостера
  • Внешний IP виртуалки и адрес шлюза — у многих провайдеров маска будет /32
  • Ссылка на RAW-образ CHR с официального сайта MikroTik (раздел Cloud Hosted Router), под нужную архитектуру: chr-<версия>.img.zip для x86 или chr-<версия>-arm64.img.zip для arm64

Шаг 1. Снимаем сетевые параметры

Заходим на свежий VPS по SSH и записываем то, что понадобится и в recovery, и потом внутри CHR — свой IP с маской, шлюз и имя диска:

# внешний IP и маска (часто /32)
ip -c a
# шлюз по умолчанию — строка default via ...
ip -c r
# имя системного диска
lsblk

Диск чаще всего /dev/vda, реже /dev/sda или /dev/vdb — ошибётесь целью, затрёте не тот диск, так что сверьтесь с lsblk заранее.

Про маску /32. У части хостеров адрес выдаётся с маской /32, а шлюз лежит в другой подсети. Это и есть первая «мина»: после установки CHR не увидит шлюз, дефолтный маршрут станет inactive, и роутер останется без интернета. Решение — на шаге 4, но параметры записать нужно сейчас.

Шаг 2. Recovery-режим и сеть в нём

В панели хостера включаем у виртуалки режим восстановления и открываем VNC-консоль. Первым делом проверяем, есть ли в recovery интернет:

ping -c3 8.8.8.8

Если пинги идут — сеть уже поднята, переходите к шагу 3. Если нет — настраиваем вручную. И тут вторая «мина»: в busybox-recovery привычного nmcli нет (выдаёт not found), поэтому поднимаем сеть напрямую через ip. Шлюз из чужой подсети (та самая /32) добавляется с флагом onlink — без него ядро откажется ставить дефолт:

ip link set eth0 up
ip addr add 176.108.250.14/32 dev eth0
ip route add default via 10.0.0.1 dev eth0 onlink

DNS (если корень смонтирован только на чтение — сначала перемонтируем на запись):

mount -o remount,rw /
echo "nameserver 8.8.8.8" > /etc/resolv.conf

Подставьте свои IP и шлюз. Имя интерфейса, если eth0 не подходит, уточняется через ip -br link — бывает ens3, enp1s0 и т.п. Проверяем: ping -c3 google.com.

Шаг 3. Скачиваем и пишем образ на диск

Дальше — скачать образ, распаковать и записать на диск. В busybox два нюанса, из-за которых «команда из интернета» обычно не работает: распаковщика funzip там нет, а dd не понимает флаг oflag=sync. Поэтому распаковываем через gunzip (он есть как встроенный applet и нормально разворачивает .img.zip MikroTik), а синхронизацию делаем через conv=fsync. Распаковку и запись держим раздельно — так видно, что образ развернулся целым:

cd /tmp
wget --no-check-certificate -O chr.img.zip \
  https://download.mikrotik.com/routeros/7.21.5/chr-7.21.5-arm64.img.zip

# сверяем контрольную сумму (SHA256 — со страницы загрузки MikroTik)
echo "<SHA256>  chr.img.zip" | sha256sum -c

# распаковываем — получаем chr.img
gunzip -c chr.img.zip > chr.img

# пишем образ на диск — ВНИМАНИЕ: затирает систему целиком
dd if=chr.img of=/dev/vda bs=4M conv=fsync

Про сертификат. В голом recovery-окружении часто нет пакета CA, и wget ругается на сертификат. Флаг --no-check-certificate снимает проверку, но тогда обязательна сверка sha256sum — она гарантирует, что скачался ровно официальный образ, а не подмена. Контрольная сумма берётся со страницы загрузки MikroTik под конкретную версию. Если wget ругается на сертификат при установленных CA — проверьте дату (date): при сбитом времени проверка сертификата ломается.

Шаг 4. Первый вход и настройка сети в CHR

Возвращаемся в панель, выключаем режим восстановления и ждём загрузки в обычном режиме. Снова открываем VNC — теперь там приглашение RouterOS. Логин admin, пароль пустой (Enter). Лицензионное соглашение пропускаем (n), затем система попросит задать пароль.

Теперь — та самая развязка истории с маской /32. Если просто добавить адрес и маршрут, дефолт окажется inactive: CHR не видит шлюз, потому что тот в другой подсети. Лечится параметром network=<шлюз> при добавлении адреса — он и позволяет роутеру «дотянуться» до шлюза:

/ip address add address=176.108.250.14/32 interface=ether1 network=10.0.0.1
/ip route add gateway=10.0.0.1 dst-address=0.0.0.0/0 check-gateway=none distance=1
/ip dns set servers=8.8.8.8,8.8.4.4

Где 176.108.250.14/32 — ваш IP, 10.0.0.1 — ваш шлюз. Проверяем связь:

/ping google.com

Пошли ответы — CHR установлен и в сети. Дальше можно заходить в Webfig или WinBox.

Доводим до продакшена

Отдельный пользователь вместо admin. Свежий CHR в интернете почти сразу начинают перебирать боты. Заводим своего пользователя, а дефолтного admin после релогина удаляем:

/user add name=noc group=full password="СИЛЬНЫЙ_ПАРОЛЬ"
# перелогиниваемся под новым пользователем, затем:
/user remove admin

Гасим лишние сервисы. По умолчанию CHR слушает telnet, ftp, http, ssh, api, winbox и ssl-api — большинство из них наружу не нужны и только расширяют поверхность атаки. Оставляем необходимое, остальное выключаем, а SSH заодно переносим на нестандартный порт:

/ip service disable telnet,ftp,www,api,api-ssl
/ip service set ssh port=59871

Лицензия. Бесплатная лицензия CHR работает бессрочно, но режет скорость до 1 Мбит/с на интерфейс — для VPN-сервера или лаборатории этого нередко хватает. Нужно быстрее — есть 60-дневный триал (запрашивается с роутера под аккаунтом mikrotik.com) и платные уровни P1/P10/P-Unlimited. Проверить текущий статус:

/system license print

Бэкап. Как только базовая настройка готова — снимите экспорт конфигурации (/export file=chr-base) и заберите его с роутера. Восстановиться из текстового бэкапа сильно быстрее, чем повторять всю установку с нуля.

Проверка

Финальный чек-лист перед тем, как считать роутер готовым:

# интернет есть
/ping google.com
# лицензия в нужном статусе
/system license print
# лишние сервисы выключены
/ip service print
# дефолтный маршрут активен (не inactive!)
/ip route print where dst-address=0.0.0.0/0

Если маршрут 0.0.0.0/0 показывается активным, а пинги наружу идут — установка прошла корректно, и network= сделал своё дело.

Схема обкатана в продакшене на VPS разных провайдеров, включая arm64-инстансы с busybox-recovery. Если нужна помощь с установкой CHR, поднятием VPN-сервера, туннелей до офиса или сетевой инфраструктурой на MikroTik — оставьте заявку, поможем.