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.0
set protocols isis interface ge-0/0/1.0
set protocols isis interface ge-0/0/2.0
set protocols isis interface ge-0/0/3.0 passive
As 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/32
set interfaces lo0 unit 0 family iso address 49.0021.0000.0000.0121.00
set interfaces lo0 unit 0 family inet6 address fe80::121/64
set interfaces lo0 unit 0 family inet6 address 2001:abc:def:12::1/128
So 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.0
set protocols isis interface ge-0/0/1.0
set protocols isis interface ge-0/0/2.0
On 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-ad
j
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 1
Jun 1 08:20:25.660495 Adjacency state change, 0000.0000.0122, state New -> Initializing
Jun 1 08:20:25.660509 interface ge-0/0/0.0, level 1
Jun 1 08:20:25.660937 ISIS L1 neighbor 0000.0000.0122 on interface ge-0/0/0.0 set 27 secs 0 nsecs
Jun 1 08:20:25.675893 Adjacency state change, 0000.0000.0122, state Initializing -> Up
Jun 1 08:20:25.675904 interface ge-0/0/0.0, level 1
Jun 1 08:20:25.682056 New adjacency for 0000.0000.0122 on ge-0/0/0.0, level 2
Jun 1 08:20:25.682082 Adjacency state change, 0000.0000.0122, state New -> Initializing
Jun 1 08:20:25.682087 interface ge-0/0/0.0, level 2
Jun 1 08:20:25.682145 Adjacency state change, 0000.0000.0122, state Initializing -> Up
Jun 1 08:20:25.682150 interface ge-0/0/0.0, level 2
As 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) SNPA
ge-0/0/0.0 R2_L1-L2 1 Up 6 0:5:86:71:ae:0
ge-0/0/0.0 R2_L1-L2 2 Up 7 0:5:86:71:ae:0
It 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:00
Yes, 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::122
R2_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::122
Like 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 27
ge-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 27
ge-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 Passive
Right 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 27
ge-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 27
IS-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:00
R2_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:00
And 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 0
Configuration 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) SNPA
ge-0/0/0.0 R1_L2 2 Up 22 aa:bb:cc:0:1:0
ge-0/0/0.0 R2_L2 2 Up 8 aa:bb:cc:0:4:0
ge-0/0/0.0 R2_L1-L2 1 Up 26 0:5:86:71:3b:0
ge-0/0/0.0 R2_L1-L2 2 Up 19 0:5:86:71:3b:0
So, 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 100
set protocols isis interface ge-0/0/0.0 level 1 disable
set protocols isis interface ge-0/0/1.0 level 2 disable
set protocols isis interface ge-0/0/2.0 level 2 disable
set 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 0
For 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-point
set protocols isis interface ge-0/0/0.0 level 2 disable
set protocols isis interface ge-0/0/1.0 point-to-point
set protocols isis interface ge-0/0/1.0 level 2 disable
set protocols isis interface ge-0/0/2.0 point-to-point
set protocols isis interface ge-0/0/2.0 level 2 disable
set protocols isis interface ge-0/0/3.0 passive
So, 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 Disabled
rokk@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 Passive
So, 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) SNPA
ge-0/0/0.0 R2_L1 1 Up 22
ge-0/0/1.0 R1_L1-L2 1 Up 23
ge-0/0/2.0 R2_L1-L2 1 Up 19
Looks 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, * = Both
0.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.0
10.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.0
10.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.0
172.16.1.0/30 *[IS-IS/15] 00:23:03, metric 20
> to 10.0.1.2 via ge-0/0/0.0
192.168.1.0/30 *[IS-IS/15] 00:14:05, metric 20
> to 10.0.12.1 via ge-0/0/1.0
If 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: I
From 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, selected
The 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.0
set 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 Dead
192.168.1.2 ge-0/0/3.0 Full 1.1.1.1 1 31
rokk@R1_L1-L2> show ospf3 neighbor
ID Interface State Pri Dead
1.1.1.1 ge-0/0/3.0 Full 1 37
Neighbor-address fe80::1
And 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, * = Both
192.168.2.1/32 *[OSPF/10] 00:15:51, metric 2
> to 192.168.1.2 via ge-0/0/3.0
192.168.3.1/32 *[OSPF/10] 00:15:51, metric 2
> to 192.168.1.2 via ge-0/0/3.0
192.168.4.1/32 *[OSPF/10] 00:15:51, metric 2
> to 192.168.1.2 via ge-0/0/3.0
224.0.0.5/32 *[OSPF/10] 00:16:06, metric 1
MultiRecv
inet6.0: 21 destinations, 25 routes (21 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
2001:192:2::1/128 *[OSPF3/10] 00:14:38, metric 1
> to fe80::1 via ge-0/0/3.0
2001:192:3::1/128 *[OSPF3/10] 00:14:38, metric 1
> to fe80::1 via ge-0/0/3.0
2001:192:4::1/128 *[OSPF3/10] 00:14:38, metric 1
> to fe80::1 via ge-0/0/3.0
ff02::5/128 *[OSPF3/10] 00:14:43, metric 1
MultiRecv
Looks 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.0
set protocols ospf3 area 0.0.0.0 interface ge-0/0/3.0
And 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 0
And let's check the neighbour adjacency:
rokk@R2_L1> show ospf neighbor
Address Interface State ID Pri Dead
172.16.1.2 ge-0/0/3.0 Full 2.2.2.2 1 36
rokk@R2_L1> show ospf3 neighbor
ID Interface State Pri Dead
2.2.2.2 ge-0/0/3.0 Full 1 32
Neighbor-address fe80::2
Now, 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, * = Both
172.16.2.1/32 *[OSPF/10] 00:04:34, metric 2
> to 172.16.1.2 via ge-0/0/3.0
172.16.3.1/32 *[OSPF/10] 00:04:34, metric 2
> to 172.16.1.2 via ge-0/0/3.0
172.16.4.1/32 *[OSPF/10] 00:04:34, metric 2
> to 172.16.1.2 via ge-0/0/3.0
224.0.0.5/32 *[OSPF/10] 00:04:49, metric 1
MultiRecv
inet6.0: 20 destinations, 23 routes (20 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
2001:172:2::1/128 *[OSPF3/10] 00:04:44, metric 1
> to fe80::2 via ge-0/0/3.0
2001:172:3::1/128 *[OSPF3/10] 00:04:44, metric 1
> to fe80::2 via ge-0/0/3.0
2001:172:4::1/128 *[OSPF3/10] 00:04:44, metric 1
> to fe80::2 via ge-0/0/3.0
ff02::5/128 *[OSPF3/10] 00:04:49, metric 1
MultiRecv
And... 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, * = Both
172.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: I
So, 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, * = Both
2001: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: I
As 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: I
Really not a difference.
OK, now let's configure a routing policy on router R1_L1-L2:
rokk@R1_L1-L2> show configuration policy-options
policy-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 1
R1_L2#show ipv6 route 2001:192:4::1
Routing 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 ago
For 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, * = Both
0.0.0.0/0 *[IS-IS/15] 00:03:06, metric 10
> to 10.0.12.13 via ge-0/0/1.0
rokk@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.0
Ok, 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 loss
round-trip min/avg/max/stddev = 2.747/3.647/5.547/1.063 ms
rokk@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 ms
rokk@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 loss
round-trip min/avg/max/std-dev = 4.683/20.166/49.952/17.127 ms
rokk@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 ms
Looks 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, * = Both
10.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.0
rokk@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, * = Both
10.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.0
Ok, 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 route
i 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/0
R1_L2#show ip route 2.2.2.2
Routing 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 1
Well, 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 1g
This 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, * = Both
10.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.0
rokk@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, * = Both
10.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.0
Earlier 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.