Gns3 + chr

I spent hours today setting up GNS3 + Mikrotik CHR on a Fedora Aurora (immutable; KDE Plasma) system.

I (foolishly!) believed that ChatGPT could help me get it done efficiently and effectively. Despite me being a massive PITA asking it at every step to triple check that it is certain that its instructions to me were correct, it continued to be wrong – over and over again – about what needed to be done to get it working – indeed, just to get it installed on this specific distro.

I truly can’t stand ChatGPT, despite so many people thinking it is the most amazing thing ever.

Anyway, I got it set up and I see that the CHR comes from Mikrotik with essentially an empty configuration.

So I went online to find default (factory) configs for some of MT models that I own. I found one link with configs made for ROS 7.7 that are not at all what I’m familiar with.

So I thought I could recreate them myself, with the help of my existing configs.

Well, I didn’t get far when I realized that the CHR comes with a single ethernet interface (ether1) and I can’t figure out how to create more ethernet-type interfaces.

I don’t see an “add” under “/ip interface” or “/ip interface ethernet”

In Winbox | Interfaces | New there is no type=ethernet.

I was hoping it was actually complicated and that perhaps it has something to do with the fact that the CHR only knows about the single wifi interface on the laptop.

Well, it does: I created a new CHR node in GNS3 and configured it with 3 adapters and, sure enough, the new CHR node has ether1, ether2, and ether3.

Actionable? Perhaps actionableness is (1) the (additional) warning to stay away from ChatGPT as well as (2)for anyone else struggling with GNS3+CHR and maybe (3) a query is the actual current default configurations are available someone?

The current defconf firewall rules can be found here (scroll to the 7.18 section):

As for the rest of the configuration, you can read @tangent's article:

https://tangentsoft.com/mikrotik/wiki?name=Default+Router+Configuration&p

My own recent experience with ´fooling´´ around with chatgpt led me to believe, although interesting, will only waste ones time. Its not ready for primetime.

In GNS3, right-click on the CHR router. Network tab, increase adapters:

You can also modify the template in Edit-Preferences, Qemu VMs

@Josephny
The fact that you managed to actually install GNS3 (and have it running) should fill yourself with pride :slight_smile: , it is one of the peskier programs I have ever seen when it comes to have it running properly.

Thank you. The number of ethernet interfaces in the node did not change when I increased the number of adapters. I had to change it in the template and create a new node. Am I doing this incorrectly?

I was able to apply a default 5009 config and save it as a template (again, ChatGPT was so incredibly wrong in its instructions on how to get this done).

Although, when I set the template to have 9 adapters (hoping to figure out how to have 8 + fiber), the ROS config gives them names ether9 through ether 17. Still working on figuring out why.

It seems that there are a handful of every so slightly different GNS3 makes/versions/builds/installations, each with a slightly different feature set and UI. And, the version are installed differently, and depend in part on the distro (immutable or not, for example).

Wanna know how I know? My new worst enemy, ChatGPT:

That’s a really sharp and important question — and the short version is:
💡 Aurora (and all Fedora “immutable” editions like Silverblue and Kinoite) deliberately ships only the minimal, system-safe RPM packages by default — not the full-featured desktop ones — to keep the base image small, stable, and reproducible.

Let’s break that down clearly so you see what happened and why:

🧩 1️⃣ Fedora/Aurora’s philosophy: an immutable core

Aurora (like Fedora Silverblue/Kinoite) keeps your base operating system read-only and built from a curated rpm-ostree image.

That image is designed to:

boot fast,

minimize dependencies,

and avoid any GUI apps that pull in heavy toolkits (Qt, GTK mix, etc.) unless you explicitly choose them.

So, it includes gns3-server, which is enough to run topology back-ends and the web interface, but omits gns3-gui and all Qt runtime libraries.

🧠 2️⃣ Why Fedora’s maintainers split it up

Historically, GNS3 was one big package (gns3-all-in-one), but Fedora maintainers split it into modular parts:

Package	Purpose	Included in Aurora base?
gns3-server	Headless engine + web API	✅ Yes
gns3-gui	Full Qt desktop GUI (port-forward dialogs, preferences, etc.)	❌ No
gns3-web	Lightweight browser front end	✅ Yes (to replace the GUI)

They did that because:

gns3-gui depends on the full Qt5 stack (hundreds of MB).

On immutable systems, that bloat would need extra layering and slow down updates.

Fedora prefers you to install heavy GUI apps as Flatpaks (option C) or inside toolboxes, rather than inside the base image.

⚙️ 3️⃣ What Aurora gave you “out of the box”

You got the same setup as most Fedora users who run GNS3 in containers:

gns3-server  +  gns3-web (minimal GTK front end)


That’s enough to:

build and run topologies,

use the browser/web GUI,

launch local QEMU/VMs,

…but not enough for desktop configuration features like:

Port forwarding,

Device templates editing,

Snapshot management.

Those live only in the Qt GUI or the Flatpak.

✅ 4️⃣ Why the Flatpak exists

The Flatpak build (Option C) bundles everything — Qt, Python libs, uBridge, Dynamips, etc. — so:

