Junos Multicast, Part 1

While working towards my JNCIE-ENT, I decided it would be a good idea to do a quick blog post on multicast. After thinking it through, I actually decided to split it up into five shorter posts:

  • Part 1: Initial Lab Setup
  • Part 2: Static RP
  • Part 3: BSR
  • Part 4: Anycast-RP
  • Part 5: IPv6

So without further adieu, we’ll begin by setting up our topology.

 

Topology

We’ll be using the following diagram (click to enlarge):

Note the use of both IPv4 and IPv6 addressing. I won’t be covering IPv6 multicast in the first four sections, mainly because I’m unable to do verification without real senders and receivers at this time. IPv6 will be touched on in part 5.

Also note that we are using virtual-routers with logical-tunnels to build this entire topology on one router. I’m using an SRX210H, but any Juniper router should suffice. I’ve attempted to keep the addressing scheme sane by using the format 10.42.<routerx><routery>.<router#>/24. For example, the link between routers 3 and 4 would be 10.42.34.0/24 with R3 being .3 and R4 being .4. Those who have used INE workbooks for the CCIE exams should be familiar with this concept. IPv6 is similar, and again the R3 to R4 link would be 2001:db8:34::/64

We’re using 192.168.255.0/24 for the sender, and 192.168.1.0/24 for the receiver.

Setting up a lab using virtual-routers is covered in an earlier blog post, so I won’t repeat those details here. Simply click here to view the configuration you’ll need. Please note that PIM-SM is already enabled on all VR interfaces, minus the loopbacks. We’re also running single-area OSPF.

 

Verification

Let’s make sure our simulated hosts can reach each other:

cjones@R7> traceroute 192.168.1.100 routing-instance SNDR1
traceroute to 192.168.1.100 (192.168.1.100), 30 hops max, 40 byte packets
 1  192.168.255.1 (192.168.255.1)  12.040 ms  11.852 ms  10.490 ms
 2  10.42.13.3 (10.42.13.3)  12.498 ms  11.387 ms  11.175 ms
 3  10.42.34.4 (10.42.34.4)  12.232 ms  10.052 ms  11.816 ms
 4  10.42.45.5 (10.42.45.5)  16.665 ms  17.614 ms  10.518 ms
 5  192.168.1.100 (192.168.1.100)  6.527 ms  5.594 ms  12.724 ms

Great! Let’s also take a look at our PIM neighborships:

cjones@R7> show pim neighbors instance R1 inet | except =
Instance: PIM.R1

Interface           IP V Mode        Option      Uptime Neighbor addr
lt-0/0/0.12          4 2             HPLGT      02:10:34 10.42.12.2
lt-0/0/0.13          4 2             HPLGT      02:10:06 10.42.13.3     

cjones@R7> show pim neighbors instance R2 inet | except =
Instance: PIM.R2

Interface           IP V Mode        Option      Uptime Neighbor addr
lt-0/0/0.21          4 2             HPLGT      02:10:37 10.42.12.1
lt-0/0/0.23          4 2             HPLGT      02:10:09 10.42.23.3
lt-0/0/0.24          4 2             HPLGT      02:10:10 10.42.24.4     

cjones@R7> show pim neighbors instance R3 inet | except =
Instance: PIM.R3

Interface           IP V Mode        Option      Uptime Neighbor addr
lt-0/0/0.31          4 2             HPLGT      02:10:13 10.42.13.1
lt-0/0/0.32          4 2             HPLGT      02:10:13 10.42.23.2
lt-0/0/0.34          4 2             HPLGT      02:10:40 10.42.34.4     

cjones@R7> show pim neighbors instance R4 inet | except =
Instance: PIM.R4

Interface           IP V Mode        Option      Uptime Neighbor addr
lt-0/0/0.42          4 2             HPLGT      02:10:17 10.42.24.2
lt-0/0/0.43          4 2             HPLGT      02:10:43 10.42.34.3
lt-0/0/0.45          4 2             HPLGT      02:10:43 10.42.45.5     

cjones@R7> show pim neighbors instance R5 inet | except =
Instance: PIM.R5

Interface           IP V Mode        Option      Uptime Neighbor addr
lt-0/0/0.54          4 2             HPLGT      02:10:46 10.42.45.4

Looks like everything is up!

Let’s take a quick look at the PIM join status on R5 before we go any further:

cjones@R7> show pim join instance R5
Instance: PIM.R5 Family: INET
R = Rendezvous Point Tree, S = Sparse, W = Wildcard

Instance: PIM.R5 Family: INET6
R = Rendezvous Point Tree, S = Sparse, W = Wildcard

Exactly as expected… nothing.

In order for us to test our multicast, we need to set up a static IGMP (for IPv4) and MLD (for IPv6) join on the receivers first-hop gateway. Again those with an IOS background should be familiar with this concept, however in Junos there is an additional step required, as a join does not equal a listening process. (Those familiar with the mgen utility know that it requires both a join and a listen on a receiver as well). We’ll utilize the SAP protocol to listen on our chosen IPv4 multicast address of 225.1.1.1, and IPv6 multicast address of FF1E::1.

set protocols igmp interface lt-0/0/0.2 static group 225.1.1.1
set protocols mld interface lt-0/0/0.2 static group FF1E::1
set protocols sap listen 225.1.1.1 port 5000
commit and-quit

Here is where our inability to test IPv6 multicast comes to light – SAP doesn’t allow an IPv6 address. (If anyone knows of a workaround or an alternate protocol, please leave a comment!)

Everything looks good with our topology at this point, so on to part 2!

Leave a Reply