Routing multicast în linux

În situația actuală, cel mai probabil, nu are sens să se angajeze în rutare (replicare), traficul de tip multicast cu softrouterov (dacă kernel-ul Linux sau altceva). Motivul este destul de simplu - switch-uri, chiar mai ieftin sunt capabili de a L2 / L3-multicast (deși cu restricții privind numărul de grupuri / rute, dar încă se face în ASIC-ah). Cu toate acestea, există unele sarcini care nu pot fi rezolvate în „fier“ (nu există nici un sprijin din software-ul / nu poate fi pus în aplicare din cauza asic capacității), de exemplu, renambering (schimbarea IP de destinație), introducerea unor întârzieri aleatorii (amestecare), trimiterea multicast în tunel, rezervare sursă printr-un criteriu arbitrar.







Pentru a introduce o întârziere aleatorie (reordonare) sau o pierdere poate fi necesară pentru a verifica comportamentul jucătorilor STB / soft utilizat. De exemplu, vă întrebați cum imaginea va arăta dacă undeva pe rețeaua multicast trece prin echilibrarea per pachet și nu atârnă în cazul în care jucătorul este în prezența a pierderii de pachete, dacă să publice sunete scârțâind neplăcute sau doar pătrate și tăcere.

Când scrieți acest articol utilizat pentru Linux Ubuntu 14.04 LTS (kernel 3.13.0-24-generic), dar se aplică în cele mai multe distribuții moderne, dar trebuie să verificați suportul pentru multicast IPv4 în kernel:

Spre deosebire de rutarea unicast, utilitarul ip nu este suficient nici pentru rutarea statică (S, G), ca să nu mai vorbim de dinamică. Pentru a forma o tabelă de replicare multicast, aveți nevoie de utilitare de utilizatori "terțe părți". De exemplu, pentru rute statice este smcroute, pentru a construi un tabel de IGMP-cereri cu interfețe daunlink - igmpproxy (traseul se adaugă la miezul atunci când „de jos“ vine IGMP-cerere), pentru utilizare cu PIM-SM de semnalizare - pimd (necesită suport PIMSM_V2 din partea kernel-ului).







Distanțare statică multicast

Luați în considerare următoarea problemă: să pună în aplicare replica traficul de tip multicast (*, 233.251.240.1) la eth2 interfața eth1 și interfețele eth3, în timp ce pe eth1, acest grup vine doar IGMPv2-cerere.

Configurația interfeței arată astfel:

Din păcate, smcroute în ubuntu 14.04 nu acceptă formularul (*, G), deci va trebui să îl compilați din surse:

Înainte de a rula traseul (pentru a instala rute în kernel-ul), trebuie să dezactivați RPF pe eth1 (din cauza stării problemei cred că sursa de IP multicast-grup poate fi arbitrară):

În plus, am setat explicit modul de igmp pe interfața eth1:

Acum mergeți la configurația smcroute (/etc/smcroute.conf):

(necesită o rupere de linie la sfârșitul configurației)
Prima linie este de a conecta grupul folosind protocolul igmp (completați această informație în kernel), a doua linie este ruta reală multicast.
Fugi smcroute:

(jurnalele sunt scrise în syslog)
Verificați masa de blocare:

Așa este, 01F0FBE9 este grupul nostru 233.251.240.1.

Înainte ca multicastul să apară în eth1, tabela de rutare din kernel va arăta astfel:

Apoi va arata astfel:

Verificăm operația de replicare:

Renumere grupuri de grupuri multicast

Pentru a schimba grupurile IP multicast, folosim DNAT. De exemplu, dorim să schimbăm 233.251.240.1 la 233.251.250.5:

/etc/smcroute.conf ar arăta astfel:

Apoi, curățați conntrack-ul (prin comanda "conntrack -F") și verificați:

După cum ați putea ghici, pentru a înlocui sursa ip, vom folosi și SNAT:

Din nou, curățăm conntrack ("conntrack -F") și verificăm:

Folosind iptables și tc, tot poți face ceva cu traficul (de exemplu, întârzieri și pierderi). Dacă se dorește, puteți aranja rezervarea unui canal de televiziune prin comutarea sursei de difuzare folosind script-uri (smcroute-pot fi operate „din exterior“), ceea ce criterii arbitrare pentru a selecta cea mai bună sursă (cum ar fi soluții pentru operatori și există o mulțime de bani)







Articole similare

Trimiteți-le prietenilor: