{"id":18678198,"url":"https://github.com/srl-labs/srl-evpn-mh-lab","last_synced_at":"2025-04-12T02:40:35.092Z","repository":{"id":192075616,"uuid":"684093739","full_name":"srl-labs/srl-evpn-mh-lab","owner":"srl-labs","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-03T10:05:55.000Z","size":629,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-05T22:08:19.325Z","etag":null,"topics":["clab-topo"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/srl-labs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-28T12:50:17.000Z","updated_at":"2025-04-03T10:06:01.000Z","dependencies_parsed_at":"2023-10-12T01:32:56.583Z","dependency_job_id":"b914965b-ac4f-4dda-97ba-ffde8b233f4a","html_url":"https://github.com/srl-labs/srl-evpn-mh-lab","commit_stats":null,"previous_names":["srl-labs/srl-evpn-mh-lab"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srl-labs%2Fsrl-evpn-mh-lab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srl-labs%2Fsrl-evpn-mh-lab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srl-labs%2Fsrl-evpn-mh-lab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srl-labs%2Fsrl-evpn-mh-lab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/srl-labs","download_url":"https://codeload.github.com/srl-labs/srl-evpn-mh-lab/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248507465,"owners_count":21115605,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clab-topo"],"created_at":"2024-11-07T09:36:20.663Z","updated_at":"2025-04-12T02:40:35.069Z","avatar_url":"https://github.com/srl-labs.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# L2 EVPN Multi-homing Lab\n\nThis lab sets up a pre-configured SR Linux-based fabric to experiment with L2 EVPN multi-homing.\n\nSee [L2 EVPN Multihoming](http://learn.srlinux.dev/tutorials/evpn-mh/basics/) tutorial for an guided tour over this lab and multihoming concepts.\n\n# Topology\n\nThe topology comprises a spine, three leaf(PEs) routers, and two Alpine Linux hosts(CEs). A multi-homed CE is connected to leaf1, while another is linked to leaf3 for testing purposes.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"images/fabric-topo.drawio.svg\" width=\"600\" alt=\"EVPN multi-homing lab topology\" title=\"EVPN multi-homing lab topology\" class=\"caption\" /\u003e\n\u003c/p\u003e\n\n## Lab deployment\n\nAs usual, this lab is powered by containerlab and can be deployed on any Linux VM with enough resources mentioned in the table at the beginning.\n\nThis lab comes with pre-configurations that are explained in [L2 EVPN tutorial](https://learn.srlinux.dev/tutorials/l2evpn/evpn/#mac-vrf), which is highly recommended if you haven't played with SR Linux or EVPN yet.\n\nThe topology and pre-configurations are defined in the containerlab topology file.\n\nThe SR Linux configurations are referred to as [config files](configs) (.cfg), and Alpine Linux configurations are defined in the [topology file](evpn-mh.clab.yml) to be directly executed at the deployment.\n\nThe SR Linux configurations are under the 'configs' folder.\n\nClone this repository to your Linux machine:\n\n```bash\ngit clone https://github.com/srl-labs/srl-evpn-mh-lab.git \u0026\u0026 cd srl-evpn-mh-lab\n```\n\nand deploy with containerlab:\n\n```bash\n# containerlab deploy -t evpn-mh01.clab.yml\n[root@clab-vm1 evpn-mh01]# containerlab deploy\nINFO[0000] Containerlab v0.44.0 started\nINFO[0000] Parsing \u0026 checking topology file: evpn-mh01.clab.yml\nINFO[0000] Creating docker network: Name=\"clab\", IPv4Subnet=\"172.20.20.0/24\", IPv6Subnet=\"2001:172:20:20::/64\", MTU=\"1500\"\nWARN[0000] Unable to load kernel module \"ip_tables\" automatically \"load ip_tables failed: exec format error\"\nINFO[0000] Creating lab directory: /root/demo/learn.srlinux/clab/evpn-mh01/clab-evpn-mh01\nWARN[0000] SSH_AUTH_SOCK not set, skipping pubkey fetching\nINFO[0000] Creating container: \"ce2\"\nINFO[0000] Creating container: \"ce1\"\nINFO[0000] Creating container: \"spine1\"\nINFO[0000] Creating container: \"leaf3\"\nINFO[0000] Creating container: \"leaf1\"\nINFO[0000] Creating container: \"leaf2\"\nINFO[0003] Creating link: leaf1:e1-49 \u003c--\u003e spine1:e1-1\nINFO[0003] Creating link: ce1:eth1 \u003c--\u003e leaf1:e1-1\nINFO[0003] Creating link: leaf3:e1-49 \u003c--\u003e spine1:e1-3\nINFO[0003] Creating link: leaf2:e1-49 \u003c--\u003e spine1:e1-2\nINFO[0003] Creating link: ce2:eth1 \u003c--\u003e leaf3:e1-1\nINFO[0003] Creating link: ce1:eth2 \u003c--\u003e leaf2:e1-1\nINFO[0004] Creating link: ce2:eth2 \u003c--\u003e leaf3:e1-2\nINFO[0004] Creating link: ce2:eth3 \u003c--\u003e leaf3:e1-3\nINFO[0004] Running postdeploy actions for Nokia SR Linux 'leaf3' node\nINFO[0004] Running postdeploy actions for Nokia SR Linux 'leaf1' node\nINFO[0004] Running postdeploy actions for Nokia SR Linux 'spine1' node\nINFO[0004] Running postdeploy actions for Nokia SR Linux 'leaf2' node\nINFO[0025] Adding containerlab host entries to /etc/hosts file\nINFO[0026] Executed command \"ip link add bond0 type bond mode 802.3ad\" on the node \"ce1\". stdout:\nINFO[0026] Executed command \"ip link set address 00:c1:ab:00:00:11 dev bond0\" on the node \"ce1\". stdout:\nINFO[0026] Executed command \"ip addr add 192.168.0.11/24 dev bond0\" on the node \"ce1\". stdout:\nINFO[0026] Executed command \"ip link set eth1 down\" on the node \"ce1\". stdout:\nINFO[0026] Executed command \"ip link set eth2 down\" on the node \"ce1\". stdout:\nINFO[0026] Executed command \"ip link set eth1 master bond0\" on the node \"ce1\". stdout:\nINFO[0026] Executed command \"ip link set eth2 master bond0\" on the node \"ce1\". stdout:\nINFO[0026] Executed command \"ip link set eth1 up\" on the node \"ce1\". stdout:\nINFO[0026] Executed command \"ip link set eth2 up\" on the node \"ce1\". stdout:\nINFO[0026] Executed command \"ip link set bond0 up\" on the node \"ce1\". stdout:\nINFO[0026] Executed command \"ip link set address 00:c1:ab:00:00:21 dev eth1\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip link set address 00:c1:ab:00:00:22 dev eth2\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip link set address 00:c1:ab:00:00:23 dev eth3\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip link add dev vrf-1 type vrf table 1\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip link set dev vrf-1 up\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip link set dev eth1 master vrf-1\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip link add dev vrf-2 type vrf table 2\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip link set dev vrf-2 up\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip link set dev eth2 master vrf-2\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip link add dev vrf-3 type vrf table 3\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip link set dev vrf-3 up\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip link set dev eth3 master vrf-3\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip addr add 192.168.0.21/24 dev eth1\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip addr add 192.168.0.22/24 dev eth2\" on the node \"ce2\". stdout:\nINFO[0026] Executed command \"ip addr add 192.168.0.23/24 dev eth3\" on the node \"ce2\". stdout:\n+---+-----------------------+--------------+------------------------------+-------+---------+----------------+----------------------+\n| # |         Name          | Container ID |            Image             | Kind  |  State  |  IPv4 Address  |     IPv6 Address     |\n+---+-----------------------+--------------+------------------------------+-------+---------+----------------+----------------------+\n| 1 | clab-evpn-mh01-ce1    | 11d8ad808671 | akpinar/alpine:latest        | linux | running | 172.20.20.2/24 | 2001:172:20:20::2/64 |\n| 2 | clab-evpn-mh01-ce2    | f563402d339f | akpinar/alpine:latest        | linux | running | 172.20.20.7/24 | 2001:172:20:20::7/64 |\n| 3 | clab-evpn-mh01-leaf1  | dfcf20665a6a | ghcr.io/nokia/srlinux:23.3.1 | srl   | running | 172.20.20.4/24 | 2001:172:20:20::4/64 |\n| 4 | clab-evpn-mh01-leaf2  | fee169425f04 | ghcr.io/nokia/srlinux:23.3.1 | srl   | running | 172.20.20.6/24 | 2001:172:20:20::6/64 |\n| 5 | clab-evpn-mh01-leaf3  | 115bbac271c9 | ghcr.io/nokia/srlinux:23.3.1 | srl   | running | 172.20.20.5/24 | 2001:172:20:20::5/64 |\n| 6 | clab-evpn-mh01-spine1 | d825b06fe483 | ghcr.io/nokia/srlinux:23.3.1 | srl   | running | 172.20.20.3/24 | 2001:172:20:20::3/64 |\n+---+-----------------------+--------------+------------------------------+-------+---------+----------------+----------------------+\n```\n\nWhen containerlab finishes the deployment it provides a summary table that outlines connection details of the deployed nodes. In the \"Name\" column we have the names of the deployed containers and those names can be used to reach the nodes, for example to connect to the SSH of `leaf1`:\n\n```bash\n# default credentials admin:NokiaSrl1!\nssh admin@clab-evpn-mh-leaf1\n```\n\nTo connect Alpine Linux (CEs):\n\n```bash\ndocker exec -it clab-evpn-mh-ce1 bash\n```\n\n## Verify pre-configurations\n\nCheck the fabric configurations;\n\n```bash\nA:spine1# show network-instance default protocols bgp neighbor\n```\n\n```bash\nA:leaf1# info network-instance default\n```\n\n```bash\nA:leaf1# info network-instance mac-vrf-1\n```\n\nThe ce interfaces;\n\n```bash\nbash-5.0# ip address\n```\n\nPlease follow the tutorial to explore L2 EVPN Multi-homing further...\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrl-labs%2Fsrl-evpn-mh-lab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsrl-labs%2Fsrl-evpn-mh-lab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrl-labs%2Fsrl-evpn-mh-lab/lists"}