Work in progress…
Lab environment
All the lab runs on a HP EliteDesk 800 G5 mini (with an Intel Core i5-9500 CPU and 16GB of RAM) running Ubuntu 24.04 LTS.
Arista cEOSlab Docker image can be downloaded after creating an account on the Arista Customer Support page.
Differences with the bare-metal version:
- The
reloadcommand is not working on cEOS due to platform limitation. - The
terminal monitorcommand has no effect as no logs are displayed when something happens. - The default system MAC is 00:00:00:00:00:00 and this needs to be tweaked to have LACP/MLAG working.
- Network interfaces are named
ethXas OS level but OSPF and ISIS needetXnames. This must also be tweaked.
Arista cEOS with containerlab
Containerlab is specially made for running network devices containers.
All my tests and topologies are available here.
NOTES:
- Interfaces that are not connected in the topology configuration file will not show up at all in cEOS when using containerlab. No workaround found yet.
- By default base MAC address and serial number is unique to each node. You don’t need to tweak it unless you want to ensure they never change (useful for CVP).
- The default Arista cEOS configuration template used by containerlab is here.
- You can’t restart nodes individually as it will delete veth links between hosts. You can stop one with
docker container stop ...but then you have to redeploy the lab.
Getting up-and-running
Containerlab is available as docker image which is great to keep your main OS clean and tidy. It can be started by running following bash script.
#!/bin/bash
# https://containerlab.dev/install/#container
sudo docker run --rm -it --privileged \
--network host \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/run/netns:/var/run/netns \
-v /etc/hosts:/etc/hosts \
-v /var/lib/docker/containers:/var/lib/docker/containers \
--pid="host" \
-v $(pwd):$(pwd) \
-w $(pwd) \
ghcr.io/srl-labs/clab bash
The cEOS docker image must be imported with default parameters.
sudo docker import cEOS64-lab-4.33.1F.tar.xz ceos64lab:4.33.1F
Create the interface mapping JSON file (et_mapping.json in my case):
{
"ManagementIntf": {
"eth0": "Management1"
},
"EthernetIntf": {
"et1": "Ethernet1",
"et2": "Ethernet2",
"et3": "Ethernet3",
"et4": "Ethernet4",
"et5": "Ethernet5",
"et6": "Ethernet6",
"et7": "Ethernet7",
"et8": "Ethernet8"
}
}
Create a test topology:
name: test
topology:
kinds:
arista_ceos:
image: ceos64lab:4.33.1F
binds:
- et_mapping.json:/mnt/flash/EosIntfMapping.json:ro
env:
INTFTYPE: et
CLAB_MGMT_VRF: MGMT
nodes:
leaf1:
kind: arista_ceos
leaf2:
kind: arista_ceos
host1:
kind: arista_ceos
links:
# MLAG peer link
- endpoints: ["leaf1:et1", "leaf2:et1"]
# host1 to leaf1 and leaf2
- endpoints: ["host1:et1", "leaf1:et5"]
- endpoints: ["host1:et2", "leaf2:et5"]
Then run your lab and wait until the table with devices IP addresses shows up:
# Start the container
./containerlab.sh
# Deploy the topology
containerlab deploy test.clab.yml
Usage tips
To not be annoyed with OpenSSH host key checks, you can add following lines in your ~/.ssh/confg file:
Host clab-*
User admin
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
To manage your topologies with git, without having permissions issues as containerlab runs as root, add following lines in .gitignore:
clab-*
*.bak
Arista cEOS with GNS3
NOTE: after messing several hours with GNS3 and cEOS, it works but this is far from the perfect lab solution:
- Daring to change the hostname through GNS3 GUI doesn’t work and will just throw you an error message every 20 seconds.
- Some default configuration must be applied to new cEOS nodes and there is no straightforward way to automate that with GNS3.
- The web interface is clunky therefore the “heavy” client is mandatory for an optimal experience.
It works but isn’t optimal.
Installation
Installation works perfectly by following the documentation.
curl https://raw.githubusercontent.com/GNS3/gns3-server/master/scripts/remote-install.sh > gns3-remote-install.sh
bash gns3-remote-install.sh --with-iou --with-i386-repository
HTTP GUI
There is a HTTP user interface on port 3080 but it doesn’t work very well with Firefox or Brave:
- The
xdg-openactions need to access Auxiliary console are a nightmare to configure, at least on Gnome Desktop. This may help but I did not test it. - Drawed lines and links cannot be selected.
For now, it’s a no go !
Heavy client
Package gns3-client must be installed on Fedora.
Terminator can be used as console application with the following command line (title does not work on tabs):
/usr/bin/terminator --new-tab -T "{name}" -x telnet {host} {port}
cEOS setup for GNS3
Arista documentation:
Import the docker image in persistent /mnt/flash volume and create a template in GNS3.
sudo docker import --change 'VOLUME /mnt/flash/' cEOS64-lab-4.33.1F.tar.xz ceos64lab-persistent:4.33.1F
- Start command
/sbin/init systemd.setenv=INTFTYPE=eth systemd.setenv=ETBA=1 systemd.setenv=SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 systemd.setenv=CEOS=1 systemd.setenv=EOS_PLATFORM=ceoslab systemd.setenv=container=docker systemd.setenv=MGMT_INTF=eth0
- Environment variables (must match values of the start command)
INTFTYPE=eth
ETBA=1
SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1
CEOS=1
EOS_PLATFORM=ceoslab
container=docker
MGMT_INTF=eth0
Then you can add a device to your topology and start it. To enter in the shell you need to open the auxiliary console and run FastCli command, unless the Management0 interface is available.
System MAC and interface naming scheme have to be tweaked but it can only be done manually in GNS3 as far as I’ve seen. As I want my lab setups to be as automated as possible, the GNS3 experience stops here.