¿Cómo puedo saber si IP Multicast está habilitado?

19

Tengo scripts que ejecutan pruebas de multidifusión IP; Sin embargo, mis scripts fallan en una máquina Linux en particular.

Sé que puedo mirar CONFIG_IP_MULTICASTen el archivo de configuración del núcleo para determinar si el núcleo se compiló con esto. Sin embargo, sería más fácil marcar los requisitos faltantes en mi script si pudiera mirar /procu sysctlobtener la respuesta.

¿Hay alguna manera de averiguar si IP Multicast se compiló en el kernel sin mirarlo CONFIG_IP_MULTICAST?

Mike Pennington
fuente

Respuestas:

18

Parece que la mayoría de los núcleos (post v1) admiten la multidifusión de forma predeterminada o tienen CONFIG_IP_MULTICAST habilitado durante la compilación. Para verificar si el núcleo compilado y en ejecución se suscribe a algún grupo de multidifusión, usaría netstat -g.

Parece que la mayoría de los núcleos (post v1) admiten la multidifusión de forma predeterminada.

[root@centos module]# grep CONFIG_IP_MULTICAST /usr/src/kernels/2.6.18-274.7.1.el5-i686/.config 
CONFIG_IP_MULTICAST=y
[root@centos module]# netstat -g
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      all-systems.mcast.net
eth0            1      224.0.0.251
eth0            1      all-systems.mcast.net

Veo que la interfaz eth0 en mi host piensa que está suscrita al grupo mcast básico 224.0.0.251. También alternativamente, si hago ping al grupo o la red y luego me devuelven todas las redes de host habilitadas para multidifusión conocidas, diría que la multidifusión funciona en el host. ¿Puedes probar netstat -go cat /proc/net/igmpver si devuelve algún grupo en tu host?

Nikhil Mulley
fuente
1
Pero, ¿cómo determina si el enrutador al que está conectada esa caja admite multidifusión?
Nils
1
Multidifusión: el remitente envía un solo datagrama desde su dirección de unidifusión a la dirección del grupo de multidifusión y los enrutadores intermediarios se encargan de hacer copias y enviarlas a todos los receptores que se han unido al grupo de multidifusión correspondiente.
Nikhil Mulley
3
En caso afirmativo, el enrutador debe admitir la multidifusión. Sin embargo, para los remitentes / receptores funciona en IGMP y para enrutadores, su protocolo independiente de multidifusión (PIM). Enrutador que admite PIM, generalmente habilitado, y grupo de multidifusión: 224.0.0.0/4. Intente poner otra computadora escuchando en grupo en el otro extremo y envíe datos al grupo de multidifusión y verifique si el receptor en el otro lado recibe datos. Si la red del enrutador admite la multidifusión. Algunas herramientas en línea: imj.ucsb.edu/mcast_detective (windows)
Nikhil Mulley
20

En su caja de linux: ip maddr show da:

@4Gtest ~]$ ip maddr show
1:      lo
        inet  224.0.0.1
        inet6 ff02::1
2:      p3p1
        link  01:00:5e:00:00:01
        link  33:33:00:00:00:01
        link  33:33:ff:bd:7e:0f
        link  01:00:5e:00:00:fb
        link  01:00:5e:7f:ff:05
        inet  224.127.255.5
        inet  224.0.0.251
        inet  224.0.0.1
        inet6 ff02::1:ffbd:7e0f
        inet6 ff02::1
Alan Beard
fuente
1
¿Cómo agregar un grupo de muticast a una interfaz?
AR
8
# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F1:FF:EA  
inet addr:78.46.74.27  Bcast:78.46.74.31  Mask:255.255.255.224
inet6 addr: fe80::20c:29ff:fef1:ffea/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1
RX packets:5339836 errors:0 dropped:0 overruns:0 frame:0
TX packets:5486444 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:820300389 (782.2 MiB)  TX bytes:1929979381 (1.7 GiB)
Base address:0x1400 Memory:e8820000-e8840000

Deshabilitar multidifusión:

ifconfig eth0 -multicast

resultado:

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F1:FF:EA  
inet addr:78.46.74.27  Bcast:78.46.74.31  Mask:255.255.255.224
inet6 addr: fe80::20c:29ff:fef1:ffea/64 Scope:Link
UP BROADCAST MTU:1500  Metric:1
RX packets:5339836 errors:0 dropped:0 overruns:0 frame:0
TX packets:5486444 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:820300389 (782.2 MiB)  TX bytes:1929979381 (1.7 GiB)
Base address:0x1400 Memory:e8820000-e8840000

No hay multidifusión presente en la interfaz

Habilitar multidifusión:

ifconfig eth0 multicast
Bill Mate
fuente
8
Cabe mencionar que ifconfigahora está en desuso en Linux ... deberíamos estar utilizando las iproute2utilidades.
Mike Pennington el
77
Han pasado 2 años y todavía lo estamos usandoifconfig
Askar
1
@oscar, pero eso no significa que sea bueno hacerlo, ipya que otras utilidades de iproute2 están reflejando cambios recientes en el código de red del kernel de Linux (a diferencia ifconfig).
pevik
6

Usando el ipcomando uno puede verificar si una interfaz es capaz de multidifusión mediante:

ip link show eth0 | grep MULTICAST

Para habilitar o deshabilitar la multidifusión, puede usar:

sudo ip link set dev eth0 multicast [on|off] 
Pierz
fuente