Before we work our way through the steps, I will start by pointing out GNS3 server has the following constraints when running on Apple Silicon:

  • Lack of Linux KVM for x86_64 virtualized guests
  • Slight performance penalty with emulated x86_64 Linux binaries (Rosetta )

The following are my results after testing a number of different Cisco device types:

DeviceWorking?Information
IOL-
IOL L2-
IOSv-
IOSv L2-
ASAvRequires SSSE3 CPU instructions for cryptographic operations
Catalyst 8000VRequires vmx or svm CPU flag for Linux KVM
Nexus 9000vRequires vmx or svm CPU flag for Linux KVM

As you can see, we’re primarily limited to Cisco (IOL , IOSv , Dynamips ) images, VPCS, and Docker containers. The upside is that we’re rarely CPU-bound running labs on Apple Silicon. The amount of system memory in the Mac is usually the limiting factor. And let’s face it: connecting to a dedicated x86_64 GNS3 compute server with ample CPU cores and RAM is the ideal solution for running large labs.

On the other hand, being able to quickly spin up a 20-node CCIE route and switch lab on your portable MacBook can also be convenient.

Prerequisites

Steps

  1. Download OrbStack and open it.

An OrbStack Linux machine with seamless Rosetta integration is the magic sauce for hosting our GNS3 server and components.

GNS3 with OrbStack
  1. Open your favorite terminal emulator.

We will be working from the command line for the majority of the following steps.

  1. Change to the Downloads directory.
cd ~/Downloads
  1. Clone the gns3-server-orbstack repo from GitHub.
git clone https://github.com/mweisel/gns3-server-orbstack.git
  1. Change to the gns3-server-orbstack directory.
cd gns3-server-orbstack
  1. Create a Python virtual environment for Ansible.
source init_venv.sh
  1. Verify Ansible is installed.
ansible --version
  1. Start OrbStack (if not already started).
orb status || orb start
  1. Create the gns3 Linux machine.
orb create --arch amd64 ubuntu:noble gns3

This process should take less than a minute depending on your internet connection speed.

  1. Verify the gns3 Linux machine is listed and in a running state.
orb list

output:

NAME  STATE    DISTRO  VERSION  ARCH
----  -----    ------  -------  ----
gns3  running  ubuntu  noble    amd64
  1. Test Ansible connectivity to the gns3 Linux machine.
ansible all -m ping

output:

gns3@orb | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3.12"
    },
    "changed": false,
    "ping": "pong"
}
  1. Deploy the latest stable release of GNS3 server and components.
ansible-playbook server.yml

Sit back and relax. The automated process should take less than 10 minutes.

  1. Check availability after the Ansible playbook completes.

Verify the GNS3 server is up and ready with a HTTP GET request.

curl -s http://gns3.orb.local:3080/v2/version
  1. Open the GNS3 WebUI with your default web browser.
open http://gns3.orb.local:3080
  1. Deactivate the Python virtual environment.
deactivate
  1. Attach your GNS3 client to the GNS3 server.
    1. Open the GNS3 client application.
    2. Click the Settings button.
    3. Select Server on the left side menu.
    4. Select the Main server tab.
    5. Enter the following values for the Remote main server section:
      • Protocol: HTTP
      • Host: gns3.orb.local
      • Port: 3080 TCP
    6. Click the OK button to save.
GNS3 server preferences

Workflow

  1. Start OrbStack from the command line or open the OrbStack GUI.
orb status || orb start
  1. Start the gns3 Linux machine from the command line or the OrbStack GUI.
orb start gns3
Start GNS server
  1. Open the GNS3 client application or WebUI.
open http://gns3.orb.local:3080
  1. Create (or open) a project.

  2. Start the devices.

  3. Happy Labbing!

  4. Save the configuration at the device-level (e.g., copy run start, wr mem, etc.).

  5. Stop the devices.

  6. Close the GNS3 client application.

  7. Stop the gns3 Linux machine from the command line or the OrbStack GUI.

orb stop gns3

Q&A

  1. How do I install a specific GNS3 server version?

The Ansible playbook will install the latest stable version by default. You can override this by explicitly setting the gns3_version variable.

ansible-playbook server.yml -e 'gns3_version=3.0.0rc2'