01/07/2016

Cisco – Multicast

Multicast… Ein Thema das ich bis heute nicht (wirklich) verstehe (und daher nicht mag). Somit schreib ich es besser mal nieder 😉

224.0.0.0/4, also 224.0.0.0 bis 239.255.255.255 bzw FF00::/8

 

PIM ist von Router zu Router, IGMP ist Client zu Router. IGMP v3 fuer SSM.
IGMP Snooping ist auf Cisco Switches enabled by default.

 

Well Known IPv4 Multicast Adressen
224.0.0.1 All Hosts on the same network segment.
224.0.0.2 All Routers on the same network segment.
224.0.0.5 All OSPF Routers to send Hello packets to on a network segment.
224.0.0.6 OSPF All Designated Routers address to send routing information to DRs.
224.0.0.9 RIP version 2 address to send routing information to all RIP2-aware routers.
224.0.0.10 EIGRP address to send routing information to all EIGRP routers on a network.
224.0.0.13 Protocol Independent Multicast (PIM) Version 2
224.0.0.18 Virtual Router Redundancy Protocol (VRRP)
224.0.0.19–21 IS-IS over IP
224.0.0.22 Internet Group Management Protocol (IGMP) version 3
224.0.0.102 Hot Standby Router Protocol version 2 (HSRPv2) and Gateway Load Balancing Protocol (GLBP)

 

Well Known IPv6 Multicast Adressen
ff02::1 All Nodes on the local network segment
ff02::2 All Routers on the local network segment
ff02::5 OSPFv3 All Routers
ff02::6 OSPFv3 All DR Routers
ff02::8 IS-IS for IPv6 Routers
ff02::9 RIPng Routers
ff02::a EIGRP Routers
ff02::d PIM Routers
ff02::16 MLDv2 reports (defined in RFC 3810)

 

 

Global Config:

Router(config)# ip multicast-routing (distributed)

 

Interface Config – Dense Mode:

Router(config-if)# ip pim dense-mode

 

Interface Config – Sparse Mode:

Router(config-if)# ip pim sparse-mode

 

Sparse Mode – static RP Config:

Router(config)# ip pim rp-address 10.10.10.1

 

RP und BSR (fuer sparse-mode):

Router(config)# ip pim rp-candidate [priority] (niedriger gewinnt)
Router(config)# ip pim bsr-candidate [priority] (niedriger gewinnt)

 

AutoRP (fuer Sparse Mode):

Router(config)# ip pim send-rp-announce fa2/0 scope 8 (am RP) (scope ist die max TTL)
Router(config)# ip pim send-rp-discovery fa1/0 scope 8 (am non RP) (scope ist die max TTL)
Router(config)# ip pim autorp listener (am non RP)

 

Test:

Router(config-if)# ip igmp join-group 239.4.4.4
Router# ping 239.4.4.4 source fa0/0
Router# show ip pim rp mapping

 

PIM Interfaces anzeigen:

CAT2# sh ip pim interface
Address	        Interface	Ver/Mode	Nbr Count	QueryInt   DR Prio
172.16.99.2	Fa1/0/22	v2/S	        1	        30	   1
10.10.12.1	Vlan12  	v2/S    	0	        30	   1
CAT2#

 

Empfohlen wird sparse-mode, da es „schonender“ ist. Bei dense-mode wird Multicast Traffic ueberall hingeschickt und wenn jemand es NICHT will muss er es sagen! Bei sparse-mode muss jemand den Traffic explizit anfordern. Damit dies funktioniert brauchen wir bei sparse-mode einen RP, welchen wir entweder statisch beim interessierten Router konfigurieren oder via BSR/AutoRP lernen. Es gab fuer dieses Henne-Ei-Problem den Ansatz von sparse-dense-mode, sollte aber nicht genutzt werden. Am besten sparse-mode mit BSR (BSR verlaesst sich nur auf PIM Pakete). AutoRP hat einen aehnlichen Ansatz bzw ist der “Vorgaenger” von BSR, allerdings Cisco-proprietaer (es gibt jedoch auch andere die es verwenden/unterstuetzen). BSR ist auf jeden Fall Open Standard.

 
Beispiel-Config von mrncciew (Link weiter unten):
 
