While waiting for some compute resources to be delivered, I was preparing configs for new labs once the resources arrived. This included the setup of an Internet eXchange Point (IXP). The featured image of this post shows the lab topology.
Creating and running the lab
Create the lab topology file ix-sim.clab.yaml
:
name: ix-sim
topology:
nodes:
ix-rs-1:
kind: ceos
image: ceos:4.29.2F
cl-1:
kind: ceos
image: ceos:4.29.2F
cl-2:
kind: ceos
image: ceos:4.29.2F
cl-3:
kind: ceos
image: ceos:4.29.2F
links:
- endpoints: ["ix-rs-1:eth1", "cl-1:eth1"]
- endpoints: ["ix-rs-1:eth2", "cl-2:eth1"]
- endpoints: ["ix-rs-1:eth3", "cl-3:eth1"]
- endpoints: ["cl-1:eth2", "cl-3:eth2"]
Launch the lab:
[superman@fra-clab-1 ix-sim]$ sudo clab deploy
INFO[0000] Containerlab v0.38.0 started
INFO[0000] Parsing & checking topology file: ix-sim.clab.yaml
INFO[0000] Creating lab directory: /home/superman/labs/ix-sim/clab-ix-sim
INFO[0001] Creating docker network: Name="clab", IPv4Subnet="172.20.20.0/24", IPv6Subnet="2001:172:20:20::/64", MTU="1500"
INFO[0001] Creating container: "cl-3"
INFO[0001] Creating container: "cl-2"
INFO[0001] Creating container: "ix-rs-1"
INFO[0001] Creating container: "cl-1"
INFO[0003] Creating virtual wire: cl-1:eth2 <--> cl-3:eth2
INFO[0003] Creating virtual wire: ix-rs-1:eth2 <--> cl-2:eth1
INFO[0003] Creating virtual wire: ix-rs-1:eth1 <--> cl-1:eth1
INFO[0003] Creating virtual wire: ix-rs-1:eth3 <--> cl-3:eth1
INFO[0003] Running postdeploy actions for Arista cEOS 'ix-rs-1' node
INFO[0003] Running postdeploy actions for Arista cEOS 'cl-2' node
INFO[0003] Running postdeploy actions for Arista cEOS 'cl-1' node
INFO[0003] Running postdeploy actions for Arista cEOS 'cl-3' node
INFO[0096] Adding containerlab host entries to /etc/hosts file
+---+---------------------+--------------+--------------+------+---------+----------------+----------------------+
| # | Name | Container ID | Image | Kind | State | IPv4 Address | IPv6 Address |
+---+---------------------+--------------+--------------+------+---------+----------------+----------------------+
| 1 | clab-ix-sim-cl-1 | edbf5ac01594 | ceos:4.29.2F | ceos | running | 172.20.20.4/24 | 2001:172:20:20::4/64 |
| 2 | clab-ix-sim-cl-2 | 33f961419cc6 | ceos:4.29.2F | ceos | running | 172.20.20.3/24 | 2001:172:20:20::3/64 |
| 3 | clab-ix-sim-cl-3 | efe1b5921a7d | ceos:4.29.2F | ceos | running | 172.20.20.5/24 | 2001:172:20:20::5/64 |
| 4 | clab-ix-sim-ix-rs-1 | 5f65dec0e456 | ceos:4.29.2F | ceos | running | 172.20.20.2/24 | 2001:172:20:20::2/64 |
+---+---------------------+--------------+--------------+------+---------+----------------+----------------------+
[superman@fra-clab-1 ix-sim]$
Initial Layer 3 config and reachability
The node ix-rs-1
will take act as a route server and switch providing access to the IXP. Initial config looks like:
<snip>
!
ip routing
!
hostname ix-rs-1
!
vlan 10
name RS_PEER_GROUP_1
!
<snip>
!
interface Ethernet1
description CUSTOMER
switchport access vlan 10
!
interface Ethernet2
description CUSTOMER
switchport access vlan 10
!
interface Ethernet3
description CUSTOMER
switchport access vlan 10
!
interface Vlan10
description RS_PEER_GROUP_1_GW
ip address 100.64.1.1/24
!
<snip>
Configurations for CL-1,2,3 look like:
<snip>
!
ip routing
!
hostname cl-1
!
<snip>
interface Ethernet1
description IX
no switchport
ip address 100.64.1.11/24
!
interface Ethernet2
description CL-3
no switchport
ip address 100.64.254.1/30
!
interface Loopback1
ip address 100.64.10.1/24
!
<snip>
<snip>
!
ip routing
!
hostname cl-2
!
<snip>
interface Ethernet1
description IX
no switchport
ip address 100.64.1.21/24
!
interface Loopback1
ip address 100.64.20.1/24
!
<snip>
<snip>
!
ip routing
!
hostname cl-3
!
<snip>
interface Ethernet1
description IX
no switchport
ip address 100.64.1.31/24
!
interface Ethernet2
description CL-1
no switchport
ip address 100.64.254.2/30
!
interface Loopback1
ip address 100.64.30.1/24
!
<snip>
Verify Layer 3 reachability
ix-rs-1#ping 100.64.1.11
PING 100.64.1.11 (100.64.1.11) 72(100) bytes of data.
80 bytes from 100.64.1.11: icmp_seq=1 ttl=64 time=8.15 ms
80 bytes from 100.64.1.11: icmp_seq=2 ttl=64 time=5.52 ms
80 bytes from 100.64.1.11: icmp_seq=3 ttl=64 time=4.46 ms
80 bytes from 100.64.1.11: icmp_seq=4 ttl=64 time=4.78 ms
80 bytes from 100.64.1.11: icmp_seq=5 ttl=64 time=5.50 ms
--- 100.64.1.11 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 30ms
rtt min/avg/max/mdev = 4.465/5.688/8.157/1.302 ms, ipg/ewma 7.587/6.883 ms
ix-rs-1#ping 100.64.1.21
PING 100.64.1.21 (100.64.1.21) 72(100) bytes of data.
80 bytes from 100.64.1.21: icmp_seq=1 ttl=64 time=6.85 ms
80 bytes from 100.64.1.21: icmp_seq=2 ttl=64 time=4.91 ms
80 bytes from 100.64.1.21: icmp_seq=3 ttl=64 time=5.87 ms
80 bytes from 100.64.1.21: icmp_seq=4 ttl=64 time=6.76 ms
80 bytes from 100.64.1.21: icmp_seq=5 ttl=64 time=5.74 ms
--- 100.64.1.21 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 28ms
rtt min/avg/max/mdev = 4.919/6.033/6.858/0.718 ms, ipg/ewma 7.029/6.452 ms
ix-rs-1#ping 100.64.1.31
PING 100.64.1.31 (100.64.1.31) 72(100) bytes of data.
80 bytes from 100.64.1.31: icmp_seq=1 ttl=64 time=6.04 ms
80 bytes from 100.64.1.31: icmp_seq=2 ttl=64 time=4.61 ms
80 bytes from 100.64.1.31: icmp_seq=3 ttl=64 time=6.45 ms
80 bytes from 100.64.1.31: icmp_seq=4 ttl=64 time=4.69 ms
80 bytes from 100.64.1.31: icmp_seq=5 ttl=64 time=4.88 ms
--- 100.64.1.31 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 24ms
rtt min/avg/max/mdev = 4.615/5.337/6.450/0.759 ms, ipg/ewma 6.214/5.669 ms
ix-rs-1#
Part 2 will be linked here once done. Check it for bgp configs.
One Comment