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

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

GNS3 is viable even with these limitations. I’m simply amazed at the stability and performance considering the Linux operating system and virtual network devices are running on a different CPU architecture.

I’m never CPU-bound using Dynamips and the lighter QEMU virtual network devices. The amount of system memory on my 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.

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

IOL L2 (XE)-
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

You’re golden if your primary interest is simply running Cisco route and switch labs locally on your Mac. Like a teaser? Guess how long it takes for 40 Cisco IOL XE nodes to be up and ready on a Mac mini (M2) Pro.



  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
  1. Change to the gns3-server-orbstack directory.
cd gns3-server-orbstack
  1. Create a Python virtual environment for Ansible.
  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:jammy gns3

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

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


----  -----    ------  -------  ----
gns3  running  ubuntu  jammy    amd64
  1. Test Ansible connectivity to the gns3 Linux machine.
ansible all -m ping


gns3@orb | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    "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/computes
  1. Open the GNS3 WebUI with your default web browser.
open http://gns3.orb.local:3080
  1. Deactivate the Python virtual environment.
  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


  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. Start the devices within GNS3.

  2. Happy Labbing!

  3. Save the configuration at the device-level (e.g., copy run start, commit, etc.).

  4. Stop the devices within GNS3.

  5. Close the GNS3 client application.

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

orb stop gns3


  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.0b2'