Utilizza il path ip route per aggiungere routes multicast a più interfacce

TLDR: Esiste un modo per utilizzare "route ip" per aggiungere routes multicast per più NIC?

Abbiamo software che utilizza due gruppi multicast per comunicare con due diversi gruppi di dispositivi su due reti fisiche separate. Ad exception di questa applicazione, i dispositivi di una networking non hanno bisogno di comunicare attraverso il nostro dispositivo per comunicare con i dispositivi dell'altra networking.

  • Init.d vs Cron - cosa usare?
  • Attacchi violenti in output da mio server
  • Elenco degli strumenti installati sul server debian / red hat
  • Wget funziona, Ping non lo fa
  • È ansible impostare postfix per inoltrare la posta a più destinatari
  • Conti le sessioni SSH?
  • Gruppi multicast

    A tal fine il software crea due socket. Ciascuno è legato a uno degli indirizzi IP del NICS separato. Quella socket viene quindi unita al gruppo multicast che esiste in quella networking, ad esempio la socket 1 è legata a 192.168.0.2 e unita al gruppo multicast 233.255.10.1, mentre la socket 2 è legata a 10.57.31.2 e unita al gruppo multicast 239.255.100.1.

    Attualmente stiamo utilizzando uno script bash (kernel Linux 3.14.39) per impostare routes multicast sulle due interfacce di networking usando il path, ad esempio

    route add -net 224.0.0.0 netmask 240.0.0.0 eth0 route add -net 224.0.0.0 netmask 240.0.0.0 eth1 

    e verificato tramite itinerario -n

     Destination Gateway Genmask Flags Metric Ref Use Iface 224.0.0.0 0.0.0.0 240.0.0.0 U 0 0 0 eth0 224.0.0.0 0.0.0.0 240.0.0.0 U 0 0 0 eth1 

    Recentemente ho letto che l'itinerario è stato deprecato / obsoleto e che dovremmo utilizzare invece il path ip, ad esempio

     ip route add 224.0.0.0/4 dev eth0 ip route add 224.0.0.0/4 dev eth1 

    Purtroppo, la seconda chiamata non riesce "RTnetLINK risponde: File esiste" e naturalmente la seconda via non viene visualizzata dopo queste chiamate.

    C'è un modo per utilizzare il path ip per aggiungere routes multicast a più NIC?

    Posso usare / 8 come netmask? per esempio

     ip route add 233.0.0.0/8 dev eth0 

    e

     ip route add 239.0.0.0/8 dev eth1 

    ma questo è problematico poiché lo script che fa questo non è consapevole di quale indirizzo multicast è associato a quale dispositivo e non sempre garantito essere lo stesso a seconda della configuration di sistema. Utilizzando il mio primo esempio di path aggiunge questo non è un problema.

    AGGIORNAMENTI Grazie a una discussione estesa con @Ron Maupin, ho capito che l'errore era nel nostro codice. Non abbiamo impostato l'interface da utilizzare per la multicasting con IP_MULTICAST_IF. Una volta aggiunto la chiamata setsockopt per impostare IP_MULTICAST_IF, non ho più bisogno di aggiungere le tabelle di routing.

     struct in_addr multicastInterface = {}; multicastInterface.s_addr = interfaceAddressNetworkOrder; // Set which outgoing interface to use int result = setsockopt(m_socket, IPPROTO_IP, IP_MULTICAST_IF, (char*)&multicastInterface, sizeof(struct in_addr)); 

  • Multiple indirizzo IP sull'interface. Voglio specificare uno di essi per l'output
  • iproute: distriggers il command "tc"
  • Linux: ip alias contro iproute
  • "Ip route get" su Ubuntu che restituisce il predefinito invece di path statico
  • ss -p output significato
  • Same netmask o / 32 per IP secondario su Linux
  • One Solution collect form web for “Utilizza il path ip route per aggiungere routes multicast a più interfacce”

    Che tu abbia la multicast che attraversa la tua casella Linux utilizzando il routing unicast è una combinazione di un paio di circostanze fortunate.

    Il routing multicast non è lo stesso di routing unicast. Il routing Unicast è basato sul volto che il traffico viene inviato a un singolo indirizzo, ma il traffico multicast viene inviato a un indirizzo di gruppo che rappresenta gli host che desiderano sottoscrivere il gruppo multicast.

    Gli host utilizzano IGMP per informare un router multicast che vogliono unirsi a un gruppo multicast e il router multicast inizia quindi a submit il traffico multicast per quel gruppo alla networking degli host che lo richiedono.

    Gli interruttori moderni utilizzeranno IGMP Snooping per determinare quali porte di interruttore hanno gli host che richiedono di unire un gruppo di gruppo multicast e invieranno solo traffico per quel gruppo multicast alle porte di commutazione where gli host hanno richiesto di aderire al gruppo multicast.

    Linux, da solo, non support l'instradamento multicast e devi aggiungere qualcosa al dispositivo Linux per supportre il routing multicast. Fare riferimento allo schema seguente:

    immettere qui la descrizione dell'immagine

    Quando la fonte multicast inizia a submit il traffico multicast per un gruppo multicast, probabilmente l'interruttore non ha visto richieste IGMP per l'accesso al gruppo multicast, quindi il traffico multicast per quel gruppo non va da nessuna parte.

    Quando uno dei PC sullo stesso switch desidera unirsi al gruppo multicast, invierà un messaggio di connessione IGMP e l'interruttore schiocca su di esso e invierà il traffico multicast alla port in cui è collegato il PC richiedente.

    Se un PC dall'altro lato del router Linux vuole unirsi al gruppo multicast, è fuori dalla fortuna perché il traffico multicast non scorre a quel lato del router Linux. Il Router Linux non è nemless unito al gruppo multicast, quindi l'interruttore non invia mai il traffico multicast.

    Quando si esegue l'instradamento multicast su un router, il router risponderà alla richiesta host IGMP e l'interruttore saprà che è un router multicast e invierà il traffico multicast alla port switch in cui è connesso il router multicast. Semplicemente, il router non invierà il traffico multicast ad un'altra interface se non esiste un ricevitore attivo su un'altra interface (dipende dalla versione multicast, per esempio, PIM-DM inizierà l'invio, ma si distriggers se non vengono visualizzate richieste IGMP) .

    Con il routing multicast abilitato sul router, un PC connesso all'altra interface invierà un messaggio di connessione IGMP e il router Linux inizierà l'invio del traffico multicast per il gruppo richiesto all'interface. L'interruttore schiocca su richiesta e invierà il traffico multicast alla port switch where è collegato il PC che ha richiesto di aderire al gruppo multicast.

    Si rende più complicato se è necessario percorrere più router. IGMP viene utilizzato tra gli host e il router multicast locale. PIM (o un altro protocollo di routing multicast) viene utilizzato tra i router multicast.

    Tutto questo impedisce il traffico multicast di andare where non è desiderato.

    Ci sono add-on per Linux per aiutarlo nel gestire correttamente IGMP e routing multicast.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.