One of the least popular dynamic routing protocol in the networking works is IS-IS, which stands for Intermediate System to Intermediate System.
I'll be honest, I will not cover everything here, only what I've learned and can do in GNS3. I will make also a video with the configuration in GNS3, just check the bottom of this post for the youtube video link.
Ok, now let's make a simple topology in GNS3 and we will cover with a little bit of theory for each step we will take. And action:
You can also download the image from here.
Now, I won't cover the basic configuration of the devices (IP addresses, router id, ospf, etc), but in the video I will do this for every device.
Ok let's begin with the basic IS-IS configuration in Junos and IOS:
Configuration for Router R1_L1-L2:
rokk@R1_L1-L2> show configuration protocols isis | display set set protocols isis interface ge-0/0/0.0set protocols isis interface ge-0/0/1.0set protocols isis interface ge-0/0/2.0set protocols isis interface ge-0/0/3.0 passiveAs you can see there is not much to it, at least in Junos. The configuration is similar to ospf. The interface ge-0/0/3.0 has a passive there. This means take the route from that interface and advertise to other neighbours, but do not send/receive routing update on this interface. Also similar to ospf.
But that's not all. Actually before the IS-IS configuration is made, some other thins must be done. That is because the IS-IS routing protocols runs over the iso protocol, which is a layer 3 protocol just like IP or IPv6. And we must configure also an iso address for the device to communicate to other devices over IS-IS. The only difference here is that you configure an iso address for the entire device; for IP or IPv6 you have to configure an IP/IPv6 address on every interface.
In Junos, usually the iso address is configured on the loopback interface; It's not a requirement, but this interface won't go down when there is a physical link failure. So how do you configure it and how does it look like. Let's see:
rokk@R1_L1-L2> show configuration interfaces lo0 | display set set interfaces lo0 unit 0 family inet address 12.12.12.1/32set interfaces lo0 unit 0 family iso address 49.0021.0000.0000.0121.00set interfaces lo0 unit 0 family inet6 address fe80::121/64set interfaces lo0 unit 0 family inet6 address 2001:abc:def:12::1/128So it looks much different that the IP or IPv6 address (this is one of the reasons this routing protocol is the least popular).
IS-IS routers need a layer 3 address, an iso address, but the address is slightly different than IP or IPv6. In this case the address is called a Network Entity Title (NET), which, again, is one for the entire system (router). The NET is made of 3 parts:
Now let's look at our address and identify the parts:
- 49.0021 <-- is the Area ID
- 0000.0000.0141 <-- is the System ID
- 00 <-- is the NSEL
The Area ID has 2 parts:
The System ID is something like OSPF router-id, which identify uniquely the router in the domain. It has to be different for every router in the domain.
The NSEL (the selector field), for a router will always be 00. If the selector filed for a router won't 00 then the adjacency won't be formed.
OK, so now we have the iso address configured on the router, but we also need to enable the protocol iso on every interface which we want to form an adjacency with other routers which are configured for IS-IS. Let's see the configuration for all the interfaces:
rokk@R1_L1-L2> show configuration interfaces ge-0/0/0 { description "Link to SW1 e0/2"; unit 0 { family inet { address 10.0.2.3/29; } family iso; family inet6 { address 2001:abc:2::3/64; address fe80::121/64; } }}ge-0/0/1 { description "Link to R1_L1 ge-0/0/1"; unit 0 { family inet { address 10.0.12.1/32; } family iso; family inet6 { address fe80::121/64; address 2001:abc:12::1/64; } }}ge-0/0/2 { description "Link to R2_L1 ge-0/0/2"; unit 0 { family inet { address 10.0.12.5/30; } family iso; family inet6 { address fe80::121/64; address 2001:abc:12:4::5/64; } }}ge-0/0/3 { description "Link to R1-E e0/0"; unit 0 { family inet { address 192.168.1.1/30; } family inet6 { address fe80::121/64; address 2001:abc:192::1/64; } }}lo0 { unit 0 { family inet { address 12.12.12.1/32; } family iso { address 49.0021.0000.0000.0121.00; } family inet6 { address fe80::121/64; address 2001:abc:def:12::1/128; } }}And now the IS-IS protocol configuration:
rokk@R2_L1-L2> show configuration protocols isis | display set set protocols isis interface ge-0/0/0.0set protocols isis interface ge-0/0/1.0set protocols isis interface ge-0/0/2.0On interface ge-0/0/3 the protocol iso is not configured. We don't need it here, because here we will enable OSPF withe the external router R1-E and advertise the routing information from OSPF into IS-IS.
And, the cool part about IS-IS is that it will carry both IP and IPv6 addresses in a singe configuration. If you remember that for OSPF we have to configure a different protocol for IPv6 (ospfv3), but not here for IS-IS. This is because IS-IS routing protocol was created for the ISO protocol, which is now only a reference model (ISO Model) and describes how data is flowing trough the network. But the actual protocol that rules the world today is TCP/IP. And since IS-IS was created for the ISO protocol, it was modified for TCP/IP and is called now Integrated IS-IS (this is actually configured now). Even though IS-IS was not initially designed for IP, it provides a simple way to add new extensions by using TLV (Type Length Value) fields. The concept is: Just adding new TLVs for a new protocol family and If you don’t support a given TLV just silently ignore it. More on this later.
Now let's see the configuration for router R2_L1-L2:
interfaces { ge-0/0/0 { description "Link to SW1 e0/3"; unit 0 { family inet { address 10.0.2.4/29; } family iso; family inet6 { address fe80::122/64; address 2001:abc:2::4/64; } } } ge-0/0/1 { description "Link to R2_L1 ge-0/0/1"; unit 0 { family inet { address 10.0.12.13/30; } family iso; family inet6 { address fe80::122/64; address 2001:abc:12:12::13/64; } } } ge-0/0/2 { description "Link to R1_L1 ge-0/0/2"; unit 0 { family inet { address 10.0.12.9/30; } family iso; family inet6 { address fe80::122/64; address 2001:abc:12:8::9/64; } } } lo0 { unit 0 { family inet { address 12.12.12.2/32; } family iso { address 49.0021.0000.0000.0122.00; } family inet6 { address fe80::122/64; address 2001:abc:def:12::2/128; } } }}You will see here that the iso protocol is enabled for all the interfaces (I hope you did download the image to have the map for a clear understanding), this is because we want to establish a neighbour adjacency on every interface.
I hope you also observed that the iso address configured on the loopback 0 has the same area ID: 49.0021.0000.0000.0122.00.
This is because the adjacency will form on the circuit (which is the link between two or more nodes), and there are some rules here as follow:
So this will work:
But this will NOT work:
Ok, now, but have do we do this, I mean on the config above there is nothing that says that the link is a Level 1 circuit or a Level 2 circuit?
Well, this is because in Junos if you don't specify, the router will try to form an L1/L2 <--> L1/L2 adjacency. OK, now before we check the adjacency between R1_L1-L2 and R2_L1-L2 let's create a traceoption file (debug) for to see the process, to see how the adjacency comes up. Let's do this only on router R1_L1-L2. And here is the config for this:
protocols { isis { traceoptions { file IS-IS-adj size 10k files 2 world-readable; flag state detail; }IS-IS-adj is the name of the file, the size is set to minimum 10k and the the number of files is set also to minimum which is 2. And the flag specify which debug messages we wand to see. Now from operation mode we will start the monitor of the file wit the command:
rokk@R1_L1-L2> monitor start IS-IS-adj
Now let's see the output of the 2 routers (R1_L1-L2 and R2_L1-L2) forming an adjacency:
*** IS-IS-adj ***Jun 1 08:20:25.656811 New adjacency for 0000.0000.0122 on ge-0/0/0.0, level 1Jun 1 08:20:25.660495 Adjacency state change, 0000.0000.0122, state New -> InitializingJun 1 08:20:25.660509 interface ge-0/0/0.0, level 1Jun 1 08:20:25.660937 ISIS L1 neighbor 0000.0000.0122 on interface ge-0/0/0.0 set 27 secs 0 nsecsJun 1 08:20:25.675893 Adjacency state change, 0000.0000.0122, state Initializing -> UpJun 1 08:20:25.675904 interface ge-0/0/0.0, level 1Jun 1 08:20:25.682056 New adjacency for 0000.0000.0122 on ge-0/0/0.0, level 2Jun 1 08:20:25.682082 Adjacency state change, 0000.0000.0122, state New -> InitializingJun 1 08:20:25.682087 interface ge-0/0/0.0, level 2Jun 1 08:20:25.682145 Adjacency state change, 0000.0000.0122, state Initializing -> UpJun 1 08:20:25.682150 interface ge-0/0/0.0, level 2As we can see here, there where 2 adjacency established between the two routers (R1_L1-L2 and R2_L1-L2), one Level 1 adjacency and one Level 2 adjacency. Now let's see the output of the show isis adjacency:
rokk@R1_L1-L2> show isis adjacency Interface System L State Hold (secs) SNPAge-0/0/0.0 R2_L1-L2 1 Up 6 0:5:86:71:ae:0ge-0/0/0.0 R2_L1-L2 2 Up 7 0:5:86:71:ae:0It shows the interface on which the neighbour was learned. Then the system, which is the router hostname of the neighbour. And then which kind of adjacency was created; as we can see there is L1 and L2 adjacency. The last one is the SPNA (subnetwork point of attachment) which is actually the mac address of the router interface. This is the output of from R1_L1-L2, this means that the SPNA address here is the mac address of the neighbour router with which was formed an adjacency. Let's see the mac address of the other router:
rokk@R2_L1-L2> show interfaces ge-0/0/0 | match "Hardware address" Current address: 00:05:86:71:ae:00, Hardware address: 00:05:86:71:ae:00Yes, looks good. Now let's look at the detail output to see more info:
rokk@R1_L1-L2> show isis adjacency detail R2_L1-L2 Interface: ge-0/0/0.0, Level: 1, State: Up, Expires in 7 secs Priority: 64, Up/Down transitions: 1, Last transition: 00:36:11 ago Circuit type: 3, Speaks: IP, IPv6, MAC address: 0:5:86:71:ae:0 Topologies: Unicast Restart capable: Yes, Adjacency advertisement: Advertise LAN id: R2_L1-L2.02, IP addresses: 10.0.2.4 IPv6 addresses: fe80::122R2_L1-L2 Interface: ge-0/0/0.0, Level: 2, State: Up, Expires in 6 secs Priority: 64, Up/Down transitions: 1, Last transition: 00:36:11 ago Circuit type: 3, Speaks: IP, IPv6, MAC address: 0:5:86:71:ae:0 Topologies: Unicast Restart capable: Yes, Adjacency advertisement: Advertise LAN id: R2_L1-L2.02, IP addresses: 10.0.2.4 IPv6 addresses: fe80::122Like we said before: we have configured a single routing protocol which supports more that one Layer 3 protocol (Speaks: IP, IPv6). The Circuit type is 3. Why 3? well it's a fixed value. It can be 0, 1, 2 and 3. The rules are:
Ok, now let's look at the interfaces on which the IS-IS was enabled for both of the routers to see if there are some differences:
rokk@R1_L1-L2> show isis interface detail | no-more IS-IS interface database:ge-0/0/0.0 Index: 330, State: 0x6, Circuit id: 0x1, Circuit type: 3 LSP interval: 100 ms, CSNP interval: 10 s Adjacency advertisement: Advertise Level Adjacencies Priority Metric Hello (s) Hold (s) Designated Router 1 1 64 10 9.000 27 R2_L1-L2.02 (not us) 2 1 64 10 9.000 27 R2_L1-L2.02 (not us)ge-0/0/1.0 Index: 331, State: 0x6, Circuit id: 0x1, Circuit type: 3 LSP interval: 100 ms, CSNP interval: 10 s Adjacency advertisement: Advertise Level Adjacencies Priority Metric Hello (s) Hold (s) Designated Router 1 0 64 10 9.000 27 2 0 64 10 9.000 27ge-0/0/2.0 Index: 332, State: 0x6, Circuit id: 0x1, Circuit type: 3 LSP interval: 100 ms, CSNP interval: 10 s Adjacency advertisement: Advertise Level Adjacencies Priority Metric Hello (s) Hold (s) Designated Router 1 0 64 10 9.000 27 2 0 64 10 9.000 27ge-0/0/3.0 Index: 333, State: 0x4, Circuit id: 0x1, Circuit type: 0 LSP interval: 100 ms, CSNP interval: 10 s Adjacency advertisement: Advertise Level Adjacencies Priority Metric Hello (s) Hold (s) Designated Router 1 0 64 10 Passive 2 0 64 10 PassiveRight now an adjacency has formed only on interface ge-0/0/0.0. We see that there are actually 2 adjacency on the same interface, the circuit type is 3, because is a L1/L2 adjacency (but we will change that later), and there is more. You will see Hello time in seconds, Hold time in seconds and Designated Router, just like in OSPF. But look at below at the output of router R2_L1-L2, the Hello time and Hold time is different, but why? Let's first talk about the Designated router first.
rokk@R2_L1-L2> show isis interface detail | no-more IS-IS interface database:ge-0/0/0.0 Index: 329, State: 0x6, Circuit id: 0x2, Circuit type: 3 LSP interval: 100 ms, CSNP interval: 10 s Adjacency advertisement: Advertise Level Adjacencies Priority Metric Hello (s) Hold (s) Designated Router 1 1 64 10 3.000 9 R2_L1-L2.02 (us) 2 1 64 10 3.000 9 R2_L1-L2.02 (us)ge-0/0/1.0 Index: 330, State: 0x6, Circuit id: 0x1, Circuit type: 3 LSP interval: 100 ms, CSNP interval: 10 s Adjacency advertisement: Advertise Level Adjacencies Priority Metric Hello (s) Hold (s) Designated Router 1 0 64 10 9.000 27 2 0 64 10 9.000 27ge-0/0/2.0 Index: 331, State: 0x6, Circuit id: 0x1, Circuit type: 3 LSP interval: 100 ms, CSNP interval: 10 s Adjacency advertisement: Advertise Level Adjacencies Priority Metric Hello (s) Hold (s) Designated Router 1 0 64 10 9.000 27 2 0 64 10 9.000 27IS-IS is like OSPF a link state dynamic routing protocols and elects a Designated router in a broadcast or multi-access network. But there are some differences:
In IS-IS the designated router is called the designated intermediate system, (DIS - but IS means router, so you can translate it also as designated router).
The IS-IS DIS election process is achieved by assigning a priority for Level 1 and Level 2 on every interface where IS-IS was enabled. The priority is a number from 0 to 127. The Junos OS uses a default priority of 64 for both levels. If the priority is 0 on an interface then the router will never be the DIS on the segment (just like in OSPF), and of course, the higher the priority, the better. The router with the highest priority on the interface wins the election process. But, by default is 64 and if you don't change this, by configure it to some other value, then the tie breaker becomes the the mac address of links (SPNA - subnetwork point of attachment). And then the router with the highest numerically mac address wins the election process. So let's see in our example:
rokk@R1_L1-L2> show interfaces ge-0/0/0 | match "Hardware address" Current address: 00:05:86:71:67:00, Hardware address: 00:05:86:71:67:00R2_L1-L2 has a priority of 64 and the mac address of the interface is:
rokk@R2_L1-L2> show interfaces ge-0/0/0 | match "Hardware address" Current address: 00:05:86:71:ae:00, Hardware address: 00:05:86:71:ae:00And the winner is R2_L1-L2, because has the highest mac address on the link, for both Level 1 and Level 2. Let's see again the output:
rokk@R2_L1-L2> show isis interface ge-0/0/0.0 detail IS-IS interface database:ge-0/0/0.0 Index: 329, State: 0x6, Circuit id: 0x2, Circuit type: 3 LSP interval: 100 ms, CSNP interval: 10 s Adjacency advertisement: Advertise Level Adjacencies Priority Metric Hello (s) Hold (s) Designated Router 1 1 64 10 3.000 9 R2_L1-L2.02 (us) 2 1 64 10 3.000 9 R2_L1-L2.02 (us)------------------------------------------------------------------------------------------------------rokk@R1_L1-L2> show isis interface ge-0/0/0.0 detail IS-IS interface database:ge-0/0/0.0 Index: 330, State: 0x6, Circuit id: 0x1, Circuit type: 3 LSP interval: 100 ms, CSNP interval: 10 s Adjacency advertisement: Advertise Level Adjacencies Priority Metric Hello (s) Hold (s) Designated Router 1 1 64 10 9.000 27 R2_L1-L2.02 (not us) 2 1 64 10 9.000 27 R2_L1-L2.02 (not us)Now the Hello and Hold interval time in seconds. Here are the rules (the default ones):
I think there is enough about the theory, for more of this I will put at the bottom the resources I used for this post. But for now let's put some objectives for the topology:
Configuration for R1_L2:
router isis net 49.0002.0000.0000.0021.00 is-type level-2-only router-id Loopback0!nterface Loopback0 ip address 2.2.2.1 255.255.255.255 ip router isis ipv6 address FE80::21 link-local ipv6 address 2001:ABC:DEF:2::1/128 ipv6 router isis !interface Ethernet0/0 description Link to SW1 e0/0 ip address 10.0.2.1 255.255.255.248 ip router isis duplex auto ipv6 address FE80::21 link-local ipv6 address 2001:ABC:2::1/64 ipv6 router isis !interface Serial1/0 description Link to R2_L2 s1/0 ip address 10.0.2.9 255.255.255.252 ip router isis ipv6 address FE80::21 link-local ipv6 address 2001:ABC:2:8::9/64 ipv6 router isis serial restart-delay 0Configuration for R2_L2:
router isis net 49.0002.0000.0000.0022.00 is-type level-2-only router-id Loopback0!interface Loopback0 ip address 2.2.2.2 255.255.255.255 ip router isis ipv6 address FE80::22 link-local ipv6 address 2001:ABC:DEF:2::2/128 ipv6 router isis!interface Ethernet0/0 description Link to SW1 e0/1 ip address 10.0.2.2 255.255.255.248 ip router isis duplex auto ipv6 address FE80::22 link-local ipv6 address 2001:ABC:2::2/64 ipv6 router isis !interface Serial1/0 description Link to R1 s1/0 ip address 10.0.2.10 255.255.255.252 ip router isis ipv6 address FE80::22 link-local ipv6 address 2001:ABC:2:8::10/64 ipv6 router isis serial restart-delay 0!The two routers where configured only for Level 2. Now we will see on router R1_L1-L2 if the DIS router was changed:
rokk@R1_L1-L2> show isis interface detail IS-IS interface database:ge-0/0/0.0 Index: 330, State: 0x6, Circuit id: 0x2, Circuit type: 3 LSP interval: 100 ms, CSNP interval: 10 s Adjacency advertisement: Advertise Level Adjacencies Priority Metric Hello (s) Hold (s) Designated Router 1 1 64 10 3.000 9 R1_L1-L2.02 (us) 2 3 64 10 9.000 27 R2_L2.01 (not us)From the output we can see that there are e adjacency for Level 2:
rokk@R1_L1-L2> show isis adjacency Interface System L State Hold (secs) SNPAge-0/0/0.0 R1_L2 2 Up 22 aa:bb:cc:0:1:0ge-0/0/0.0 R2_L2 2 Up 8 aa:bb:cc:0:4:0ge-0/0/0.0 R2_L1-L2 1 Up 26 0:5:86:71:3b:0ge-0/0/0.0 R2_L1-L2 2 Up 19 0:5:86:71:3b:0So, one adjacency with router R1_L2, one with R2_L2 and one with R2_L1-L2. And only one Level 1 adjacency with router R2_L1-L2.
We also noticed that the DIS router was changed for the Level 2 adjacency, but why? Let's remember. The higher the priority the better. But by default the priority is 64. So the next one is the mac address. Let's see the mac address of the four routers:
rokk@R1_L1-L2> show interfaces ge-0/0/0 | match "Hardware address" Current address: 00:05:86:71:42:00, Hardware address: 00:05:86:71:42:00--------------------------------------------------------------------------rokk@R2_L1-L2> show interfaces ge-0/0/0 | match "Hardware address" Current address: 00:05:86:71:3b:00, Hardware address: 00:05:86:71:3b:00--------------------------------------------------------------------------R1_L2#show interfaces ethernet 0/0 | include Hardware Hardware is AmdP2, address is aabb.cc00.0100 (bia aabb.cc00.0100)--------------------------------------------------------------------------R2_L2#show interfaces ethernet 0/0 | include Hardware Hardware is AmdP2, address is aabb.cc00.0400 (bia aabb.cc00.0400)So, router R2_L2 is the winner!!. Ok, but wait. Router R2_L1-L2 was already the DIS router, is this here some kind of preemption? Yes, exactly like you enable preemption for HSRP, or VRRP. Here, in the DIS election, if there is another router in the LAN segment with a higher priority/mac address, then the router takes the role as DIS router.
Great until now. Let's change the priority for router R1_L1-L2 to 100 and for router R2_L2 to 0. And here is how we do that:
rokk@R1_L1-L2> show configuration protocols isis | display set set protocols isis interface ge-0/0/0.0 level 2 priority 100set protocols isis interface ge-0/0/0.0 level 1 disableset protocols isis interface ge-0/0/1.0 level 2 disableset protocols isis interface ge-0/0/2.0 level 2 disableset protocols isis interface ge-0/0/3.0 passive--------------------------------------------------------------R2_L2#show running-config interface ethernet 0/0!interface Ethernet0/0 description Link to SW1 e0/1 ip address 10.0.2.2 255.255.255.248 ip router isis duplex auto ipv6 address FE80::22 link-local ipv6 address 2001:ABC:2::2/64 ipv6 router isis isis priority 0For Junos OS the configuration is done under the protocol isis and for IOS the configuration is done under the interface. You also notice that for R1_L1-L2 there are some level 2 passive and level 1 passive statements there. This was done so that for the DIS should be elected only for level 2 between R1_L1-L2 and R2_L1-L2 (it is also the second objective).
Now let's see who wins the election:
rokk@R1_L1-L2> show isis interface ge-0/0/0.0 detail IS-IS interface database:ge-0/0/0.0 Index: 330, State: 0x6, Circuit id: 0x2, Circuit type: 2 LSP interval: 100 ms, CSNP interval: 10 s Adjacency advertisement: Advertise Level Adjacencies Priority Metric Hello (s) Hold (s) Designated Router 1 0 64 10 Disabled 2 3 100 10 3.000 9 R1_L1-L2.02 (us)Perfect. Preemption was taken effect and now router R1_L1-L2 is the DIS router. Great, point 1 and 2 done.
The objective for point 3 was: "On router R1_L1-L2 interface ge-0/0/3 should be remain as passive. The same for the interface ge-0/0/3 on router R2_L1".
Now for the router R1_L1-L2 the interface ge-0/0/3 is already as passive, so only router R2_L1 remains to configure:
set protocols isis interface ge-0/0/0.0 point-to-pointset protocols isis interface ge-0/0/0.0 level 2 disableset protocols isis interface ge-0/0/1.0 point-to-pointset protocols isis interface ge-0/0/1.0 level 2 disableset protocols isis interface ge-0/0/2.0 point-to-pointset protocols isis interface ge-0/0/2.0 level 2 disableset protocols isis interface ge-0/0/3.0 passiveSo, this is it, not much to do. Also, the point to point was configured between this router and the other that participate in the IS-IS adjacency. This is to disable the election for a DIS. To mention here is that, you have to configure both sides as point-to-point to make the adjacency work. Otherwise, no adjacency will be formed.
rokk@R2_L1> show isis interface ge-0/0/0.0 detail IS-IS interface database:ge-0/0/0.0 Index: 329, State: 0x6, Circuit id: 0x1, Circuit type: 1 LSP interval: 100 ms, CSNP interval: disabled Adjacency advertisement: Advertise Level Adjacencies Priority Metric Hello (s) Hold (s) Designated Router 1 0 64 10 9.000 27 2 0 64 10 Disabledrokk@R2_L1> show isis interface ge-0/0/3.0 detail IS-IS interface database:ge-0/0/3.0 Index: 332, State: 0x4, Circuit id: 0x1, Circuit type: 0 LSP interval: 100 ms, CSNP interval: 10 s Adjacency advertisement: Advertise Level Adjacencies Priority Metric Hello (s) Hold (s) Designated Router 1 0 64 10 Passive 2 0 64 10 PassiveSo, for this router R2_L1, there is not a DIS election. And is enabled only for Level 1, as you can see the Hello timer for Level 2 is disabled.
Also for interface ge-0/0/3.0 is configured as passive, so no adjacency will be formed trough this interface. So objective 3 done.
Objective 4 is: Configured R1_L1 and R2_L1 as only Level 1 routers in the same area 21.
Configuration for R1_L1:
interfaces { ge-0/0/0 { description "Link to R2_L1 ge-0/0/0"; unit 0 { family inet { address 10.0.1.1/30; } family iso; family inet6 { address fe80::11/64; address 2001:abc:1::1/64; } } } ge-0/0/1 { description "Link to R1_L1-L2 ge-0/0/1"; unit 0 { family inet { address 10.0.12.2/30; } family iso; family inet6 { address fe80::11/64; address 2001:abc:12::1/64; } } } ge-0/0/2 { description "Link to R2_L1-L2 ge-0/0/2"; unit 0 { family inet { address 10.0.12.10/30; } family iso; family inet6 { address fe80::11/64; address 2001:abc:12:8::10/64; } } } lo0 { unit 0 { family inet { address 1.1.1.1/32; } family iso { address 49.0021.0000.0000.0011.00; } family inet6 { address fe80::11/64; address 2001:abc:def:1::1/128; } } }}protocols { isis { interface ge-0/0/0.0 { point-to-point; level 2 disable; } interface ge-0/0/1.0 { point-to-point; level 2 disable; } interface ge-0/0/2.0 { point-to-point; level 2 disable; } }}Configuration for R2-L1:
interfaces { ge-0/0/0 { description "Link to R1_L1 ge-0/0/0"; unit 0 { family inet { address 10.0.1.2/30; } family iso; family inet6 { address fe80::12/64; address 2001:abc:1::2/64; } } } ge-0/0/1 { description "Link to R2_L1-L2 ge-0/0/1"; unit 0 { family inet { address 10.0.12.14/30; } family iso; family inet6 { address 2001:abc:12:12::14/64; address fe80::12/64; } } } ge-0/0/2 { description "Link to R1_L1-L2 ge-0/0/1"; unit 0 { family inet { address 10.0.12.6/30; } family iso; family inet6 { address fe80::12/64; address 2001:abc:12:4::6/64; } } } ge-0/0/3 { description "Link to R2-E e0/0"; unit 0 { family inet { address 172.16.1.1/30; } family inet6 { address fe80::12/64; address 2001:abc:172::1/64; } } } lo0 { unit 0 { family inet { address 1.1.1.2/32; } family iso { address 49.0021.0000.0000.0012.00; } family inet6 { address 2001:abc:def:1::2/128; } } }}protocols { isis { interface ge-0/0/0.0 { point-to-point; level 2 disable; } interface ge-0/0/1.0 { point-to-point; level 2 disable; } interface ge-0/0/2.0 { point-to-point; level 2 disable; } interface ge-0/0/3.0 { passive; } }}I hope you have download the topology, to have a better look.
Now let's see the neighbours from R1_L1 perspective:
rokk@R1_L1> show isis adjacency Interface System L State Hold (secs) SNPAge-0/0/0.0 R2_L1 1 Up 22ge-0/0/1.0 R1_L1-L2 1 Up 23ge-0/0/2.0 R2_L1-L2 1 Up 19Looks good.
Interesting here is that, a Level 1 router knows only the routes from a Level 1 domain. So only the routes in his area and only the level 1 routes. But there is more. To reach a destination from outside his area, the Level 1 router generates himself a default route that is pointing to the nearest Level 2 router, because that how he know how to get outside of his area. The interesting part is that this does the Level 1 router. It's not like OSPF, the ABR generate a default route for a totally stubby area. Here the Level 1 router does that, and by default and you don't have to configure something specific for that. Let's see the routing table for IS-IS from R1_L1:
rokk@R1_L1> show route table inet.0 protocol isis inet.0: 12 destinations, 12 routes (12 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both0.0.0.0/0 *[IS-IS/15] 00:14:05, metric 10 to 10.0.12.1 via ge-0/0/1.0 > to 10.0.12.9 via ge-0/0/2.010.0.12.4/30 *[IS-IS/15] 00:14:05, metric 20 > to 10.0.1.2 via ge-0/0/0.0 to 10.0.12.1 via ge-0/0/1.010.0.12.12/30 *[IS-IS/15] 00:22:31, metric 20 > to 10.0.1.2 via ge-0/0/0.0 to 10.0.12.9 via ge-0/0/2.0172.16.1.0/30 *[IS-IS/15] 00:23:03, metric 20 > to 10.0.1.2 via ge-0/0/0.0192.168.1.0/30 *[IS-IS/15] 00:14:05, metric 20 > to 10.0.12.1 via ge-0/0/1.0If you can see from the routing table the default route has 2 next-hop. It seems like there is a load balancing path but, on Junos OS, you have to configure a policy for load balancing (and only equal cost load balancing). Now let's take a closer look only at the default route that was generated:
rokk@R1_L1> show route 0.0.0.0 extensive inet.0: 12 destinations, 12 routes (12 active, 0 holddown, 0 hidden)0.0.0.0/0 (1 entry, 1 announced)TSI:KRT in-kernel 0.0.0.0/0 -> {10.0.12.9} *IS-IS Preference: 15 Level: 1 Next hop type: Router Address: 0x95a4200 Next-hop reference count: 1 Next hop: 10.0.12.1 via ge-0/0/1.0 Session Id: 0x0 Next hop: 10.0.12.9 via ge-0/0/2.0, selected Session Id: 0x0 State: <Active Int> Age: 14:41 Metric: 10 Validation State: unverified Task: IS-IS Announcement bits (1): 0-KRT AS path: IFrom here we see that it is a Level 1 route, and that actually the next hop is 10.0.12.9, which is router R2_L1-L2, you can see from:
KRT in-kernel 0.0.0.0/0 -> {10.0.12.9}or:
Next hop: 10.0.12.9 via ge-0/0/2.0, selectedThe metric is 10 and the route is learned trough IS-IS protocol, with a route preference of 15 (aka administrative distance).
If we are here, let's talk more about the route preference and the metric of this routing protocol.
By default:
Objective number 5 is: Configured OSPF between R1_L1-L2 and the external router R1-E in area 0.
Ok, but here we will configure ospf and ospfv3 (for IPv6). This topic is about IS-IS, so here I will paste only the configuration for OSPF for both of the routers.
Configuration for router R1_L1-L2:
set protocols ospf area 0.0.0.0 interface ge-0/0/3.0set protocols ospf3 area 0.0.0.0 interface ge-0/0/3.0 Yes, I know. Not much.
Configuration for router R1-E:
router ospf 1 router-id 1.1.1.1 passive-interface default no passive-interface Ethernet0/0!ipv6 router ospf 1 router-id 1.1.1.1 passive-interface default no passive-interface Ethernet0/0!interface Loopback2 ip address 192.168.2.1 255.255.255.0 ip ospf 1 area 0 ipv6 address FE80::1 link-local ipv6 address 2001:192:2::1/64 ipv6 ospf 1 area 0!interface Loopback3 ip address 192.168.3.1 255.255.255.0 ip ospf 1 area 0 ipv6 address FE80::1 link-local ipv6 address 2001:192:3::1/64 ipv6 ospf 1 area 0!interface Loopback4 ip address 192.168.4.1 255.255.255.0 ip ospf 1 area 0 ipv6 address FE80::1 link-local ipv6 address 2001:192:4::1/64 ipv6 ospf 1 area 0!interface Ethernet0/0 description Link to R1_L1-L2 ge-0/0/3 ip address 192.168.1.2 255.255.255.252 ip ospf 1 area 0 ipv6 address FE80::1 link-local ipv6 address 2001:ABC:192::2/64 ipv6 ospf 1 area 0!And the adjacency should be up, let's check:
rokk@R1_L1-L2> show ospf neighbor Address Interface State ID Pri Dead192.168.1.2 ge-0/0/3.0 Full 1.1.1.1 1 31rokk@R1_L1-L2> show ospf3 neighbor ID Interface State Pri Dead1.1.1.1 ge-0/0/3.0 Full 1 37 Neighbor-address fe80::1And the routing table of router R1_L1-L2:
rokk@R1_L1-L2> show route protocol ospf inet.0: 20 destinations, 20 routes (20 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both192.168.2.1/32 *[OSPF/10] 00:15:51, metric 2 > to 192.168.1.2 via ge-0/0/3.0192.168.3.1/32 *[OSPF/10] 00:15:51, metric 2 > to 192.168.1.2 via ge-0/0/3.0192.168.4.1/32 *[OSPF/10] 00:15:51, metric 2 > to 192.168.1.2 via ge-0/0/3.0224.0.0.5/32 *[OSPF/10] 00:16:06, metric 1 MultiRecvinet6.0: 21 destinations, 25 routes (21 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both2001:192:2::1/128 *[OSPF3/10] 00:14:38, metric 1 > to fe80::1 via ge-0/0/3.02001:192:3::1/128 *[OSPF3/10] 00:14:38, metric 1 > to fe80::1 via ge-0/0/3.02001:192:4::1/128 *[OSPF3/10] 00:14:38, metric 1 > to fe80::1 via ge-0/0/3.0ff02::5/128 *[OSPF3/10] 00:14:43, metric 1 MultiRecvLooks good until now. And I think we can do objective number 6 here also.
Let's see the configuration of router R2_L1:
set protocols ospf area 0.0.0.0 interface ge-0/0/3.0set protocols ospf3 area 0.0.0.0 interface ge-0/0/3.0And the configuration of router R2-E:
router ospf 1 router-id 2.2.2.2 passive-interface default no passive-interface Ethernet0/0!ipv6 router ospf 1 router-id 2.2.2.2 passive-interface default no passive-interface Ethernet0/0!interface Loopback2 ip address 172.16.2.1 255.255.255.0 ip ospf 1 area 0 ipv6 address FE80::2 link-local ipv6 address 2001:172:2::1/64 ipv6 ospf 1 area 0!interface Loopback3 ip address 172.16.3.1 255.255.255.0 ip ospf 1 area 0 ipv6 address FE80::2 link-local ipv6 address 2001:172:3::1/64 ipv6 ospf 1 area 0!interface Loopback4 ip address 172.16.4.1 255.255.255.0 ip ospf 1 area 0 ipv6 address FE80::2 link-local ipv6 address 2001:172:4::1/64 ipv6 ospf 1 area 0!interface Ethernet0/0 ip address 172.16.1.2 255.255.255.252 ip ospf 1 area 0 ipv6 address FE80::2 link-local ipv6 address 2001:ABC:172::2/64 ipv6 ospf 1 area 0And let's check the neighbour adjacency:
rokk@R2_L1> show ospf neighbor Address Interface State ID Pri Dead172.16.1.2 ge-0/0/3.0 Full 2.2.2.2 1 36rokk@R2_L1> show ospf3 neighbor ID Interface State Pri Dead2.2.2.2 ge-0/0/3.0 Full 1 32 Neighbor-address fe80::2Now, on router R2_L1 there should be some routes learned from router R2-E. Let's see:
rokk@R2_L1> show route protocol ospf inet.0: 17 destinations, 17 routes (17 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both172.16.2.1/32 *[OSPF/10] 00:04:34, metric 2 > to 172.16.1.2 via ge-0/0/3.0172.16.3.1/32 *[OSPF/10] 00:04:34, metric 2 > to 172.16.1.2 via ge-0/0/3.0172.16.4.1/32 *[OSPF/10] 00:04:34, metric 2 > to 172.16.1.2 via ge-0/0/3.0224.0.0.5/32 *[OSPF/10] 00:04:49, metric 1 MultiRecvinet6.0: 20 destinations, 23 routes (20 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both2001:172:2::1/128 *[OSPF3/10] 00:04:44, metric 1 > to fe80::2 via ge-0/0/3.02001:172:3::1/128 *[OSPF3/10] 00:04:44, metric 1 > to fe80::2 via ge-0/0/3.02001:172:4::1/128 *[OSPF3/10] 00:04:44, metric 1 > to fe80::2 via ge-0/0/3.0ff02::5/128 *[OSPF3/10] 00:04:49, metric 1 MultiRecvAnd... that's it. Now the good part. Objective number 7 was: Advertise the routes learned trough OSPF into IS-IS on both routers R1_L1-L2 and R2_L1. And we begin on router R2_L1. Here is the configuration:
rokk@R2_L1> show configuration policy-options policy-statement OSPF { term 1 { from { protocol ospf; route-filter 172.16.2.1/32 exact; route-filter 172.16.3.1/32 exact; route-filter 172.16.4.1/32 exact; } then accept; } term 2 { from { protocol ospf3; route-filter 2001:172:2::1/128 exact; route-filter 2001:172:3::1/128 exact; route-filter 2001:172:4::1/128 exact; } then accept; }}rokk@R2_L1> show configuration protocols isis export OSPF;Redistribution from OSPF to IS-IS in Junos is done trough a policy. This is done under policy-options policy-statement hierarchy. The name of the policy is OSPF and it has 2 terms. The first one is for ospf for IPv4 and the second one is for ospfv3 for IPv6. And it says, take the exact routes from the routing table which was learned trough protocol ospf and ospfv3 and accept them.
The policy is just to match the traffic (you can also modify some parameters), but that's it. I mean, the policy take effect after it's applied to the routing protocol IS-IS. OK. Now let's see the results from a Level 1 router and a Level 2 router. R1_L1-L2 and R1_L1:
rokk@R1_L1-L2> show route 172.16.2.1 inet.0: 23 destinations, 23 routes (23 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both172.16.2.1/32 *[IS-IS/160] 01:06:21, metric 12 > to 10.0.12.6 via ge-0/0/2.0---------------------------------------------------------------------rokk@R1_L1-L2> show route 172.16.2.1 extensive inet.0: 23 destinations, 23 routes (23 active, 0 holddown, 0 hidden)172.16.2.1/32 (1 entry, 1 announced)TSI:KRT in-kernel 172.16.2.1/32 -> {10.0.12.6} *IS-IS Preference: 160 Level: 1 Next hop type: Router, Next hop index: 612 Address: 0x9764f28 Next-hop reference count: 10 Next hop: 10.0.12.6 via ge-0/0/2.0, selected Session Id: 0x9 State: <Active Int Ext> Age: 1:06:27 Metric: 12 Validation State: unverified Task: IS-IS Announcement bits (1): 0-KRT AS path: ISo, router R1_L1-L2 is receiving the route from router with the IP 10.0.12.6 (which is router R2_L1) as a Level 1 route, but as a Level 1 external route. We can see this because the route preference is 160. The route preference of 165 is for a Level 2 route. So we can conclude from here that a Level 1 route is more preferred than a Level 2 route. The same is for internal routes.
Now let's see the routing table for IPv6. The route preference should be the same here:
rokk@R1_L1-L2> show route 2001:172:3::1 inet6.0: 25 destinations, 29 routes (25 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both2001:172:3::1/128 *[IS-IS/160] 01:15:56, metric 11 > to fe80::12 via ge-0/0/2.0------------------------------------------------------------------------rokk@R1_L1-L2> show route 2001:172:3::1 extensive inet6.0: 25 destinations, 29 routes (25 active, 0 holddown, 0 hidden)2001:172:3::1/128 (1 entry, 1 announced)TSI:KRT in-kernel 2001:172:3::1/128 -> {fe80::12} *IS-IS Preference: 160 Level: 1 Next hop type: Router, Next hop index: 613 Address: 0x9764f7c Next-hop reference count: 11 Next hop: fe80::12 via ge-0/0/2.0, selected Session Id: 0xa State: <Active Int Ext> Age: 1:15:59 Metric: 11 Validation State: unverified Task: IS-IS Announcement bits (1): 0-KRT AS path: IAs we can see, the same here. The only difference here is that the next hope for this route is the link local address of the neighbour router.
Good, looks nice. Let's see now the same, but from the perspective of a Level 1 router, R1_L1:
rokk@R1_L1> show route 172.16.4.1 extensive inet.0: 15 destinations, 15 routes (15 active, 0 holddown, 0 hidden)172.16.4.1/32 (1 entry, 1 announced)TSI:KRT in-kernel 172.16.4.1/32 -> {10.0.1.2} *IS-IS Preference: 160 Level: 1 Next hop type: Router, Next hop index: 593 Address: 0x940f04c Next-hop reference count: 9 Next hop: 10.0.1.2 via ge-0/0/0.0, selected Session Id: 0x5 State: <Active Int Ext> Age: 1:18:28 Metric: 12 Validation State: unverified Task: IS-IS Announcement bits (1): 0-KRT AS path: I---------------------------------------------------------------------rokk@R1_L1> show route 2001:172:4::1 extensive inet6.0: 16 destinations, 19 routes (16 active, 0 holddown, 0 hidden)2001:172:4::1/128 (1 entry, 1 announced)TSI:KRT in-kernel 2001:172:4::1/128 -> {fe80::12} *IS-IS Preference: 160 Level: 1 Next hop type: Router, Next hop index: 594 Address: 0x940eff8 Next-hop reference count: 9 Next hop: fe80::12 via ge-0/0/0.0, selected Session Id: 0x6 State: <Active Int Ext> Age: 1:18:59 Metric: 11 Validation State: unverified Task: IS-IS Announcement bits (1): 0-KRT AS path: IReally not a difference.
OK, now let's configure a routing policy on router R1_L1-L2:
rokk@R1_L1-L2> show configuration policy-optionspolicy-statement OSPF { term 1 { from { protocol ospf; route-filter 192.168.2.1/32 exact; route-filter 192.168.3.1/32 exact; route-filter 192.168.4.1/32 exact; } then accept; } term 2 { from { protocol ospf3; route-filter 2001:192:2::1/128 exact; route-filter 2001:192:3::1/128 exact; route-filter 2001:192:4::1/128 exact; } then accept; }}rokk@R1_L1-L2> show configuration protocols isis export OSPF;level 1 disable;Looks good. Pretty much the same as the policy that was configured on router R2_L1. The only difference is the is also specified the the policy should be exported only as a Level 2 route. Now let's see the routing table from other routers:
R1_L2#show ip route 192.168.4.1 Routing entry for 192.168.4.1/32 Known via "isis", distance 115, metric 12, type level-2 Redistributing via isis Last update from 10.0.2.3 on Ethernet0/0, 00:02:57 ago Routing Descriptor Blocks: * 10.0.2.3, from 12.12.12.1, 00:02:57 ago, via Ethernet0/0 Route metric is 12, traffic share count is 1R1_L2#show ipv6 route 2001:192:4::1Routing entry for 2001:192:4::1/128 Known via "isis", distance 115, metric 11, type level-2 Route count is 1/1, share count 0 Routing paths: FE80::121, Ethernet0/0 From FE80::121 Last updated 00:03:12 agoFor IOS on cisco routers the administrative distance doesn't change for the IS-IS protocol. It's the same for internal and external routes. And it has also different values.
rokk@R2_L1> show route 192.168.2.1 inet.0: 16 destinations, 16 routes (16 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both0.0.0.0/0 *[IS-IS/15] 00:03:06, metric 10 > to 10.0.12.13 via ge-0/0/1.0rokk@R2_L1> show route 2001:192:2::1 inet6.0: 18 destinations, 21 routes (18 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both::/0 *[IS-IS/15] 00:03:16, metric 10 > to fe80::122 via ge-0/0/1.0Ok, but nothing here. Well remember that the policy was exported only as a Level 2 route. And the routers which are only Level 1 will know only what happens inside his area, and for the rest of the routes outside his area it will generate a default route to get there. Let's see if there is a connectivity to the external routes:
rokk@R2_L1> ping rapid 192.168.4.1 PING 192.168.4.1 (192.168.4.1): 56 data bytes!!!!!--- 192.168.4.1 ping statistics ---5 packets transmitted, 5 packets received, 0% packet lossround-trip min/avg/max/stddev = 2.747/3.647/5.547/1.063 msrokk@R2_L1> traceroute 192.168.4.1 traceroute to 192.168.4.1 (192.168.4.1), 30 hops max, 40 byte packets 1 10.0.12.13 (10.0.12.13) 3.529 ms 1.833 ms 1.491 ms 2 10.0.2.3 (10.0.2.3) 2.923 ms 2.434 ms 2.802 ms 3 192.168.1.2 (192.168.1.2) 2.751 ms 2.862 ms 3.474 msrokk@R2_L1> ping rapid 2001:192:4::1 PING6(56=40+8+8 bytes) 2001:abc:12:12::14 --> 2001:192:4::1!!!!!--- 2001:192:4::1 ping6 statistics ---5 packets transmitted, 5 packets received, 0% packet lossround-trip min/avg/max/std-dev = 4.683/20.166/49.952/17.127 msrokk@R2_L1> traceroute 2001:192:4::1 traceroute6 to 2001:192:4::1 (2001:192:4::1) from 2001:abc:12:12::14, 64 hops max, 12 byte packets 1 2001:abc:12:12::13 (2001:abc:12:12::13) 2.131 ms 1.818 ms 1.257 ms 2 2001:abc:2::3 (2001:abc:2::3) 3.627 ms 2.759 ms 2.569 ms 3 2001:abc:192::2 (2001:abc:192::2) 3.000 ms 3.000 ms 2.827 msLooks good.
OK, now let's see the metric of IS-IS.
All IS-IS routes have a cost, which is a routing metric that is used in the IS-IS link-state calculation. But, the default metric value is 10 (with the exception of the lo0 interface, which has a default metric of 0).
From here we assume the the link between the routers has always a metric of 10, no matter of the bandwidth of he interface. Let's see if that it's truth.
So for example the route 10.0.2.8/30, which is 2 "hops" away, 2 links and the route to 10.0.1.0/30. I mean from the perspective of router R2_L1-L2. OK, let's see:
okk@R2_L1-L2> show route 10.0.2.8 inet.0: 21 destinations, 21 routes (21 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both10.0.2.8/30 *[IS-IS/18] 00:12:13, metric 20 > to 10.0.2.1 via ge-0/0/0.0 to 10.0.2.2 via ge-0/0/0.0rokk@R2_L1-L2> show route 10.0.1.0 inet.0: 21 destinations, 21 routes (21 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both10.0.1.0/30 *[IS-IS/15] 02:11:19, metric 20 > to 10.0.12.14 via ge-0/0/1.0 to 10.0.12.10 via ge-0/0/2.0Ok, so does this mean that IS-IS doesn't care about the bandwidth of the link? If this is true, then from router R1_L2 to get to the loopback interface of router R2_L2, which is 2.2.2.2/32 should have two equals paths even if one link is 1.5 Mbps an the other link is 100 Mbps? Well let's see:
R1_L2#show ip routei L2 2.2.2.2 [115/20] via 10.0.2.10, 00:21:44, Serial1/0 [115/20] via 10.0.2.2, 00:21:44, Ethernet0/0R1_L2#show ip route 2.2.2.2Routing entry for 2.2.2.2/32 Known via "isis", distance 115, metric 20, type level-2 Redistributing via isis Last update from 10.0.2.10 on Serial1/0, 00:21:35 ago Routing Descriptor Blocks: 10.0.2.10, from 2.2.2.2, 00:21:35 ago, via Serial1/0 Route metric is 20, traffic share count is 1 * 10.0.2.2, from 2.2.2.2, 00:21:35 ago, via Ethernet0/0 Route metric is 20, traffic share count is 1Well, yes, by default the IS-IS metric, in my opinion, is not recommended. I mean it's behaving just like RIP, an nothing more. But we can change this, by changing the reference bandwidth of the protocol to 1Gig or even better to 10 Gig. OK, let's change this to 1 Gig for simplicity. Here is how we do that:
set protocols isis reference-bandwidth 1gThis is for Junos OS, for IOS you have to specify the metric manual. But let's see the changes for routes 10.0.2.8/30 and 10.0.1.0/30 from the perspective of router R2_L2-L2:
rokk@R2_L1-L2> show route 10.0.2.8 inet.0: 21 destinations, 21 routes (21 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both10.0.2.8/30 *[IS-IS/18] 00:12:41, metric 11 to 10.0.2.1 via ge-0/0/0.0 > to 10.0.2.2 via ge-0/0/0.0rokk@R2_L1-L2> show route 10.0.1.0 inet.0: 21 destinations, 21 routes (21 active, 0 holddown, 0 hidden)+ = Active Route, - = Last Active, * = Both10.0.1.0/30 *[IS-IS/15] 00:16:00, metric 2 to 10.0.12.14 via ge-0/0/1.0 > to 10.0.12.10 via ge-0/0/2.0Earlier the metric was 20 for both of the routes. But now it's different.
The route 10.0.2.8 has a metric of 11 because to get from router R2_L1-L2 to router R1_L2/R2_L2 it costs 1 and from there another 10, because the reference bandwidth was changed only on Junos routers and not of the cisco routers.
The route 10.0.1.0 has a metric of 2 because to get from router R2_L1-L2 to router R1_L1/R2_L1 it costs 1 and from there add another 1.
OK, this is it. Not much, only a long and cool post. But, more on this soon. The video maybe will be more detailed. Just check the page in the next days and the videos will be here.