GNS3 1.3 will create and manage VirtualBox virtual machine linked clones from within the GNS3 user interface. This simplifies the process of setting up VirtualBox virtual machines in GNS3, which makes GNS3 easier to use for studying the operation of open-source routers, switches, and hosts in network simulation scenarios.
In this post, I will show how to set up and use VirtualBox linked clones in your GNS3 simulation scenarios and work through a detailed tutorial.
VirtualBox linked clones
A VirtualBox linked clone is a virtual machine whose virtual disk links to another virtual machine’s virtual disk and saves only the differences in files and data compared to the linked virtual machine. This saves disk space on the host computer.
For more information about the technology used to create linked clones, research Copy on Write (COW) filesystems.
To create a linked clone, you must have a base virtual machine that will be cloned. This base VM is a normal virtual machine managed by VirtualBox. To create a linked clone in the VirtualBox Manager, right-click on a VM and select Clone from the menu that appears. Give the clone a name, then click the Next button. In the next window, select the Linked clone radio button and click Clone.
GNS3 integrates with VirtualBox to management of linked clone VMs. Once it is properly configured, GNS3 will do the work of creating a new VirtualBox linked clone from a base VM every time a node is dragged onto the GNS3 network topology panel. GNS3 will save the clone’s filesystem in the GNS3 project folder.
Benefits of using linked clone VMs
In this post, we show how using VirtualBox linked clones simplifies using VirtualBox virtual machines in GNS3. I found that using linked clones works well, provided one avoids the terrible Save As bug (see below).
Let’s review the benefits of using VirtualBox linked clones in GNS3.
Linked clones simplify GNS3 device management
Most GNS3 users will create many virtual machines in VirtualBox to create multiple instances of each type of node that they plan to use in their simulation. If users are working a large project, or on more than one project, the number of VMs they create may grow to the point that they become hard to manage in the GNS3 devices dock.
GNS3 integration with VirtualBox linked clones allow users to treat VirtualBox VMs in the GNS3 Devices dock as a “device type” that may be used multiple times, instead of as a unique device that may only be used once. This greatly reduces the number of virtual machines managed in the GNS3 Devices dock.
Linked clones prevent overwriting filesystems
Normally, VirtualBox VM filesystems — or virtual disks — are saved in VirtualBox, not in the GNS3 project folder. Nothing prevents more than one GNS3 project from accidentally using the same VirtualBox VM. This can cause a lot of confusion if the VM needs to be configured diffently in each project.
The filesystems of VirtualBox linked clones created by GNS3 1.3 are saved in the GNS3 project’s folder. When a user saves a project, the configuration of each linked clone VM is saved with the project and will not be written over by another project.
How to create base VirtualBox virtual machines
Linked clone virtual machines are linked to a base virtual machine. To demonstrate how linked clones are set up and used in a GNS3 simulation, we must first create the base virtual machines.
In the example below, we create two virtual machines names Router and Host that will be the base virtual machines used later in our tutorial.
Download appliances
An easy way to add routers and hosts based on open source software to your GNS3 simulations is to use appliances prepared by the GNS3 community.
In this example, we will use appliances based on CORE Linux that were created by a GNS3 community member named Radovan Brezula and are available on his Brezular blog download page.
We choose to use the two appliances that are based on the Core Linux 6.3 distribution:
- We will use the Linux Core network host 6.3 x86-64 appliance to create the Host device.
- We will use the Linux Core 6.3 x86-64 with Quagga and Open vSwitch appliance to create the Router device.
Download the appliances’ VMDK files to a folder on your computer. The VMDK format is a VMware virtual disk format, but VirtualBox can open it.
Other VirtualBox appliances are located in the GNS3 Appliance Marketplace.
The Router virtual machine
First, we will create a virtual machine that will serve as the base VM for all Router linked clone VMs in GNS3.
Start VirtualBox and then click the “New” icon in the VirtualBox VM Manager window to start the Create Virtual Machine wizard. In the dialogue box, enter the name “Router”. The VM Type is “Linux” and the Version is “Other Linux”. Then, click “Next”. Set the memory size to 512 MB. This can be changed later if we need to. Click “Next”.
Choose the option to “Use an existing virtual hard drive” and then select the appliance’s VMDK file we downloaded earlier: CorePure64-6.3-openvswitch_2.4.90-quagga_0.99.24.1-bird_1.5.0-keepalived_1.2.19.vmdk.
Click “Create”. The virtual machine Router is now created in VirtualBox.
The Host virtual machine
Next, we will create a virtual machine which will be used as the base VM for all Host linked clone VMs in GNS3. Repeat the steps we used to create the Router virtual router with the following changes:
- The VM name is Host
- The memory can be reduced to 128 MB
- The appliance image is CorePure64-6.3-host.vmdk
Now, we should see two virtual machines in the VirtualBox window: Router and Host.
Set up VirtualBox devices in GNS3
To use the VirtualBox devices, Router and Host, in GNS3 simulations we must create GNS3 virtual machine templates for them. Create and edit the virtual machine templates in the GNS3 Preferences panel and choose a device symbol that best represents the function to be provided by the virtual machine in the GNS3 simulation. We show how to do this below.
Create GNS3 VirtualBox VM templates
For each device type that will use a virtual machine we must create a VM template. Open the GNS3 Preferences window and select the VirtualBox VM templates panel. Then click on the “New” button to create a new VirtualBox VM template in GNS3.
The “VM List” menu will show the VMs currently set up in VirtualBox. In our example, there are two. We will create a template for each one.
Choose the Router VM and select the option: Use as a linked base VM (experimental). This enables the GNS3 VirtualBox linked clone feature.
Repeat the same process to add the Host device into GNS3. Also ensure you select the Use as a linked base VM (experimental) option.
Edit GNS3 VirtualBox VM templates
You should see two VirtualBox virtual machines in the VirtualBox VM templates panel. Select each VM and click the Edit button.
In the VirtualBox VM Configuration window, we see two tabs: General settings and Network. In the General settings tab, select all the options to enable the remote console, start the VM in headless mode, and to use as a linked base VM.
In the Network tab, set the number of interfaces each device will have. The Router device will have many interfaces (I chose eight interfaces) and the Host device will have one interface.
Check the option to Allow GNS3 to use any configured VirtualBox adapter. This will allow GNS3 to use the eth0 interfaces on each new linked clone created. If you do not check this option, eth0 on each linked clone will be NAT interface, even if you disabled that interface in VirtualBox, and will not be usable by GNS3.
NOTE: Another way to resolve the conflict is to configure more than one interface on the Host device when we set it up in the GNS3 Preferences panel, and avoiding using eth0 on any device when setting up a simulation.
Change device symbol
Lastly, change the symbol of the Router device so it looks like a router in the GNS3 devices panel. Right-click on the Router VM in the VirtualBox VM templates panel and select Change symbol.
From the symbol selection window, choose the router symbol.
Create a new GNS3 project
To show how linked clones work, we will create a new project and use the devices we created in the above steps.
Create a new project in GNS3. Click on the File → New blank project menu command, or press Ctrl–N. Enter a project name and press the OK button.
You must give the project a name and save it because VirtualBox linked clones are not supported in temporary projects. If your current GNS3 project has the title, “Unsaved project” then it is a temporary project.
Note that you cannot change the project name after you save it because the GNS3 Save as command has a major bug that will corrupt your project so you must not use Save as to create a copy of the project with a new name.
Add devices
Click on the Browse all devices icon in the GNS3 GUI. We should now see two new devices in the devices dock: the Host device, and the Router device.
The new VirtualBox devices, because they have been configures as linked base VMs, operate just like the built-in GNS3 devices like the Ethernet switch. Each time the user drags one of these devices onto the Topology window, GNS3 creates a new instance of the device with a number appended to it.
In the example shown below, we dragged the Router device onto the canvas to create three routers and dragged the Host device onto the topology window to create four hosts. We also added a switch and some links.
Then we started the simulation by pressing the green Start simulation button on the GNS3 GUI.
NOTE: We used the name “Host” for the Host VM but there is another GNS3 device that is also called Host. However, we can see that the Host we created uses the VirtualBox VM device image (a PC with a waveform image in its monitor) so it should still be possible to differetniate between the devices and choose the right one.
View linked clones in VirtualBox Manager
When starting the simulation, GNS3 asks VirtualBox to create the linked clones. Look at the VirtualBox Manager application and see all the new virtual machines created by GNS3’s VirtualBox linked clone feature.
Saving GNS3 projects that include VirtualBox linked-clone VMs
To save a project in GNS3, use the Save project command from the GNS3 menu. Never use the Save As command. See the next section below to learn why.
When a project containing VirtualBox linked clone VMs is saved, the filesystem of each linked clone VM is saved in the GNS3 project folder. These filesystems will be used to re-create the linked-clone virtual machines when the project is loaded again.
Saving filesystem changes
In our example, we are using the CORE Linux distribution in the VMs that will emulate routers and hosts in our GNS3 project. CORE Linux operates in RAM and does not write anything to disk during normal operation.
To save configuration changes in CORE Linux, you must execute the file backup command, filetool.sh -b
, which will write changes to each VM’s virtual disk. After saving changes made in RAM to the VM’s virtual disk you may save the GNS3 project. If you forget to back up the VM’s RAM before saving the GNS3 project, the configuration changes will not be saved with the GNS3 project.
Before saving the GNS3 project, save your configurations by executing the following command on each device in the simulation scenario:
# filetool.sh -b
When making configuration changes in a device running CORE Linux, be aware of which files will be saved. Please read my post about persistence in CORE Linux for more information.
Configure nodes in the GNS3 project
To test the operation of the devices we created in this GNS3 simualtion, we need to configure basic networking information on the hosts and routers.
We will set up the devices’ network interfaces as follows:
Device | Interface | IP Address |
---|---|---|
Host 1 | eth0 | 10.0.1.100/24 |
Host 2 | eth0 | 10.0.2.100/24 |
Host 3 | eth0 | 10.0.3.100/24 |
Host 4 | eth0 | 10.0.3.101/24 |
Router 1 | eth0 | 10.0.1.1/24 |
Router 1 | eth5 | 10.0.105.1/24 |
Router 1 | eth7 | 10.0.107.1/24 |
Router 2 | eth0 | 10.0.2.1/24 |
Router 2 | eth6 | 10.0.106.2/24 |
Router 2 | eth7 | 10.0.107.2/24 |
Router 3 | eth0 | 10.0.3.1/24 |
Router 3 | eth5 | 10.0.105.2/24 |
Router 3 | eth6 | 10.0.106.1/24 |
Each host will have a default route pointing to its router and each router will have OSPF routing enabled.
Follow the configuration steps listed below to set up the network so that each node is able to reach any other node in the network.
Host-1
Double-click on the Host-1 device to open a terminal connected to Host-1. Log in to *Host-1″. For all devices in this tutorial, the userid is tc
and the password is tc
.
Edit the /opt/bootlocal.sh file on Host-1:
$ vi /opt/bootlocal.sh
Add the following commands to the /opt/bootlocal.sh file:
sudo ip addr add 10.0.1.100/24 broadcast 10.0.1.255 dev eth0
sudo ip link set dev eth0 up
sudo ip route add default via 10.0.1.1
sudo pkill udhcpc
Save changes to the filesystem and reboot:
$ filetool.sh -b
$ sudo reboot
Host-2
Edit the /opt/bootlocal.sh file:
$ vi /opt/bootlocal.sh
Add the following commands to the /opt/bootlocal.sh file:
sudo ip addr add 10.0.2.100/24 broadcast 10.0.2.255 dev eth0
sudo ip link set dev eth0 up
sudo ip route add default via 10.0.2.1
sudo pkill udhcpc
Save changes to the filesystem and reboot:
$ filetool.sh -b
$ sudo reboot
Host-3
Edit the /opt/bootlocal.sh file:
$ vi /opt/bootlocal.sh
Add the following commands to the /opt/bootlocal.sh file:
sudo ip addr add 10.0.3.100/24 broadcast 10.0.3.255 dev eth0
sudo ip link set dev eth0 up
sudo ip route add default via 10.0.3.1
sudo pkill udhcpc
Save changes to the filesystem and reboot:
$ filetool.sh -b
$ sudo reboot
Host-4
Edit the /opt/bootlocal.sh file:
$ vi /opt/bootlocal.sh
Add the following commands to the /opt/bootlocal.sh file:
sudo ip addr add 10.0.3.101/24 broadcast 10.0.3.255 dev eth0
sudo ip link set dev eth0 up
sudo ip route add default via 10.0.3.1
sudo pkill udhcpc
Save changes to the filesystem and reboot:
$ filetool.sh -b
$ sudo reboot
Router-1
Edit the /opt/bootlocal.sh file:
$ vi /opt/bootlocal.sh
Add the following command to the /opt/bootlocal.sh file on Quagga-1:
sudo pkill udhcpc
Start the Quagga shell:
$ vtysh
Enter the following commands into the Quagga shell:
configure terminal
router ospf
network 10.0.105.0/24 area 0
network 10.0.107.0/24 area 0
redistribute connected
exit
interface eth0
ip address 10.0.1.1/24
exit
interface eth5
ip address 10.0.105.1/24
exit
interface eth7
ip address 10.0.107.1/24
exit
exit
write
exit
Save changes to the filesystem and reboot:
$ filetool.sh -b
$ sudo reboot
Router-2
Edit the /opt/bootlocal.sh file:
$ vi /opt/bootlocal.sh
Add the following command to the /opt/bootlocal.sh file on Quagga-1:
sudo pkill udhcpc
Start the Quagga shell:
$ vtysh
Enter the following commands into the Quagga shell:
configure terminal
router ospf
network 10.0.106.0/24 area 0
network 10.0.107.0/24 area 0
redistribute connected
exit
interface eth0
ip address 10.0.2.1/24
exit
interface eth6
ip address 10.0.106.2/24
exit
interface eth7
ip address 10.0.107.2/24
exit
exit
write
exit
Save changes to the filesystem and reboot:
$ filetool.sh -b
$ sudo reboot
Router-3
Edit the /opt/bootlocal.sh file:
$ vi /opt/bootlocal.sh
Add the following command to the /opt/bootlocal.sh file on Quagga-1:
sudo pkill udhcpc
Start the Quagga shell:
$ vtysh
Enter the following commands into the Quagga shell:
configure terminal
router ospf
network 10.0.105.0/24 area 0
network 10.0.106.0/24 area 0
redistribute connected
exit
interface eth0
ip address 10.0.3.1/24
exit
interface eth5
ip address 10.0.105.2/24
exit
interface eth6
ip address 10.0.106.1/24
exit
exit
write
exit
Save changes to the filesystem and reboot:
$ filetool.sh -b
$ sudo reboot
Save the GNS3 project
Save the GNS project by clicking the File → Save project menu command or press Ctrl–S.
Linked clones and Filesystems
We previously saw that the GNS3 integrates with VirtualBox to create linked clone VMs when new nodes are created in a GNS3 simulation scenario.
Linked clones use the VirtualBox snapshot feature to create the filesystems they use. When GNS3 creates a new node, it tells VirtualBox to create a snapshot of the linked base VM in a new folder inside the GNS3 project folder. A snapshot saves only the differences between the base VM’s filesystem and the new filesystem.
In the VirtualBox Manager, look at one of the nodes running in the GNS3 simulation. For example, we will look at the Host-1 VM. Click on Settings and look at the General settings’ Advanced tab. You will see the Snapshot folder used by the linked clone VM.
When you drag a Router or Host device onto the GNS3 simulation, VirtualBox creates a new linked clone in Powerer Off state. If you start the device in GNS3, VirtualBox will change its state to Powered On.
If you stop and then delete the device from GNS3, VirtualBox will remove the linked clone from the VirtualBox Manager window.
Managing virtual machines
One benefit of using linked clones is that VirtualBox Manager does not get filled up with copies of VMs used in your various GNS3 projects. Only the base VMs are kept in the VirtualBox manager after a GNS3 project is closed, or after you quote GNS3.
You must never modify the based VMs because that could cause unexpected problems with the linked clone VMs.
When you quit GNS3, or when you open a new blank project, you should see VirtualBox clear all the linked clones it is currently managing, leaving only base VMs in the VirtualBox manager.
In the example above and below, we opened a new blank project (after ensuring we saved our existing project) so GNS3 tells VirtualBox to remove all the linked clone VMs it doesn’t need, anymore.
Since there are no devices in the new project yet, VirtualBox manager shows only the base VMs and no linked clones.
Unique filesystems for new projects
In the new project we can create new devices and they will re-use the numbering system so the first host will be named Host-1 and the first router will be named Router-1. But, because the snapshots for these new linked clones are saved in a different project folder, they do not overwrite the filesystems for the devices we created in the previous project even though the device names appear to be the same.
Load the GNS3 project again
Now we will reload the previous project, named Project-01 in this example. We see that VirtualBox manager will create new linked clone VMs and that each new linked clone will use the filesystem snapshot file saved in the GNS3 project file, which means it will start with any configurations that were created and saved in the GNS3 project named Project-01.
Click on the File → Open project GNS3 menu command or press Ctrl-O. Then open the GNS3 project folder and select the project file. Click Open
Now we see the GNS3 project topology and all the linked clones created in VirtualBox manager.
When we start the project, can verify that all the saved configurations are restored by running a ping command to test communication between Host-1 and Host-4 in GNS3. Double-click on host-1 in the GNS3 topology window, log into Host-1 from the terminal window and start the ping command. We should see zero packet loss.
we have seen that the VM filesystem snapshots saved in the GNS3 project folder are used to create the linked clone VMs in a saved project when it is loaded into GNS3.
The terrible Save As bug
We mentioned in several steps above that you must never use the Save As GNS3 menu command to rename or copy a project that uses GNS3 VirtualBox linked clones.
Due to a bug in GNS3 1.3, the GNS3 project Save As command is terribly broken when linked clones are used, and will corrupt the virtual disks for all virtual machines used in the project.
The Save As bug will destroy both the original project and the new project created by the Save As command so it can really ruin your day. Fortunately, it is easy to avoid: just never use the Save As command if you use VirtualBox virtual machines in your simulation project.
The Save command still works
Users may save a GNS3 project that uses GNS3 VirtualBox linked clones by using the “Save” menu command. After a project has been saved for the first time, users can save changes to the project by using the Save command again.
However, users cannot rename the GNS3 project or create a copy of it because the Save As command will corrupt the GNS3 project.
Details of the problem
The GNS3 Save As command does not yet account for the way GNS3 manages virtual disks for its virtual machines. The Save As command will create duplicate disk IDs, called UUIDs, and break the virtual machines used in the saved project. See the VirtualBox user guide for more information about how VirtualBox registers UUIDs.
Conclusion
We set up a VirtualBox VM to be used as a linked base VM for linked clones created by GNS3. We saw how GNS3 1.3 integrates with VirtualBox to make it easy to use VirtualBox VMs in your network simulation scenarios.
Nice tutorial. Thank you.
Really good post Brian.
If you want to learn more about Snapshot and Clone in VirtualBox you can checkout VirtualBox Snapshot and Clone (video tutorial).
many thanks to your post , it helped me a lot , appreciate your effort .
Thank for your feedback!
Thank you for this useful post.
I wonder if we can do the same configuration using IPv6 addresses for the all network nodes.
Appreciate your efforts
Hi Shubair,
You should be able to use IPv6 on the interfaces between nodes. VirtualBox allows it. But I have not tried this with GNS3 yet.
Brian
good tutorial. thank U
Congratulations for your post. Please note that the link in the sentence “Other VirtualBox appliances are located in the Download section of the GNS3 web site” should be updated according the new appliance marketplace.
Thank you for this update. I updated the link in my post, above.