====== 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 **only** 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 - Export the RouterOS License Key. - Load a RAM based version of OpenWRT. - 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 * Download the latest version of Winbox from Mikrotik * https://mikrotik.com/download * Use Wine to run **winbox64.exe** #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 **System** -> **License** * 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. - There has to be a BOOTP environment set up to serve the RAM based image - 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 #!/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!) * https://downloads.openwrt.org/releases/19.07.6/targets/ramips/mt7621/ * 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 == * Not all Mikrotiks we worked with had BOOTP enabled after a reset. * For those there is a manual procedure you have to follow to enable this startup functionality. * https://wiki.mikrotik.com/wiki/Manual:Etherboot * https://wiki.mikrotik.com/wiki/Manual:RouterBOARD_settings == 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