Hosting a local GNS3 server inside an OrbStack Linux machine on Apple Silicon offers a flexible networking lab environment, though it introduces a few key constraints:
- No x86_64 KVM virtualization: Hardware acceleration is unavailable for nested x86_64 VMs.
- Emulation overhead: Running x86_64 Linux binaries relies on Rosetta emulation, introducing a slight performance penalty.
- Network limitation: OrbStack uses a custom-built virtual network stack that does not support bridged networking . The Cloud and NAT nodes will not function.
Note: QEMU and libvirt are disabled due to these constraints.
Despite these limitations, a broad range of network devices operate reliably:
| Device | Supported | Notes |
|---|---|---|
| Cisco IOL/IOL L2 | ✅ | Native/emulated lightweight execution of Cisco IOS-XE |
| Dynamips | ✅ | Ideal for legacy Cisco IOS images |
| VPCS | ✅ | Simple PC emulator with a minimal resource footprint |
| Docker Containers | ✅ | ARM64 or x86_64 (Rosetta) |
In practice, CPU overhead is rarely the bottleneck. The amount of available unified memory on your Mac will usually dictate topology limits. 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, having the ability to spin up a 20-node CCIE route and switch topology entirely on your portable MacBook makes this setup well worth the effort.
Prerequisites
- Mac computer with Apple silicon
- macOS 14.0 or later
- Git
- uv
Steps
- Download OrbStack and open it.
An OrbStack Linux machine with seamless Rosetta integration is the magic sauce for hosting our GNS3 server and components.
- Open your favorite terminal emulator.
We will work from the command line for most of the following steps.
- Change to the
Documentsdirectory.
cd ~/Documents
- Clone the gns3-server-orbstack repo from GitHub.
git clone https://github.com/mweisel/gns3-server-orbstack.git
- Change to the
gns3-server-orbstackdirectory.
cd gns3-server-orbstack
- Create a Python virtual environment for Ansible.
uv sync
- Verify Ansible is installed.
uv run ansible --version
- Start OrbStack (if not already started).
orb status || orb start
- Create the
gns3Linux machine.
orb create ubuntu:resolute gns3
- Verify the
gns3Linux machine is listed and in arunningstate.
orb list
output:
NAME STATE DISTRO VERSION ARCH SIZE IP
---- ----- ------ ------- ---- ---- --
gns3 running ubuntu resolute arm64 623.6 MB 192.168.139.237
- Test Ansible connectivity to the
gns3Linux machine.
uv run ansible all -m ping
output:
gns3@orb | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3.14"
},
"changed": false,
"ping": "pong"
}
- Deploy the latest stable release of GNS3 server and components.
uv run ansible-playbook server.yml
Sit back and relax. The automated process should take less than 8 minutes to complete.
- 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/v3/version
- (WebUI) Open the GNS3 WebUI with your default web browser.
open http://gns3.orb.local:3080
- (GUI) Attach your GNS3 client to the GNS3 server.
-
Open the GNS3 client application.
-
Click the Settings button.
-
Select Controller on the left side menu.
-
Select the Controller tab.
-
Enter the following values for the Remote controller section:
- Protocol:
HTTP - Host:
gns3.orb.local - Port:
3080 TCP - Username:
admin - Password:
admin
- Protocol:
-
Click the Connect button to test the connection to the controller.
-
Click the Apply button to save the configuration.
-
Click the OK button to close the Preferences window.
-
Workflow
- Start OrbStack from the command line or open the OrbStack GUI.
orb status || orb start
- Start the
gns3Linux machine from the command line or the OrbStack GUI.
orb start gns3
-
Open the GNS3 client application or WebUI.
-
Create (or open) a project.
-
Start the devices.
-
Happy Labbing!
-
Save the configuration at the device-level (e.g.,
copy run start,wr mem, etc.). -
Stop the devices.
-
Close the GNS3 client application.
-
Stop the
gns3Linux machine from the command line or the OrbStack GUI.
orb stop gns3
Q&A
- 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.
uv run ansible-playbook server.yml -e 'gns3_version=3.0.5'
- How do I display the
gns3serverlog to aid in troubleshooting?
orb -m gns3 journalctl -u gns3 -f