GNS3 is an industry-standard tool used by students and network professionals alike for emulating complex network environments. While it runs natively on Linux distributions with virtually no issues, Windows users often face frustrating limitations when trying to emulate modern appliances from various vendors.
To run heavy network emulations on Windows, the official recommendation is to use the GNS3 VM running inside VMware Workstation. However, this creates a massive headache for modern Windows users. If you are running Docker, WSL2 (Windows Subsystem for Linux), or Hyper-V, Windows requires the "Virtual Machine Platform" feature to be enabled. Historically, this feature violently clashes with VMware, preventing the GNS3 VM from booting or causing massive performance drops.
The ultimate workaround? Stop fighting Windows.
In this guide, we will learn how to bypass these nested virtualization issues entirely by building your own dedicated GNS3 Server on a native Linux backend.
Prerequisites
To follow along with this guide, make sure you have the following ready:
- Basic Virtualization Knowledge: Familiarity with deploying VMs (e.g., using VMware Workstation, ESXi, Proxmox, or a Cloud VPS).
- A Target Virtual Machine:
- OS: A fresh installation of Ubuntu 24.04 Server.
- CPU: Minimum 2 vCPUs (4+ recommended if running heavy appliances like Cisco IOS-XR or Palo Alto).
- RAM: Minimum 4GB (8GB+ recommended).
- Storage: Minimum 20GB HDD/SSD.
- The Frontend Client: The GNS3 Client installed on your local Windows machine (Ensure the client version matches the server version we are about to install).
Setting Up The Server
Once you have everything ready, connect to your VM instance and make sure that you are in your home directory.
Then use the following command to download the official GNS3 installation script
curl -s https://raw.githubusercontent.com/GNS3/gns3-server/master/scripts/remote-install.sh > gns3-remote-install.sh
This command will download the script "remote-install.sh" and save it in your home directory as "gns3-remote-install.sh". After downloading the script, execute it as root.
sudo bash gns3-remote-install.sh
Note: In older guides, you might see people adding a --with-iou flag to this command. That flag was used to install legacy 32-bit libraries for older Cisco images. If you are using modern 64-bit IOL (IOS on Linux) images, Ubuntu 24.04 handles them natively right out of the box! You do not need the extra flag. IOU is a very lightweight way to run switching in the future with less RAM.
The script will run automatically for several minutes.
If you are not seeing a green Active: active (running), use the following command to start the services and make sure it runs even after a reboot.
The GNS3 server typically listens on port 3080. Make sure the server is listening to the correct port using the command
sudo ss -tulpn | grep 3080
If you see it listening on 0.0.0.0:3080, your server is officially online and ready to accept API calls from your Windows machine.
Even though we mentioned the GNS3 Client in the prerequisites, here is a quick refresher on getting it installed correctly for our new remote setup.
Visit the
GNS3 Official Website (you may need to create a free account if you haven't already) and download the GNS3 desktop client for Windows.
Run the installer and proceed with the default settings. However, keep the following in mind:
- The Web Client: You do not need to install the Web Client unless you specifically want to use it. The standard desktop GUI is generally preferred.
- The GNS3 VM: When the installer prompts you to download the GNS3 VM, skip it! Because we just built our own dedicated server on Ubuntu, we completely bypass the need for a local VMware instance.
Now that the Ubuntu server is fully configured and the Windows client is installed, it is time to link them together. Launch the GNS3 desktop application on your Windows machine. If this is your first time opening the client, the Setup Wizard will appear automatically. (If it doesn't, you can trigger it manually by clicking Help > Setup Wizard in the top menu).
In the first window of the Setup Wizard, you will be asked how you want to run your emulations. Select Run appliances on a remote server (advanced usage) and click Next.
In the next window is where we point the client to our Ubuntu VM. Fill in the connection details:
- Host: Enter the IP address of your Ubuntu VM.
- Port: Leave this at the default 3080 TCP.
- Authentication(Optional): Fill this field only if you enabled authentication or OpenVPN. Otherwise you can safely skip this field.
GNS3 will now attempt to connect to your Ubuntu server. If everything was configured correctly, you will see a success message showing the server details. Click Finish to close the wizard.
Upload Appliances
We have successfully installed the remote GNS3 server and connected it to our Windows client. However, before you can start building your first network topology, you need to load the actual devices (appliances) into GNS3. In this section, we will learn exactly how to do that.
Downloading Appliances & Images
Regardless of the appliance you want to run, GNS3 typically requires two main components:
- The Appliance Template: This is a small blueprint file (usually a .gns3a extension) that tells GNS3 exactly how to configure the device (how much RAM it needs, what network adapters it uses, etc.).
- The Appliance Image File: This is the actual operating system binary (like a .bin or .image file) that boots up inside the emulator.
To download appliance templates for free, visit the
Marketplace on the official GNS3 website. Navigate to the Appliances section and search for the specific device you want to emulate (for example, the "Cisco 7200").
Once you find your desired device, click on the appliance name to view its dedicated page. Here, you will find all the crucial information you need, including the exact supported image file versions and the required hardware resources. To grab the template, simply click the Download button to save the .gns3a file to your computer.
Note: The GNS3 marketplace provides the templates for free, but due to copyright laws, you must supply your own OS image files. Many vendors (like MikroTik, OPNSense, Fortinet, Arista or Juniper) offer free trial images upon registration, while others (like Cisco) require a valid support contract or a CML subscription. If you are looking for a specific image, searching the exact image filename provided by the GNS3 template online can often help you locate the vendor's download page or legitimate community resources.
Adding Traditional Images (Dynamips)
Dynamips allows you to run older, physical router operating systems (like the Cisco 7200 or 3725 series) virtually. Because we are using a remote server, the GNS3 client will automatically upload the image files from your Windows machine directly to the Ubuntu server during these steps.
Open your GNS3 client and navigate to Edit > Preferences.
On the left-hand menu, expand Dynamips and click on IOS routers.
Click the New button at the bottom. If GNS3 will ask where you want to run this appliance. Select Run this IOS router on my remote server and click Next.
Click Browse and select the .bin or .image IOS file from your Windows machine. GNS3 will automatically ask if you want to upload it to the server. Click Yes.
Follow the rest of the wizard prompts to set the RAM, add default interfaces (like FastEthernet or GigabitEthernet adapters), and calculate the Idle-PC value (which prevents the virtual router from maxing out your CPU). Click Finish.
IOU (IOS on Unix) images are incredibly lightweight and are the absolute best way to emulate switching environments in GNS3 without consuming massive amounts of RAM.
- Go back to Edit > Preferences.
- On the left-hand menu, expand IOS on UNIX and click on IOU Devices.
- Click the New button.
- Select Run this IOU device on my remote server and click Next.
- Give your appliance a name (e.g., "Cisco L2 Switch").
- From the "Type" dropdown, select L2 image for switches or L3 image for routers.
- Click Browse and select your .bin IOU file. GNS3 will upload it to the Ubuntu server. Click Finish.
Applying the IOU License (The IOURC File)
Unlike traditional Dynamips images, IOU images require a specific license file to boot up. If you try to drag an IOU switch into your topology right now and start it, it will immediately crash or throw a license error. To fix this, you need an iourc file.
(Note: Due to copyright reasons, you must legally obtain or generate this license key yourself).
Once you have your iourc text file ready:
- Navigate to Edit > Preferences.
- On the left-hand menu, click directly on IOS on UNIX (not the "IOU Devices" submenu).
- Under the "Path to IOURC" section, you have two options:
- You can either click Browse and point it to the iourc file saved on your local Windows machine. Or, if your license key is just a few lines of text, you can paste the text directly into the white box provided.
- Click Apply and then OK.
With your license applied, you can now drag and drop your IOU switches into the workspace, power them on, and start building out your network!
Troubleshooting
QEMU Appliances & the /dev/kvm Error
If you start adding QEMU-based appliances (like MikroTik CHR) to your new server, you might run into the following error message:
"KVM acceleration cannot be used (/dev/kvm doesn't exist). It is possible to turn off KVM support in the gns3_server.conf by adding enable_kvm = false to the [Qemu] section. gns3server"
If you run into the above-mentioned error, it happens because "nested virtualization" is failing to pass hardware acceleration from your physical host machine through to your Ubuntu VM.
If you encounter this roadblock, here are the two ways to handle it:
Method 1: Disable KVM in GNS3 (Software Emulation)
You can tell GNS3 to ignore hardware acceleration and use pure software emulation instead. (Note: This will make QEMU appliances run noticeably slower, but it bypasses the error).
SSH into your Ubuntu server and edit (or create) the GNS3 server configuration file:
mkdir -p ~/.config/GNS3/2.2/
nano ~/.config/GNS3/2.2/gns3_server.conf
Add the following configuration block, save the file (Ctrl+O, Enter, Ctrl+X), and restart your Ubuntu VM:
[Qemu]
enable_kvm = false
enable_hardware_acceleration = False
require_hardware_acceleration = False
If Method 1 fails or if the software emulation is too slow, the root cause is likely Windows blocking nested virtualization. If your Ubuntu VM is running inside VMware Workstation on Windows, the built-in Windows hypervisor is clashing with VMware.
To fix this, you must open the Turn Windows features on or off menu in Windows, uncheck Virtual Machine Platform, and restart your physical computer. This allows VMware to take full control of the CPU's virtualization extensions.
CRITICAL WARNING: Disabling the "Virtual Machine Platform" feature will immediately break WSL2 (Windows Subsystem for Linux) and Docker Desktop on your host machine. Only proceed with this step if you do not actively use WSL2, or if you are willing to sacrifice it for full-speed GNS3 emulations!
Congratulations! You have successfully bypassed the headaches of Windows virtualization and built yourself a dedicated, powerful GNS3 remote server on Ubuntu. By offloading the heavy lifting to a native Linux environment, you no longer have to worry about VMware conflicting with WSL2 or Hyper-V, and your emulations will run smoother than ever.
In this guide, we covered how to:
- Automate the GNS3 server installation on an Ubuntu 24.04 backend.
- Securely link your Windows GNS3 client to the remote server.
- Source and install the correct appliance templates.
- Upload both traditional Dynamips IOS images and lightweight IOU/IOL switching images.
Your lab environment is now fully operational. You can start dragging devices into your workspace, wiring them up, and building the complex network topologies you need to study for certifications or test production changes.
Comments
Post a Comment