pim-sm-static01

 
Wer ist RP (candidate) bzw BSR:

CME(config)# ip pim rp-candidate loopback 0 priority 10

WAN(config)# ip pim rp-candidate loopback 0 priority 5
WAN(config)# ip pim bsr-candidate loopback 0

 

RP Mappings lernen wir Dank des BSRs automatisch:

CAT2# sh ip pim rp mapping
PIM Group-to-RP Mappings

Group(s) 224.0.0.0/4
RP 10.10.105.20 (?), v2
Info source: 10.10.105.20 (?), via bootstrap, priority 5, holdtime 150
Uptime: 00:42:04, expires: 00:01:39
RP 10.10.205.20 (?), v2
Info source: 10.10.105.20 (?), via bootstrap, priority 10, holdtime 150
Uptime: 00:42:32, expires: 00:01:40

 

Check:

ping 224.4.4.4 und show ip pim rp

CAT2# sh ip pim rp
Group: 239.255.255.254, RP: 10.10.105.20, v2, uptime 00:29:53, expires 00:01:32
Group: 239.255.255.253, RP: 10.10.105.20, v2, uptime 00:29:53, expires 00:01:32
Group: 239.255.255.250, RP: 10.10.105.20, v2, uptime 00:29:53, expires 00:01:32
Group: 224.2.127.254, RP: 10.10.105.20, v2, uptime 00:29:53, expires 00:01:32
Group: 224.4.4.4, RP: 10.10.105.20, v2, uptime 00:29:53, expires 00:01:32

10.10.105.20 (=WAN) ist der RP da wir ihm die niedrigere (und somit bessere) Prioritaet gegeben haben.

 

Test:
Zum Test joinen und pingen wir 224.4.4.4 auf Cat4 und sehen auf Cat2.
224.4.4.4 ist die Adresse welche wir im VLC am StreamingSERVER eingeben. Statt dem IGMP join auf Cat4 koennten wir natuerlich auch einen VLC StreamingCLIENT irgendwo verwenden!

CAT4(config)# int vlan 22
CAT4(config-if)# ip igmp join-group 224.4.4.4
CAT2# sh ip mroute 224.4.4.4
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
L - Local, P - Pruned, R - RP-bit set, F - Register flag, ….. und noch mehr Flags
Timers: Uptime/Expires
Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 224.4.4.4), 00:16:52/stopped, RP 10.10.105.20, flags: SPF
Incoming interface: FastEthernet1/0/22, RPF nbr 172.16.99.1
Outgoing interface list: Null

(192.168.200.254, 224.4.4.4), 00:00:29/00:03:18, flags: FT
Incoming interface: Vlan200, RPF nbr 0.0.0.0
Outgoing interface list:
FastEthernet1/0/22, Forward/Sparse, 00:00:29/00:03:00
Erklaerung:
(*, 224.4.4.4), 00:16:52/stopped, RP 10.10.105.20, flags: SPF
Incoming interface: FastEthernet1/0/22, RPF nbr 172.16.99.1
Outgoing interface list: Null

*, 224.4.4.4 – Am Beginn steht die IP des Source Routers (oder * fuer ALLE Sourcen) und die IP der MULTICAST GRUPPE! (*, G) bzw „Star comma G“ entries werden verwendet um (S, G) or „S comma G“ Eintraege zu bauen (siehe unten). 00:16:52/stopped ist Uptime/Expire Time und besagt wie lange der Eintrag schon in der Multicast Routing Tabelle ist bzw wie lange noch bevor er expired. Danach kommt der zustaendige RP (RP 10.10.105.20). Die Flags SPF (in diesem Fall) besagen sparse-mode, pruned, registered. Incoming Interface: Fa1/0/22 ist das Interface auf dem ein Multicast Paket DES MULTICAST CLIENTS erwartet wird, ansonsten wird es verworfen! RPF nbr 172.16.99.1 ist die IP des Upstream Routers RICHTUNG MUTLICAST CLIENT. Outgoing interface list zeigt die Interfaces durch welche Pakete geschickt werden – in diesem Fall keines (Null).

 

