Pull to refresh

Comments 18

UFO just landed and posted this here
Я рассказал как, но зачем — это уже другой вопрос :)
В основном этот гайд пригодится тем кто имел дело и привык работать с RouterOS.

Ну например если у вас вся инфраструктура построенна на микротиках, вы наверняка захотите иметь единый и стандартизированный интерфейс на всех устройвах, ну или если вы просто захотите сделать выходной узел для вашего домашнего mikrotik-роутера.

Так же RouterOS из коробки поддерживает кучу полезных функций и единый интерфейс к ним, которые сразу же можно использовать не углубляясь в тонкости настройки аналогичных демонов под linux.
Затем же, зачем продают Juniper vSRX и vMX, и Cisco CSR 1000v и ISRv, и HPE VSR, и еще множество, множество других: перенос всей инфраструктуры в «облака», включая привычное сетевое окружение.
Практически любой сетевой вендор сейчас предоставляет свои решения в виртуализированном виде (при чем, во многих случаях, НЕ дешевле аналогичного по х-кам железного устройства).
К примеру, те же корпоративные VPN, завязанные на внутренние каталоги юзеров. Далеко не всегда эту часть взять и перенести на то, что предоставляется провайдером облака.
Как вариант, у меня стоит для The Dude. Лицензию L4 получил на последнем MUM в Екатеринбурге. Образ прикрутил в LVM под Centos 7 для QEMU

Как я это делал
Собственно ставим пакеты, запускаем демона, качаем и создаем образ в LVM, настраиваем сеть и создаем виртуальную машину. Виртуальная машины будет запускаться автоматически.

sudo yum install -y qemu-kvm libvirt libvirt-python python-virtinst libguestfs-tools virt-install
sudo systemctl enable libvirtd
sudo systemctl start libvirtd
sudo reboot

sudo mkdir /mnt/storage/mikrotik
cd /mnt/storage/mikrotik
sudo wget https://download.mikrotik.com/routeros/6.41.3/chr-6.41.3.img.zip
sudo unzip chr-*.img.zip
ls -la chr-*.img
	-rw-r--r--. 1 root root 134217728 мар 12 12:54 chr-6.41.3.img
sudo lvcreate -L134217728b ba_server -n dude
sudo dd if=/mnt/storage/mikrotik/chr-6.41.3.img of=/dev/ba_server/dude bs=2M

sudo cp /etc/sysconfig/network-scripts/ifcfg-{enp2s0,br0}
sudo vim  /etc/sysconfig/network-scripts/ifcfg-enp2s0
	DEVICE=enp2s0
	ONBOOT=yes
	BRIDGE=br0
sudo vim  /etc/sysconfig/network-scripts/ifcfg-br0
	TYPE=Bridge
	BOOTPROTO=static
	IPADDR=192.168.133.280
	NETMASK=255.255.255.0
	GATEWAY=192.168.133.1
	DNS1=192.168.133.1
	DEVICE=br0
	ONBOOT=yes
	ZONE=public
sudo systemctl restart network

sudo virt-install --connect qemu:///system --name='dude' --description='dude' --ram=512 --vcpus=1 --network bridge=br0,model=e1000 --disk path=/dev/ba_server/dude,bus=ide --os-type='other' --os-variant='generic' --nographics --hvm --boot hd --autostart

лицензии обратно совместимы
License L4/P1 License L5/P10 License L6/PU
и продают их так же
хм… не знал…
лицензии просто до этого юзал только что с железом шли…
а тут фряшная с ограничением в 1 мегабит… как-то совсем мало… ну хоть бы 10 сделали чтоли :)

У меня вот есть два CHR в Германии и Японии, через них я маршрутизирую свой домашний трафик по нужным мне правилам (например, до Кореи у меня трафик по умолчанию бегает через Америку, а до Японии — напрямую, поэтому я завернул трафик в Корею через CHR который в Японии).
Я конечно понимаю что все можно сделать на какой-нибудь чистой убунте/дебиане/центоси, но лично мне привычнее и удобнее поднять EoIP туннели парой кликов, ну и просто отсутствие зоопарка разных осей на маршрутизаторах (дома у меня Mikrotik).


P/S/

Я не говорю что все должны так делать, это может быть очень не правильно и за это может быть мне стоит оторвать руки =)

С одной стороны баян страшный, но мысль про tmpfs здравая
С другой стороны, например я перед ребутом, но после раскатки образа еще и прописываю внутрь скрипт, который меняет пароль администратора и прописывает правильные IP адреса и шлюзы, иначе можно потом и не подключиться, а не все облака дают доступ к консоли

например так (примем что сеть это eth0)
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=root password=пароль
" > /mnt/rw/autorun.scr && \
umount /mnt

При всем уважении к топикстартеру — не «на любой облачной виртуалке». CHR не умеет грузиться с дисков, представленных в виртуальной машине через виртуальный контролер scsi или sata. Только ide. Причем именно грузиться, работать после загрузки, например, со вторым диском — может. Пруф: «SCSI controller Hyper-V and ESX is usable just for secondary disks, system image must be used with IDE controller!», источник. А т.к. многие провайдеры vps по умолчанию предоставляют виртуалки именно с контроллерами scsi — на таких виртуалках после вышеописанных процедур вы увидите в консоли сообщение о начале загрузки RouterOS, а затем ошибку «Disk not found!». Ну или ничего не увидите — как [не]повезет. :) Лечение — просим техподдержку изменить виртуальный контроллер на ide. Или делаем это сами, если интерфейс управления виртуалкой это позволяет. Информация актуальна для релизов CHR до 6.41.1. Позднее — не проверял.
Важное замечание, сейчас проверил: SATA и правда не поддерживается.
Но совершенно точно работает с VIRTIO и IDE.
только что загрузил образ RouterOS chr-6.39.3.img на SDA. перезагрузился — все работает. попробовал еще раз — все норм. Aruba. виртуализация вроде esxi…
UPDATE: Начиная с какого-то релиза CHR таки-научили норм грузицца в том числе и с виртуального SCSI. Проверено на 6.44.1 — работает, без необходимости обращения в техподдержку провайдера для замены виртуального контроллера на IDE.

Хорошая первоапарельская шутка. Особенно sync в конце, который записывает данные старой файловой системы поверх новой. Частично.

Ок, заменил команду sync на флагoflag=sync для dd, спасибо за замечание.

В принципе сработать может, но пропущены важные детали. Сначала, перед всем этим, надо рут имеющейся виртуалки перемонтировать в read-only. А во-вторых, что делать с загрузчиком? Он же окажется не на прежнем месте.
Ребята и kvaps!

Сделал все по инструкции, Ubuntu 16.04.
На строке echo 1 > /proc/sys/kernel/sysrq машина ушла в ребут.
Вторая строка, видимо, уже не была воспринята: echo b > /proc/sysrq-trigger

Получил после ребута:
Booting from Hard Disk
Loading system with initrd
ERROR: no system package found!
Kernel panic - not syncing: Attempting to klll init!
Rebooting in 1 seconds...
Sign up to leave a comment.

Articles