RADIUSdesk

Flash OpenWRT onto Mikrotik RB750Gr3

Introduction

  • Mikrotik is a very popular supplier of networking equipment.
  • They have their own operating system called RouterOS which most probably is Linux based.
  • RouterOS however is licensed and includes different levels of licensing for different functionalities.
  • To unlock a needed feature not included with the current license then requires you to upgrade which obviously involves cost.
  • However, the hardware itself is good and durable and it is easy to source all over the world.
  • Some of their models are also able to run OpenWRT as an alternative to RouterOS.
  • OpenWRT is OpenSource and there is no paid for licensing involved on OpenWRT.
  • This page will just cover the flash from RouterOS to OpenWRT on the Mikrotik RB750Gr3.
  • We will cover the configuration of the device once OpenWRT is running on it on a separate page.

You will need

  • Linux based machine to communicate with the Mikrotik and supply the OpenWRT firmware over the network.
  • Mikrotik RB750Gr3 reset to factory defaults
  • 1xCat5 LAN cable.

Flash Process

  • The flash process is fairly simple and straight forward and involves three steps
    1. Export the RouterOS License Key.
    2. Load a RAM based version of OpenWRT.
    3. Flash the permanent (Flash) version of OpenWRT using the RAM based version.

Export the RouterOS License Key

  • It is recommended that you export the RouterOS license key in the event of returning to the original RouterOS, you might need to use it again to activate the RouterOS.
  • RouterOS can be accessed in various ways which include
    • Web based UI called Webfig (default http://192.168.88.1) on the LAN side of the board
    • Using the WinBox application.
  • Unfortunately the Webfig interface does not support the export of the license key. (Only upgrade)
  • We have to use WinBox for that.

Running WinBox on Ubuntu 20.04

  • WinBox is a windows based program but since its a simple program its just as easy to run it on Ubuntu using Wine.
  • We assume you have a standard install of Ubuntu 20.04 (with some GUI)
  • Install Wine
sudo apt-get install wine
#cd to where the winbox64.exe program is
wine winbox64.exe
  • Configure the LAN port of your Ubuntu machine to have an IP Address on the 192.168.88 subnet.
#Here our LAN interface is enp8s0 
#Use ip a to discover what it is caleld on your machine
sudo ip addr add 192.168.88.10/24 dev enp8s0
  • Use the LAN cable to connect to any of the LAN ports on the Mikrotik (2-5) to your Ubuntu machine.
  • Go to the Neighbors tab and see if the device is listed.
  • Click on the listed device and click Connect to enter into its configuration.
  • Select SystemLicense
  • Click on Export Key to export it.
  • Store it on a safe place

Now that we have the license key taken care of we can go to the next step which is to load the RAM based OpenWRT onto the device

Load a RAM based version of OpenWRT

  • In order for us to get the RAM based version of OpenWRT onto the Mikrotik two things are involved.
    1. There has to be a BOOTP environment set up to serve the RAM based image
    2. The Mikrotik has to be set in such a mode as to use the BOOTP environment to fetch the RAM based image using BOOTP

Set up a BOOTP Environment

  • On Ubuntu it is very simple and we just create a small shell script to take care of it
loader.sh
#!/bin/bash
#HEADS UP substitute with the logged in user's name that you use to create this file e.g. whoami output
USER=system
#HEADS UP THIS MUST MATCH YOUR MACHINE'S LAN INTERFACE
IFNAME=enp8s0
/sbin/ip addr replace 192.168.1.10/24 dev $IFNAME
/sbin/ip link set dev $IFNAME up
/usr/sbin/dnsmasq --user=$USER \
--no-daemon \
--listen-address 192.168.1.10 \
--bind-interfaces \
-p0 \
--dhcp-authoritative \
--dhcp-range=192.168.1.100,192.168.1.200 \
--bootp-dynamic \
--dhcp-boot=openwrt-19.07.6-ramips-mt7621-mikrotik_rb750gr3-initramfs-kernel.bin \
--log-dhcp \
--enable-tftp \
--tftp-root=$(pwd)
  • As you can see we will serve the openwrt-19.07.6-ramips-mt7621-mikrotik_rb750gr3-initramfs-kernel.bin image to the Mikrotik.
  • Download this image (This was the latest 19.07 based image at the time of this writing - PLEASE CHECK IF ITS STILL THE LATEST!)
  • Make sure it is located in the same directory as the loader.sh script.
  • Do the following to start up the BOOTP service
#CD to where the RAM image and loader.sh files are
chmod 755 ./loader.sh
sudo ./loader.sh
#WE get the following output
[sudo] password for system: 
dnsmasq: started, version 2.80 DNS disabled
dnsmasq: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth nettlehash DNSSEC loop-detect inotify dumpfile
dnsmasq-dhcp: DHCP, IP range 192.168.1.100 -- 192.168.1.200, lease time 1h
dnsmasq-tftp: TFTP root is /home/system/Documents/mt_flash 
  • Our BOOTP environment is now ready for action.
  • Next we will make the Mikrotik use this environment to load the RAM image

Force Mikrotik to use BOOTP

We add a note on setting the Mikrotik up to do BOOTP
Kicking off BOOTP
  • To force the Mikrotik to use the BOOTP environment you need to connect the Internet Port of the Mikrotik to your Linux machine. (Internet Port is Port 1 on the Mikrotik)
  • Press the RESET button while powering up the board.
  • Wait for the first beep and release the RESET button.
  • This is what our dnsmasq script outputs during the process
dnsmasq-dhcp: 274610437 available DHCP range: 192.168.1.100 -- 192.168.1.200
dnsmasq-dhcp: 274610437 vendor class: MMipsBoot
dnsmasq-dhcp: 274610437 tags: bootp, enp8s0
dnsmasq-dhcp: 274610437 BOOTP(enp8s0) 192.168.1.144 48:8f:5a:e3:d4:9c 
dnsmasq-dhcp: 274610437 bootfile name: openwrt-19.07.6-ramips-mt7621-mikrotik_rb750gr3-initramfs-kernel.bin
dnsmasq-dhcp: 274610437 next server: 192.168.1.10
dnsmasq-dhcp: 274610437 sent size:  4 option:  1 netmask  255.255.255.0
dnsmasq-dhcp: 274610437 sent size:  4 option: 28 broadcast  192.168.1.255
dnsmasq-dhcp: 274610437 sent size:  4 option:  3 router  192.168.1.10
dnsmasq-tftp: sent /home/system/Documents/mt_flash/openwrt-19.07.6-ramips-mt7621-mikrotik_rb750gr3-initramfs-kernel.bin to 192.168.1.144
  • The USR LED will blink while OpenWRT is busy booting itself.
  • After a while it will stop and this should happen on the output of the dnsmasq script
....
dnsmasq-dhcp: 3516861450 available DHCP range: 192.168.1.100 -- 192.168.1.200
dnsmasq-dhcp: 3516861450 vendor class: udhcp 1.30.1
dnsmasq-dhcp: 3516861450 client provides name: OpenWrt
dnsmasq-dhcp: 3516861450 DHCPDISCOVER(enp8s0) 48:8f:5a:e3:d4:9e 
dnsmasq-dhcp: 3516861450 tags: enp8s0
dnsmasq-dhcp: 3516861450 DHCPOFFER(enp8s0) 192.168.1.146 48:8f:5a:e3:d4:9e 
dnsmasq-dhcp: 3516861450 requested options: 1:netmask, 3:router, 6:dns-server, 12:hostname, 
....
  • This simply means that OpenWRT are now fully booted and actually looking for an IP Address itself!
  • You can now (While the board is still powered up) move the cable to any of the LAN ports of the Mikrotik
  • Terminate the loader.sh script
  • Reconfigure the LAN interface on the Linux machine to have IP 192.168.1.10
 sudo ip addr add 192.168.1.10/24 dev enp8s0
  • Connect to OpenWRT on 192.168.1.1
    • You can connect using Luci on http://192.168.1.1
    • Alternatively you can use ssh to connect to 192.168.1.1
  • We are all set now to flash the final version of OpenWRT onto the device.
  • At this stage you can still return the device back to the original RouterOS by simply rebooting it since the OpenWRT running is all in RAM.
  • We are however not going to do that since we want to move over to OpenWRT permanently :-)

Flash the permanent version of OpenWRT

  • Download the sysupgrade version of the firmware.
  • Ours is called openwrt-19.07.6-ramips-mt7621-mikrotik_rb750gr3-squashfs-sysupgrade.bin at the time of this writing.
  • We will show the shell commands to do the flash but the Luci GUI should work just as well
#Copy the *sysupgrade* file to the /tmp dir on the Mikrotik
scp openwrt-19.07.6-ramips-mt7621-mikrotik_rb750gr3-squashfs-sysupgrade.bin root@192.168.1.1:/tmp
#SSH into the Mikrotik
ssh root@192.168.1.1
#Change directory to /tmp
cd /tmp
#Do a sysupgrade 
sysupgrade openwrt-19.07.6-ramips-mt7621-mikrotik_rb750gr3-squashfs-sysupgrade.bin
#USR LED will flash while it is writing to flash
#After ~2min it will stop and reboot (beeper will beep) 
  • Congratulations you have now successfully migrated from RouterOS to OpenWRT
  • If it might happen so that in future you mess up the current version of OpenWRT so bad that it will not let you in, you can just repeat the BOOTP RAM image boot and repeat this step again.
  • This makes the RouterBoard pretty robust