(192.168.200.254, 224.4.4.4), 00:00:29/00:03:18, flags: FT
Incoming interface: Vlan200, RPF nbr 0.0.0.0
Outgoing interface list:
FastEthernet1/0/22, Forward/Sparse, 00:00:29/00:03:00

192.168.200.254 ist die IP des Source Routers und hier Cat2 selbst. 224.4.4.4 ist der VLC Server am Laptop im Netz 192.68.200.0/24. 00:00:29 schon up und expires in 00:03:18. Flags besagen registered (F) und received on the shortest path source tree (T). Incoming Interface war VLAN 200 direkt auf dem Cat2 – das ist das Interface zu dem VLC Server woher der Traffic kommt. RPF nbr ist 0.0.0.0 da er es selbst ist. Outgoing interface list sagt er schickt Pakete dieser Source (224.4.4.4) auf Fa1/0/22 raus. Forward/Sparse heisst das Interface forwarded und laeuft im sparse-mode und DIESES Interface ist seit 00:00:29 up und expired in 00:03:00.

 

Failover:
Ein BSR sendet seine Hellos alle 60 Sekunden und der Hold-down Timer ist 150 Sekunden (2.5x Hello Timer). Wenn somit ein RP ausfaellt kann es im Worst Case bis zu 150 Sekunden dauern bis der naechste RP zieht (sofern vorhanden). PIM Hellos werden uebrigens alle 30 Sekunden gesendet. Schneller ginge das ganze, wenn man sich auf MSDP verlaesst, da dann in der Regel die Timer des IGPs zum Zuge kommen…

WAN# sh ip pim bsr-router
PIMv2 Bootstrap information
This system is the Bootstrap Router (BSR)
BSR address: 10.10.105.20 (?)
Uptime: 00:25:29, BSR Priority: 0, Hash mask length: 0
Next bootstrap message in 00:00:32
Candidate RP: 10.10.105.20(Loopback0)
Holdtime 150 seconds
Advertisement interval 60 seconds
Next advertisement in 00:00:28
Candidate RP priority : 50

 

Anmerkung: Im Netzwerkplan von mrncciew steht ip pim register-source Loopback0 . Mit ip pim [vrf vrf-name] register-source interface-type interface-number koennen wir sagen, dass die source nicht die IP des ausgehenden Interfaces ist, sondern eben (zB) die Loopback.

 

Noch ne Anmerkung: Weil ich heute, am 29.09.2016, fast schon wieder einen Aushaenger bekommen habe: Wollte PIM mit VLC test, hat aber natuerlich nicht funktionierte… Hab alles neu gemacht (vermutlich 3x) und schlussendlich den VLC „Server“ sogar von Windows auf Linux umgestellt, nicht dass es noch an der Windows 10 Netzwerkverbindung liegt. Schlussendlich sah ich dann im tcpdump, dass die Multicast Pakete des Streams eine TTL von 1 hatten (VLC default)… Kommt bei Routern nicht gut… Jedenfalls half es folgende Zeile anzupassen (Option in der GUI hab ich keine gefunden): Von urspruenglich :sout=#rtp{dst=224.1.1.1,port=5004,mux=ts,sap,name=uebiTV} :sout-all :sout-keep auf :sout=#rtp{dst=224.1.1.1,port=5004,mux=ts,sap,name=uebiTV,ttl=10} :sout-all :sout-keep.
PS: Im Menue des Streams gibt es definitiv keine Option, aber in den normalen Einstellungen (Advanced bzw Show All) unter Stream Output – Access Output kann man eine TTL vergeben.

 

Links:
https://www.mrncciew.com/2013/02/25/pim-sm-bsr-configurations/
https://www.mrncciew.com/2012/11/08/test-yourself-basic-multicast/
http://blog.ine.com/2009/04/07/understanding-bsr-protocol/

Kommentar verfassen