it works out of the box on immutable distros (Silverblue, Aurora, Kinoite),

it doesn’t require a reboot,

and it’s updated independently from Fedora’s rpm-ostree images.

Fedora assumes users who need the full GUI will install it that way.

🔍 5️⃣ TL;DR
Component	Why it was (or wasn’t) installed
gns3-server	Base engine — safe for all systems ✅
gns3-web	Minimal GUI for lightweight labs ✅
gns3-gui	Full desktop GUI (needs Qt stack) ❌ intentionally omitted
Flatpak GNS3	Recommended for immutable desktops ✅ optional, user-installed

The name changes because the mac addresses have changed since the very first start.

If you create a template with some adapters, apply any configuration and then create a new template, when you start a new instance it will have different mac addresses and the name changes.

That makes sense.

Any suggestion on how to create a template with the MT default config as well with 8 ether ports and 1 SFP port?

Use qemu to run a chr instance without network interfaces. Create script and a schedule on reboot to run it.

Use this new image as a chr base.

Maybe it will work.

I don’t see a way to create ethernet interfaces after a node is created.

Only by using a template that has some number of network adapters are nodes created with that number of ethernet interfaces.

It seems that the following process will create a starting node with the correct number of ethernet ports:

  1. Drag the template into the project

  2. Edit the number of adapters

  3. Start node

  4. Configure and log in for the first time

But, this whole process continues to be slow going.

I am trying to recreate my LAN, so I exported the in-place RB5009 config.

It starts with the following, which works fine:

/interface bridge
add auto-mac=yes comment=defconf name=bridge port-cost-mode=short

The next command fails:

/interface ethernet
set [ find default-name=ether1 ] comment=WAN poe-out=off

It seems the “poe-out=off” is unacceptable to the CHR (version 7.20.1).

Is this a version thing (7.20.1 vs. 19.3)? Of a CHR coding failure? Or a GNS problem?

I think it would be very cool to be able to play in a completely virtual environment, so that’s why I’m down this road.

Thanks!

I am so disappointed in GNS3.

It turns out (I believe) that an inherent limitation of GNS3 is that some parameters or features that are hardware-specific will not work in GNS3.

Examples of failures:

/interface ethernet set [find default-name=ether2] poe-out=off

/system routerboard settings set boot-protocol=dhcp

/interface ethernet set [find default-name=sfp-sfpplus1] auto-negotiation=no advertised-speeds=10G-full

/interface wifi configuration add name=home2g ssid="Home-2G" country="US"

This substantially limits the usefulness of GNS3. I envisioned using GNS3+CHR to learn and create test environments before putting into actual use.

Having to test and come up with a workaround (like an on-error or include an “if” test to check if routerboard=chr) is far too much work and bloat in a final script.

I can understand GNS3’s usefulness to test specific functions like VLANs, firewall rules, routing, VPN, users, queue, etc. But, not for entire configs.

Of course wifi is a no-no, but #1 and #2 sound more like CHR limitations, #3 cannot say.

I have zero experience with this, but I thought that if the CHR was virtual (i.e., not real), then why would physical specifications/features/criteria stand in the way?

That is, if GNS3+CHR is fictictious in regards to actual flow of data, why not include a ficticious creation of how specific hardware responds in various situations?

Even if we don’t feel comfortable, for some reason, creating fictional RF packets being transmitted and received by the wifi hardware in certain devices, why not include the ROS facilities to (1) ensure configs at least follow the ROS rules and limitations, and (2) allow for seamless migration from the GNS environment to reality. But, how hard would it be to include ficticious RF connections between devices? We would all know that RF includes location-specific relevant variables (your mileage may vary).

I think you misunderstand something there.
Definition by Mikrotik:

Cloud Hosted Router (CHR) is a RouterOS version intended for running as a virtual machine. It supports the x86 64-bit architecture and can be used on most of the popular hypervisors such as VMWare, Hyper-V, VirtualBox, KVM, and others. CHR has full RouterOS features enabled by default but has a different licensing model than other RouterOS versions.

It is intended to run on a virtual machine and can be used as a full-blown ROS router but it's not meant to emulate every physical aspect of all possible Mikrotik devices.

Oh, so CHR is a real ROS implementation? That is, I can run CHR on a PC with, for example, multiple NICs and it will act as an MT device?

And somehow CHR is used by GNS3 to create the virtual environment?

I use GNS3 and CHR everyday. When I need a configuration, I just copy+paste the script at the first start.

Of course, CHR (virtual router, software) is not RouterBoard (real router, hardware): PoE, RouterBoard, WiFi and a lot of things doesn’t have any sense.

But Routing, bridging, firewall, VPN… everything works

That’s very good to hear.

Do you paste entire config scripts? What do you do about the parts of the script that fail because they are routerboard-specific?

Yes and no.

If you have a PC you might want decide to run CHR through a hypervisor (example Hyper-V or Proxmox) or a VM or run directly (bare metal) an x86 instance, check this:

Then - of course - it depends on the hardware you use what will be available or not.