The FRR project recent changelog entries suggest to take a look at the router appliance. Segment routing in kernel is already working, what would be needed would be a control plane for segment routing using FRR? The first implementation is already there in FRR7.x, but at the moment I would rather not to write about it because it is not ready yet. To use segment routing a link-state routing protocol is needed, like OSPF or IS-IS.
To try out FRR version 5 grab a tinycore FRR appliance distributed by Brezular. Thanks to him making suckless virtual appliance using tinycore Linux. Otherwise build a tinycore FRR appliance from scratch.
The networking lab scenario is easy. Two directly connected FRR routers, via the eth1 interface. A direct point to point connection. Each router has additionally configured an IPv6 loopback address. No dedicated physical interface addressing is used, the default link-local addressing only.
loopback loopback
2001:db8:1111::/128 2001:db8:2222::/128
+-------+ +-------+
| | eth1 eth1 | |
| R1 |-----------------------------------| R2 |
| | | |
+-------+ +-------+
At the end of the networking lab scenario both routers will have a running IS-IS routing instance, and propagate IPv6 routes using the IS-IS routing protocol.
Login to Core Linux
Username "tc", password is not set
box login:
First step, login to the router. Use the vtysh command:
tc@box:~$ vtysh
- add IPv6 addresses to loopback lo interface
Enter following configuration commands on R1:
conf t
!
interface lo
ipv6 address 2001:db8:1111::/128
end
Enter configuration commands on R2:
conf t
!
interface lo
ipv6 address 2001:db8:2222::/128
end
Now configure following on both routers:
- Create IS-IS routing process with ISO Routing area tag 1
- Configure a NET - Network Entity Title for this process 49.0001.xxxx.xxxx.xxxx.00
- Set topology type to ipv6-unicast
- Enable IS-IS routing on directly connected interfaces
- Advertise loopback address into the dynamic routing
Configuration for R1:
conf t
!
router isis 1
net 49.0001.1111.1111.1111.00
topology ipv6-unicast
exit
!
interface eth0
ipv6 router isis 1
exit
!
interface lo
ipv6 router isis 1
end
!
Configuration for router R2:
conf t
!
router isis 1
net 49.0001.2222.2222.2222.00
topology ipv6-unicast
exit
!
interface eth0
ipv6 router isis 1
exit
!
interface lo
ipv6 router isis 1
end
!
Verify the routing table, using the show ipv6 route command:
box# show ipv6 route
Codes: K - kernel route, C - connected, S - static, R - RIPng,
O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR,
> - selected route, * - FIB route
C>* 2001:db8:1111::/128 is directly connected, lo, 00:01:23
I>* 2001:db8:2222::/128 [115/20] via fe80::ef2:72ff:fefa:2b00, eth0, 00:00:21
C * fe80::/64 is directly connected, eth1, 00:05:36
C * fe80::/64 is directly connected, eth3, 00:05:37
C * fe80::/64 is directly connected, eth2, 00:05:38
C>* fe80::/64 is directly connected, eth0, 00:05:39
R2's loopback interface address 2001:db8:2222::/128 is in the routing table of R1, via IS-IS
box# sh isis neighbor
Area 1:
System Id Interface L State Holdtime SNPA
box eth0 1 Up 28 0cf2.72ca.7500
box eth0 2 Up 28 0cf2.72ca.7500
The directly connected IS-IS neighbors, have established 2 connections. One on L1 - Level 1 and the second connection at L2 - Level 2:
box# show isis neighbor detail
Area 1:
box
Interface: eth0, Level: 1, State: Up, Expires in 29s
Adjacency flaps: 1, Last: 7s ago
Circuit type: L1L2, Speaks: 0
Topologies:
ipv6-unicast
SNPA: 0cf2.72d8.2b00, LAN id: box.05
LAN Priority: 64, is DIS, DIS flaps: 1, Last: 2s ago
Area Address(es):
49.0001
IPv6 Address(es):
fe80::ef2:72ff:fed8:2b00
box
Interface: eth0, Level: 2, State: Up, Expires in 29s
Adjacency flaps: 1, Last: 7s ago
Circuit type: L1L2, Speaks: 0
Topologies:
ipv6-unicast
SNPA: 0cf2.72d8.2b00, LAN id: box.05
LAN Priority: 64, is DIS, DIS flaps: 1, Last: 2s ago
Area Address(es):
49.0001
IPv6 Address(es):
fe80::ef2:72ff:fed8:2b00
Both routers have established a L1-L2 neighbourship. This is the default setting in IS-IS. Since only 2 routers are directly connected and there is no need for 2 level area design. Both routers should be IS-IS configured as level-2-only routers, for R1 and R2 add the following:
conf t
!
router isis 1
is-type level-2-only
end
Verify the neighborship, using show isis neigbhor command:
box# sh isis neighbor
Area 1:
System Id Interface L State Holdtime SNPA
box eth0 2 Up 29 0cf2.72ca.7500
The Level 1 neighborship has timed out, after the holdtime of 30 seconds. Now only the Level 2 neighborship exists. The correct IS-IS level has been set. Verify setting using show isis neighbor detail command:
box# show isis neighbor detail
Area 1:
box
Interface: eth0, Level: 2, State: Up, Expires in 30s
Adjacency flaps: 1, Last: 12m22s ago
Circuit type: L2, Speaks: 0
Topologies:
ipv6-unicast
SNPA: 0cf2.72d8.2b00, LAN id: box.05
LAN Priority: 64, is DIS, DIS flaps: 1, Last: 12m17s ago
Area Address(es):
49.0001
IPv6 Address(es):
fe80::ef2:72ff:fed8:2b00
Verify now the isis interfaces configuration setting type with show isis interface command:
box# sh isis interface
Area 1:
Interface CircId State Type Level
eth0 0x5 Up lan L2
lo 0x0 Up loopback L2
Interface eth0 is set to type lan. When both routers are directly connected it should display p2p. Configure directly connected interfaces on both routers to point-to-point network type:
conf t
!
interface eth0
isis network point-to-point
end
Verify now the isis interface output and notice the type changed to p2p on interface eth0:
box# show isis interface
Area 1:
Interface CircId State Type Level
eth0 0x0 Up p2p L2
lo 0x0 Up loopback L2
Notice the LAN priority section has disappeared from the show isis neighbor detail output. Now the link type setting is set according to the cabling.
box# show isis neighbor detail
Area 1:
box
Interface: eth0, Level: 2, State: Up, Expires in 29s
Adjacency flaps: 1, Last: 3m49s ago
Circuit type: L2, Speaks: 0
Topologies:
ipv6-unicast
SNPA: 2020.2020.2020
Area Address(es):
49.0001
IPv6 Address(es):
fe80::ef2:72ff:fed8:2b00
Verify the connectivity between both routers:
box# ping 2001:db8:2222::
PING 2001:db8:2222:: (2001:db8:2222::): 56 data bytes
64 bytes from 2001:db8:2222::: seq=0 ttl=64 time=0.883 ms
64 bytes from 2001:db8:2222::: seq=1 ttl=64 time=1.042 ms
64 bytes from 2001:db8:2222::: seq=2 ttl=64 time=1.038 ms
^C
--- 2001:db8:2222:: ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.883/0.987/1.042 ms
Showing the routing table with linux native tool iproute2:
tc@box:~$ ip -6 route
2001:db8:1111:: via fe80::ef2:72ff:fed8:2b00 dev eth0 proto 187 metric 20
2001:db8:2222:: dev lo proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 dev eth2 proto kernel metric 256
fe80::/64 dev eth3 proto kernel metric 256
fe80::/64 dev eth1 proto kernel metric 256
Displaying the linux hosts loopback IP addressing using ip add show dev lo command:
tc@box:~$ ip add show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 2001:db8:1111::/128 scope global
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
Setting up a router has been never easier, with IPv6 there is no need any more for dedicated interface addressing. This flexibility simplifies the setup of a router to only few easy steps, perfect task for network automation. Locally significant addressing is the default if using frame relay, the DLCI - Data Link Connection Identifier, is locally significant. A service provider WAN technology from the late 80's and 90's.