… или другой Linux-хостинг.
Сразу оговорюсь, что поскольку мне в процессе всех экспериментов уже поднадоело сносить и заново настраивать дроплет в DO, пример я буду выполнять в VMware ESXi, но на конечный результат это влиять не будет, команды все будут те же самые, в принципе, это применимо к любому облачному VPS хостингу, где у нас есть доступ по SSH.За основу взят доклад Дмитрия Пичулина deemru на прошедшем 30 сентября MUM в Москве. В отличии от доклада Дмитрия, в данной статье не будет рассматриваться вопросы выбора хостинга и цен на него (в стремлении намутить облачный роутер подешевле), настройки полученного устройства. Рассмотрена будет лишь техническая сторона вопроса и решены пара проблем.
Вернувшись с MUM, я был в предвкушении, руки чесались запилить Mikrotik на Digital Ocean (в тот момент, там была Ubuntu Server, которая выполняла функции VPN-сервера). Полез смотреть архив выступлений, но его ещё не было и я написал письмо Дмитрию с просьбой поделиться слайдами. Получив презентацию, с холодной головой ринулся в бой — ломать свой дроплет полностью. Сделал всё, как в презентации, всё завелось. Легче и придумать нельзя. Скачиваем на хостинг образ, распаковываем, переводим файловую систему в read-only, заливаем образ на диск через dd. Но тут то меня и подстерегала первая нестыковочка — у Дмитрия при первой загрузке CHR автоматически произошло расширение файловой системы и она заняла весь диск, у меня же этого не произошло и пришлось довольствоваться 128 МБ.
Кто-то скажет 128 МБ на роутере хватит всем. Но меня эта ситуация в корне не устраивала, поэтому я принялся её устранять. Всем известно, что RouterOS основана на Linux, но от Linux'а там мало что осталось, поэтому после установки системы, её штатными средствами переразметить диск уже нельзя. Нельзя и загрузиться с какого-нибудь LiveCD и переразметить в нём (ну по крайней мере у DO нельзя). Попытки тыкаться fdisk'ом и parted'ом после заливки образа на диск, но до перезагрузки так же не привели к какому-либо положительному результату (эффекта либо не было вообще, либо я получал не загружающуюся систему).
Нормальные герои всегда идут в обход.
Итак для того чтобы получить RouterOS, установленную на Digital Ocean, в которой доступно 20 ГБ дискового пространства (ну или сколько там у Вас по тарифу) нам потребуется:
- Собственно, сам droplet с установленным Linux дистрибутивом (в данном случае дистрибутив будет Ubuntu Server 16.04 x64, а вместо droplet'а будет виртуальная машина в ESXi, но ещё раз повторюсь, что роли это не сыграет), к которому у нас есть доступ по SSH.
- Установленный на компьютере или сервере гипервизор (изначально я делал в VirtualBox, сейчас буду делать опять же в ESXi, на конечный результат это не влияет).
- LiveCD вашего любимого Linux-дистрибутива (желательно, чтобы там был GUI, так будет удобнее).
Как вы видете, список не очень большой, каких-то особых требований к его пунктам нет, решение я старался сделать максимально универсальным и простым, чтобы можно было всё соорудить буквально на коленке из того, что есть.
Начнём с дроплета.
Нам нужно выяснить, какого объёма нам нужен диск в виртуальной машине, поэтому:
fdisk -l /dev/sda
Диск /dev/sda: 16 GiB, 17179869184 байтов, 33554432 секторов
Единицы измерения: секторов из 1 * 512 = 512 байтов
Размер сектора (логический/физический): 512 байт / 512 байт
I/O size (minimum/optimal): 512 bytes / 512 bytes
Тип метки диска: dos
Идентификатор диска: 0x7b5dbf9c
Устр-во Загрузочный Start Конец Секторы Size Id Тип
/dev/sda1 * 2048 31457279 31455232 15G 83 Linux
/dev/sda2 31459326 33552383 2093058 1022M 5 Расширенный
/dev/sda5 31459328 33552383 2093056 1022M 82 Linux своп / Solaris
Как мы видим, у нас диск 17179869184 байт, запомним это значение.
Подготовка промежуточной машины
В гипервизоре создаём новую виртуальную машину. Её параметры особого значения не имеют, но можно, к примеру сделать их близкими к характеристикам дроплета. Размер диска лучше сделать с небольшим запасом, на всякий случай (почему-то 20ГБ в DO оказались меньше 20ГБ в VirtualBox). Настраиваем загрузку виртуальной машины с LiveCD.
Включаем её и после загрузки скачиваем любым удобным способом последнюю версию CHR, которую можно найти по ссылке:
Нам нужен образ Raw disk image (к примеру chr-6.37.1.img.zip). Распаковываем архив:
unzip chr-6.37.1.img.zip
Archive: chr-6.37.1.img.zip
inflating: chr-6.37.1.img
И заливаем образ на жёсткий диск с помощью dd (Дмитрий тут использовал утилиту pv, но я, если честно не вижу в этом смысла, т.к. образ маленький и разворачивается довольно быстро):
dd if=chr-6.37.1.img.zip of=/dev/sda
262144+0 records in
262144+0 records out
134217728 bytes (134 MB, 128 MiB) copied, 5.64304 s, 23.8 MB/s
вместо sda нужно указать ваш диск, его имя может отличаться.
Расширяем файловую систему RouterOS
Любители всё делать в консоли могут делать там, мне показалось быстрее и проще сделать всё в GParted.
Запускаем GParted, выбираем диск, на который установили RouterOS и с помощью функции Resize/Move увеличиваем размер второго раздела. Обратите внимание, что размер раздела за вычетом размера первого раздела не должен превышать размер диска Вашего дроплета, который мы посмотрели в самом начале (т.е. первый раздел у нас 32 МиБ, значит второй должен быть не более 17179869184 байт / 1048576 = 16384 МиБ и — 32, т.е. 16352 МиБ)
Не забываем применить изменения разметки диска.
Создаём новый образ и жмём его с помощью gzip:
dd if=/dev/sda bs=8196 count 17000 | gzip -9cf > chr.img.gz
17000+0 records in
17000+0 records out
139332000 bytes (139 MB, 133 MiB) copied, 3.30824 s, 42.1 MB/s
Значение 17000 мы получаем путём приведения размера образа при его развёртывании на диск. Там было 128 МиБ, т.е. 128 * 1024 = 131072 КиБ разделим размер на размер блока и округлим 131072 / 8 = 16384 ? 17000 блоков.
Заливаем полученный образ на дроплет и устанавливаем его
scp chr.img.gz user@host:~/
Где user — имя пользователя на вашем дроплете, а host — его адрес. Копирование будет выполняться в домашний каталог пользователя.
Принимаем сертификат ssh сервера, и вводим пароль, когда нас об этом попросят. После окончания копирования, эта виртуальная машина нам больше не понадобится.
Переходим на наш дроплет. Можно подключиться к нему по ssh или зайти через консоль. Убедимся, что наш образ скопировался, желающие могут проверить контрольные суммы. Переведём файловую систему в режим read-only и развернём образ на диск через gzip и dd:
echo u > /proc/sysrq-trigger && gunzip -c chr.img.gz | dd of=/dev/vda
Всё! CHR установлен на наш дроплет. Перезагрузимся:
reboot
Вас приветствует Mikrotik Cloud Hosted Router
После перезагрузки входим под пользователем admin без пароля, после чего задаём пароль, прописываем ip адрес и дефолтный маршрут:
/system user set admin password=YOURPASSWORD
/ip address add address=YOUR.IP.ADD.RESS/MASK
/ip route add gateway=YOUR.GATE.WAY.IP
После чего можно подключаться к нему и настраивать через Winbox.
Заключение
На доступном месте можно установить внутри RouterOS виртуальную машину с Linux или использовать его как-нибудь иначе — на Ваше усмотрение (поднять FTP сервер или ещё что-нибудь).
Ссылки:
Презентация Дмитрия в фомате PDF
Запись его выступления
На всякий случай, ссылка на готовый образ под файловую систему на 20 ГБ (т.е. минимальный тариф DO за 5$)
Комментарии (10)
Kliba
11.10.2016 20:24Насчет увеличения места на диске — а чем не устроил вариант описанный тут — http://forum.mikrotik.com/viewtopic.php?t=98981? ИМХО он проще несколько, чем описанное вами в статье.
GeXoGeN
11.10.2016 20:27+1Потому что в том варианте мы увеличиваем размер файла образа, файловая система и раздел sda2/vda2 остается размером 128 Мбайт. На VirtualBox, VMware при первой загрузке RouterOS растягивает раздел, занимая всё доступное свободное место. На DO этого по какой-то причине не происходит. Моя статья как раз о способе побороть это.
edinorog
13.10.2016 03:40Не совсем понял одну вещь. Предположим я развернул лицензию на виртуалке. Виртуалка изволила сдохнуть. Является ли лицензия переносимой? Или идёт привязка к данной конкретной машине после Ее активации?
GeXoGeN
13.10.2016 07:12+1Лицензии переносимые. Перенос делается в три клика в личном кабинете на сайте микротика.
vetash
13.10.2016 23:59+2Кто будет юзать CHR на XEN — необходимо в конфиге жестко установить uuid иначе system id сгенерируется заново после перезагрузки DOMU и лицензия тоже слетит.
Делается так:
```
# 128-bit UUID for the domain as a hexadecimal number.
# Use «uuidgen» to generate one if required.
# The default behavior is to generate a new UUID each time the guest is started.
#uuid = «XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX»
```
istui
Для тех кто не в курсе — на каких условиях предоставляется CHR и какие кейсы его применения?
GeXoGeN
Есть 4 уровня лицензирования: free — имеет ограничение 1 мбит/с на каждый интерфейс, p1 — ограничение 1 гбит/с на интерфейс, p10 — 10 гбит/с на интерфейс, и p-unlimited — без ограничений. Других ограничений в рамках лицензии нет — любое количество туннелей и пользователей. Так же есть 60-дневный триал. P1 лицензия стоит 2260 рублей.
Кейсы — например, в моём случае — это просто VPN сервер и тестовая площадка, можно использовать его в качестве шлюза, если у Вас виртуальные машины в одной сети находятся (никто же не заставляет вас его именно в облако устанавливать), можно как обычный x86 RouterOS использовать (на сколько я понимаю, от неё он отличается моделью лицензирования).
vetash
Насколько я понял можно обновлять триал столько раз сколько хочеться. Что говорят сами Mikrotik по этому поводу?
GeXoGeN
на MUM'е представители Mikrotik загадочно улыбались в ответ