Puncte:0

IGMP v3 JOIN a fost trimis, dar nu există trafic de la comutator

drapel gr

Încerc să mă alătur unui flux multicast IGMP de la o mașină Centos 8, dar după trimiterea unui JOIN, nu există trafic care vine de la comutator.

Conexiune simplă:

MUX <-----------> cisco3850 <--------> Centos8
192.168.117.13 192.168.117.21

Comutatorul din amonte (catalizator Cisco 3850) este alimentat cu un MPEG-TS la 239.1.1.1:4000 de la MUX.

Le-am încercat pe amândouă socat și propriul meu program pentru a deschide un socket, a se alătura fluxului și a ține socket-ul deschis. Ambele trimit același mesaj de alăturare IGMP, așa cum a fost confirmat de wireshark:

Protocolul de management al grupului de internet
    [Versiunea IGMP: 3]
    Tip: Raport de membru (0x22)
    Rezervat: 00
    Sumă de verificare: 0xe9fb [corect]
    [Starea sumei de verificare: Bună]
    Rezervat: 0000
    Număr înregistrări de grup: 1
    Înregistrare grup: 239.1.1.1 Modificare pentru a exclude modul
        Tip de înregistrare: Modificare pentru a exclude modul (4)
        Len de date auxiliare: 0
        Num Src: 0
        Adresă multicast: 239.1.1.1

Folosind ip route add Am creat rute pentru grupuri multicast către interfață:

224.0.0.0/4 dev eth1 scope link
225.0.0.0/8 dev eth1 scope link
239.0.0.0/8 dev eth1 scope link

și cat /proc/net/igmp arată că grupul a fost alăturat:

cat /proc/net/igmp
Dispozitiv Idx: Raportor cronometru al utilizatorilor grupului de interogători
3 et1 : 2 V3
                                030101E1 1 0:00000000 0
                                010000E0 1 0:00000000 0

eu suspect aceasta este o problemă cu comutatorul, mai degrabă decât o problemă Linux, dar clientul (care deține comutatorul) spune că totul este în regulă.

Ce altceva pot face din partea Linux pentru a investiga/remedia această problemă?

Dacă este o problemă la comutator, atunci ce? Ce trebuie configurat acolo? (trebuie să explic clientului)


Pentru referință, programul meu care se unește și menține soclul deschis arată astfel:

// Verificarea erorilor a fost omisă pentru concizie
fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes);

memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = PF_INET;
saddr.sin_addr.s_addr = mcastAddr;
saddr.sin_port = htons(port);

bind(fd, (struct sockaddr *)&saddr, sizeof(saddr);

struct ip_mreq mcastReq;
mcastReq.imr_multiaddr.s_addr = mcastAddr;
&mcastReq.imr_interface.s_addr = interfaceAddr;

setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mcastReq, sizeof(mcastReq);
Puncte:0
drapel gr

În cele din urmă, comutatorul clientului nu a putut/nu ar activa IGMPv3, așa că am setat mașina noastră să utilizeze IGMP v2 prin crearea unui fișier sub /etc/sysctl.d.

Atunci JOIN a funcționat, dar Linux nu a răspuns la interogările de membru multicast, așa că comutatorul a renunțat la flux după 1-2 minute (chiar dacă am avut net.ipv4.conf.default.rp_filter setat la zero.

Se pare că dezactivăm complet validarea căii de întoarcere, trebuia să setăm toate rp_filter setări la zero (inclusiv listarea explicită a interfeței)

# Setați versiunea IGMP pentru eth1
# Setați la „2” sau „3”, în funcție de ceea ce este activat în comutator
net.ipv4.conf.eth1.force_igmp_version = 2

# Dezactivează verificarea rutei sursei
# Pe lângă 90-torque.conf, setați explicit și eth1 să ignore
# validare cale de întoarcere
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.