Установка Mikrotik Cloud Hosted Router на VPS хостинг Digital Ocean

… або інший 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 ГБ дискового простору (ну або скільки там у Вас за тарифом) нам буде потрібно:

  • Власне, сам води з встановленим дистрибутивом 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.

image

Включаємо її і після завантаження завантажуємо будь-яким зручним способом останню версію CHR, яку можна знайти на за адресою:

image

Нам потрібен образ 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 Міб)

image

Не забуваємо застосувати зміни розмітки диска.

Створюємо новий образ і тиснемо його з допомогою 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
@gexogen — обманщик!!!насправді, хоч я і обіцяв, що немає ніякої різниці, в Digital Ocean ми це робимо або в ESXi, різниця все-таки є. В DO все працює, а от ESXi після перезавантаження впав у Kernel Panic. Але, в ESXi файлова система розтягується і так при першому завантаженні і дані маніпуляції не потрібні.

Після перезавантаження входимо під користувачем admin без пароля, після чого ставимо пароль, прописуємо ip адреса і дефолтний маршрут:

/system set user admin password=YOURPASSWORD
/ip address add address=YOUR.IP.ADD.RESS/MASK
/ip route add gateway=YOUR.GATE.WAY.IP
Після чого можна підключатися до нього і налаштовувати через Winbox.

Висновок
image

На доступному місці можна встановити всередині RouterOS віртуальну машину з Linux або використовувати його як-небудь інакше — на Ваш розсуд (підняти FTP сервер або ще що-небудь).

Посилання:
Презентація Дмитра в форматі PDF
Запис його виступу
На всяк випадок, посилання на готовий образ під файлову систему на 20 ГБ (тобто мінімальний тариф DO за 5$)
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.