IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Multicast

De SergiTurWiki
Share/Save/Bookmark
(S'ha redirigit des de: Ipmaddr)
Dreceres ràpides: navegació, cerca

En català, multicast, s'anomena difusió selectiva. Els encaminadors (routers) que suporten multicast són coneguts també com mrouters.

http://lartc.org/lartc.html#LARTC.MULTICAST

TODO:

Ordres ipmaddr (obsoleta) i com utilitzar-ho ara amb iproute2 ip maddr.

Contingut

udpcast. udp-sender i udp-receiver

Consulteu Udpcast, udp-sender, i udp-receiver

Grups multicast

Les adreces IP estan dividides en classes:

Bit -->  0                           31            Address Range:
          +-+----------------------------+
          |0|       Class A Address      |       0.0.0.0 - 127.255.255.255
          +-+----------------------------+
          +-+-+--------------------------+
          |1 0|     Class B Address      |     128.0.0.0 - 191.255.255.255
          +-+-+--------------------------+
          +-+-+-+------------------------+
          |1 1 0|   Class C Address      |     192.0.0.0 - 223.255.255.255
          +-+-+-+------------------------+
          +-+-+-+-+----------------------+
          |1 1 1 0|  MULTICAST Address   |     224.0.0.0 - 239.255.255.255
          +-+-+-+-+----------------------+
          +-+-+-+-+-+--------------------+
          |1 1 1 1 0|     Reserved       |     240.0.0.0 - 247.255.255.255
          +-+-+-+-+-+--------------------+

Les IPs de clase D són les IP Multicast i s'identifiquen de la resta perquè són aquelles IP que comencen per 1110. La eina Ipcalc us permet obtenir informació sobre una IP:

$ ipcalc 224.0.0.1
Address:   224.0.0.1            11100000.00000000.00000000. 00000001
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   224.0.0.0/24         11100000.00000000.00000000. 00000000
HostMin:   224.0.0.1            11100000.00000000.00000000. 00000001
HostMax:   224.0.0.254          11100000.00000000.00000000. 11111110
Broadcast: 224.0.0.255          11100000.00000000.00000000. 11111111
Hosts/Net: 254                   Class D, Multicast

Els 28 bits restants d'una IP multicast, identifiquen el grup multicast. Un grup multicast és el conjunt de màquines que han de rebre un paquet multicast.

Les màquines que volen rebre un paquet multicast d'un grup específic, s'han d'unir a aquest grup.

Nivells de conformitat

Les màquines poden tenir 3 nivells de conformitat amb multicast:

  • Nivell 0: aquest nivell implica que no hi ha suport per a multicast. Multicast no és obligatori de ser implementat a IPv4 i per tant hiha fprça màquines que no ho suporten.
  • Nivell 1: suporta l'enviament de datagrames IP amb multicast però no la recepció. Cal tenir en compte que no és necessari unir-se a un grup de multicast per tal de poder enviar paquets multicast a aquest grup.
  • Nivell 2: és el nivell de suport complet per a multicast. En nivell 2 pot enviar i rebre paquets multicast. Aquests tipus de màquines han de saber com unir-se a un grup multicast, com sortir d'un grup multicast i com propagar la informació a encaminadors multicast. Per aquesta raó, necessiten suportar el protocol Internet Group Management Protocol (IGMP).
Linux (el kernel) suporta el nivell 2 de conformitat del protocol multicast (des de kernels superiors a 1.1.80) i pot ser un encaminador multicast 
(mrouter)

Adreces multicast reservades

  • 224.0.0.1: grup all-hosts. Són totes les màquines d'una xarxa que suporten multicast. Totes les màquines que suportin multicast s'han d'unir a aquest grup durant l'inici de la xarxa (i a totes les interfícies de xarxa que suportin MULTICAST). Per defecte els ordinadors ignoren els paquets multicast. El nom de DNS és ALL-SYSTEMS.MCAST.NET
  • 224.0.0.2: grup all-routers. Tots els encaminador (routers) que suportin multicast s'han d'afegir a aquest grup a totes les interfícies de xarxa que suportin multicast.
  • 224.0.0.4: grup de tots els encaminadors DVMRP
  • 224.0.0.5: grup de tots els encaminadors OSPF.
  • 224.0.013: grup de tots els encaminadors PIM.


Consulteu:

http://www.iana.org/assignments/multicast-addresses/

Per a obtenir la llista completa.

Enviar un paquet multicast

Tot i que s'està investigant com utilitzar TCP, de moment els paquests multicast utilitzen UDP.

Una aplicació només necessita obrir un socket UDP i posar una IP de tipus multicast en la IP de destinació per tal d'enviar un paquet multicast.

Multicast i DNS

S'aplica la següent resolució de noms:

ALL-SYSTEMS.MCAST.NET --> 224.0.0.1

Linux kernel

Al compilar el kernel cal haver activat:

IP: multicasting
IP: forwarding/gatewaying
IP: multicast routing
IP: tunneling

Si el kernel suporta això el següent pas és crear una ruta per als paquets multicast:

$ sudo route add --net 224.0.0.0 netmask 240.0.0.0 dev eth0

o:

$ sudo ip route add 224.0.0.0/4 dev eth0

Aquesta ruta s'especifica a una targeta eth0 que suporti multicast. Es pot observar amb ifconfig:

$ sudo ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:1d:09:59:10:39  
         inet addr:192.168.1.33  Bcast:192.168.1.255  Mask:255.255.255.0
         inet6 addr: fe80::21d:9ff:fe59:1039/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:469903 errors:0 dropped:0 overruns:0 frame:0
         TX packets:388085 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:679731606 (679.7 MB)  TX bytes:28888674 (28.8 MB)
         Interrupt:16 

Això afegeix una ruta per a tots els paquets multicast, tal com podeu observar amb ipcalc:

$ ipcalc 224.0.0.0/240.0.0.0
Address:   224.0.0.0            1110 0000.00000000.00000000.00000000
Netmask:   240.0.0.0 = 4        1111 0000.00000000.00000000.00000000
Wildcard:  15.255.255.255       0000 1111.11111111.11111111.11111111
=>
Network:   224.0.0.0/4          1110 0000.00000000.00000000.00000000
HostMin:   224.0.0.1            1110 0000.00000000.00000000.00000001
HostMax:   239.255.255.254      1110 1111.11111111.11111111.11111110
Broadcast: 239.255.255.255      1110 1111.11111111.11111111.11111111
Hosts/Net: 268435454             Class D, Multicast

Podeu consultar la nova ruta amb:

$ sudo route -n

Ara podeu provar de fer un ping al grup multicast.

$ ping -c 2 224.0.0.1

Redireccionar (forward) multicast paquets amb un encaminador Linux

Recursos:

tcpdump i Multicast

Per capturar amb tcpdump paquest Multicast podeu utilitzar:

$ sudo tcpdump -i eth0 ip multicast

Comanda ping

Per fer un ping a totes les màquines que suporten multicast:

$ ping 224.0.0.1

Si no contesta observeu que als clients si feu:

$ sudo tcpdump -i eth0 -n ip multicast
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
14:47:48.136671 IP 192.168.1.38 > 224.0.0.1: ICMP echo request, id 56083, seq 913, length 64
14:47:48.356662 IP 192.168.1.38 > 224.0.0.1: ICMP echo request, id 40980, seq 18, length 64
14:47:49.144684 IP 192.168.1.38 > 224.0.0.1: ICMP echo request, id 56083, seq 914, length 64
14:47:49.364616 IP 192.168.1.38 > 224.0.0.1: ICMP echo request, id 40980, seq 19, length 64

Esteu rebent els paquets però no els contesteu. Per tant, s'està aplicant algun filtre. Podria ser el tallafocs iptables però en aquest cas és una configuració del kernel (que s'activa per defecte per tal de fer més difícil la detecció de màquines en una xarxa):

$ sudo -i
# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

Consulteu també:

Com saber quines són totes les màquines que suporten multicast en una xarxa

Comanda ip

Mostrar les rutes multicast:

$ sudo ip mroute show

Si no retorna res és que no hi ha rutes. Un exemple amb rutes:

$ sudo ip mroute show
(192.168.0.8, 232.168.0.8)       Iif: eth0       Oifs: eth1 

També es pot utilitzar:

$ sudo ip -s mroute

$ sudo ip -s mаddr

1:      lo

        inet  224.0.0.1 

2:      eth0 

        link  01:00:5e:00:00:02

        link  01:00:5e:00:00:04

        link  01:00:5e:00:00:01

        inet  224.0.0.2

        inet  224.0.0.4

        inet  224.0.0.1

3:      eth1

       link  01:00:5e:02:02:02

       link  01:00:5e:00:01:01

       link  01:00:5e:00:00:02

       link  01:00:5e:00:00:04

       link  01:00:5e:00:00:01

       inet  224.2.2.2

       inet  224.0.1.1

       inet  224.0.0.2

       inet  224.0.0.4

       inet  224.0.0.1

Multicast forwarding

TODO

Extret de LARTC: http://lartc.org/howto/lartc.multicast.html

Chapter 8. Multicast routing

FIXME: Editor Vacancy!

The Multicast-HOWTO is ancient (relatively-speaking) and may be inaccurate or misleading in places, for that reason.

Before you can do any multicast routing, you need to configure the Linux kernel to support the type of multicast routing you want to do. This, in turn, requires you to decide what type of multicast routing you expect to be using. There are essentially four "common" types - DVMRP (the Multicast version of the RIP unicast protocol), MOSPF (the same, but for OSPF), PIM-SM ("Protocol Independent Multicasting - Sparse Mode", which assumes that users of any multicast group are spread out, rather than clumped) and PIM-DM (the same, but "Dense Mode", which assumes that there will be significant clumps of users of the same multicast group).

In the Linux kernel, you will notice that these options don't appear. This is because the protocol itself is handled by a routing application, such as Zebra, mrouted, or pimd. However, you still have to have a good idea of which you're going to use, to select the right options in the kernel.

For all multicast routing, you will definitely need to enable "multicasting" and "multicast routing". For DVMRP and MOSPF, this is sufficient. If you are going to use PIM, you must also enable PIMv1 or PIMv2, depending on whether the network you are connecting to uses version 1 or 2 of the PIM protocol.

Once you have all that sorted out, and your new Linux kernel compiled, you will see that the IP protocols listed, at boot time, now include IGMP. This is a protocol for managing multicast groups. At the time of writing, Linux supports IGMP versions 1 and 2 only, although version 3 does exist and has been documented. This doesn't really affect us that much, as IGMPv3 is still new enough that the extra capabilities of IGMPv3 aren't going to be that much use. Because IGMP deals with groups, only the features present in the simplest version of IGMP over the entire group are going to be used. For the most part, that will be IGMPv2, although IGMPv1 is sill going to be encountered.

So far, so good. We've enabled multicasting. Now, we have to tell the Linux kernel to actually do something with it, so we can start routing. This means adding the Multicast virtual network to the router table:

ip route add 224.0.0.0/4 dev eth0

(Assuming, of course, that you're multicasting over eth0! Substitute the device of your choice, for this.)

Now, tell Linux to forward packets...

echo 1 > /proc/sys/net/ipv4/ip_forward

At this point, you may be wondering if this is ever going to do anything. So, to test our connection, we ping the default group, 224.0.0.1, to see if anyone is alive. All machines on your LAN with multicasting enabled should respond, but nothing else. You'll notice that none of the machines that respond have an IP address of 224.0.0.1. What a surprise! :) This is a group address (a "broadcast" to subscribers), and all members of the group will respond with their own address, not the group address.

ping -c 2 224.0.0.1

At this point, you're ready to do actual multicast routing. Well, assuming that you have two networks to route between.

(To Be Continued!)

TTL

Hi ha múltiples formes d'aconseguir que un paquet de multicast vagi més enllà de la xarxa LAN. El kernel de Linux suporta redirecció de multicast (mc_forwarding)

Un cosa molt important a tenir en compte és el TTL o Time To Live dels paquets. El TTL, es un comptador que s'inicialitza al receptor amb un cert valor. Els encaminadors disminueixen aquest comptador en -1 abans de fer un redirecció. D'aquesta manera, indicant un TTL inicial limitat, es pot evitar que un paquet viatgi per la xarxa de forma indefinida.

IMPORTANT: Si el TTL és 1, un paquet multicast no podrà mai ser direccionat! Eines com udpcast utilitzant per defecte TTL inicial 1. Si no 
es modifica aquest valor no es pot redireccionar.

Per consultar el TTL d'un paquet es pot utilitzar tcpdump amb el paràmetre -v. Un exemple de paquet multicast que entre per la targeta de xarxa eth9 i surt per la targeta de xarxa eth11:

Per veure el paquet d'entrada

$ sudo tcpdump -ni eth9 -vvv ip multicast
...
18:49:28.934955 IP (tos 0x0, ttl 10, id 0, offset 0, flags [DF], proto UDP (17), length 40) 192.168.9.2.2232 > 225.0.0.1.2233: [udp sum ok] UDP, 
length 12
18:49:28.934956 IP (tos 0x0, ttl 10 id 0, offset 0, flags [DF], proto UDP (17), length 40) 192.168.9.2.2232 > 225.0.0.1.2233: [udp sum ok] UDP, 
length 12

I per veure el de sortida:

$ sudo tcpdump -ni eth11 -vvv ip multicast
tcpdump: listening on eth11, link-type EN10MB (Ethernet), capture size 96 bytes
...
18:40:53.295586 IP (tos 0x0, ttl 9, id 0, offset 0, flags [DF], proto UDP (17), length 40) 192.168.9.2.2232 > 225.0.0.1.2233: [udp sum ok] UDP, 
length 12
18:40:53.295602 IP (tos 0x0, ttl 9, id 0, offset 0, flags [DF], proto UDP (17), length 40) 192.168.9.2.2232 > 225.0.0.1.2233: [udp sum ok] UDP,  
length 12

Observeu com el TTL ha disminuït en un.

Consulteu:

IGMP
udpcast

mrd6

mrd6 is a ipv6 multicast routing daemon for Linux (and BSD).

$ sudo apt-get install mrd6

zebra

Quagga és un fork de zebra. Sembla que als repositoris d'Ubuntu quagga substitueix zebra:

$ sudo apt-get install zebra
S'està llegint la llista de paquets... Fet 
S'està construint l'arbre de dependències       
Reading state information... Fet           
El paquet zebra no té versió disponible, però un altre paquet
en fa referència. Això normalment vol dir que el paquet falta,
s'ha tornat obsolet o només és disponible des d'una altra font.
Tot i que els següents paquets el reemplacen:
  libsnmp-base quagga
E: El paquet zebra no té candidat d'instal·lació

Quagga

Suporta multicast?


$ sudo apt-get install quagga

Fitxers de configuració:

$ dpkg -L quagga| grep etc
/etc
/etc/logrotate.d
/etc/logrotate.d/quagga
/etc/quagga
/etc/quagga/debian.conf
/etc/quagga/daemons
/etc/init.d
/etc/init.d/quagga
/etc/pam.d
/etc/pam.d/quagga

Executables:

$ dpkg -L quagga| grep bin
/usr/bin
/usr/bin/vtysh

Documentació:

$  dpkg -L quagga| grep doc
/usr/share/doc
/usr/share/doc/quagga
/usr/share/doc/quagga/examples
/usr/share/doc/quagga/examples/zebra.conf.sample
/usr/share/doc/quagga/examples/bgpd.conf.sample 
/usr/share/doc/quagga/examples/bgpd.conf.sample2
/usr/share/doc/quagga/examples/ripd.conf.sample
/usr/share/doc/quagga/examples/ripngd.conf.sample
/usr/share/doc/quagga/examples/ospfd.conf.sample
/usr/share/doc/quagga/examples/ospf6d.conf.sample
/usr/share/doc/quagga/examples/isisd.conf.sample
/usr/share/doc/quagga/examples/vtysh.conf.sample
/usr/share/doc/quagga/changelog.gz
/usr/share/doc/quagga/README.Debian.gz
/usr/share/doc/quagga/tools
/usr/share/doc/quagga/tools/rrcheck.pl
/usr/share/doc/quagga/tools/rrlookup.pl
/usr/share/doc/quagga/tools/zc.pl
/usr/share/doc/quagga/tools/zebra.el
/usr/share/doc/quagga/tools/mrlg.cgi.gz
/usr/share/doc/quagga/README.Debian.Woody
/usr/share/doc/quagga/README.Debian.MD5
/usr/share/doc/quagga/copyright
/usr/share/doc/quagga/changelog.Debian.gz

Manuals:

$ dpkg -L quagga| grep man
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/vtysh.1.gz
/usr/share/man/man8
/usr/share/man/man8/ospfd.8.gz
/usr/share/man/man8/ripd.8.gz
/usr/share/man/man8/ripngd.8.gz
/usr/share/man/man8/zebra.8.gz
/usr/share/man/man8/bgpd.8.gz
/usr/share/man/man8/ospf6d.8.gz
/usr/share/man/man8/isisd.8.gz
/usr/include/quagga/command.h

mrouted

No esta als repositoris d'Ubuntu. Sembla que smcroute és més modern.

Recursos:

Finally, you need to set a default route for outgoing multicast datagrams. Assuming the eth0 network interface is to act as that outgoing route (your application can instruct the kernel to send its datagrams using a different interface if needed), you'll need to use:

$ sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

smcroute

Abans d'instal·lar executeu:

$ sudo /sbin/sysctl -a | grep mc | more

Veure com estan desactivats (a 0):

net.ipv4.conf.ethX.mc_forwarding 

Instal·leu smcroute amb apt-get:

$ sudo apt-get install smcroute

Els fitxers instal·lats són:

$ dpkg -L smcroute 
/.
/usr
/usr/sbin
/usr/sbin/smcroute
/usr/sbin/mcsender
/usr/share
/usr/share/doc
/usr/share/doc/smcroute
/usr/share/doc/smcroute/changelog.gz
/usr/share/doc/smcroute/copyright
/usr/share/doc/smcroute/changelog.Debian.gz
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/smcroute.8.gz
/usr/share/man/man8/mcsender.8.gz
/etc
/etc/smcroute
/etc/smcroute/startup.sh
/etc/init.d
/etc/init.d/smcroute

Ara si consulteu si està activat el forwarding a les interfícies de xarxa del route veureu:

$ sudo /sbin/sysctl -a | grep mc | more
net.ipv4.neigh.default.mcast_solicit = 3
net.ipv4.neigh.lo.mcast_solicit = 3
net.ipv4.neigh.eth0.mcast_solicit = 3
net.ipv4.neigh.eth1.mcast_solicit = 3
net.ipv4.neigh.eth2.mcast_solicit = 3
net.ipv4.neigh.eth3.mcast_solicit = 3
net.ipv4.neigh.eth4.mcast_solicit = 3
net.ipv4.neigh.eth5.mcast_solicit = 3
net.ipv4.neigh.eth6.mcast_solicit = 3
net.ipv4.neigh.eth7.mcast_solicit = 3
net.ipv4.neigh.eth8.mcast_solicit = 3
net.ipv4.neigh.eth9.mcast_solicit = 3
net.ipv4.neigh.eth10.mcast_solicit = 3
net.ipv4.neigh.eth11.mcast_solicit = 3
net.ipv4.neigh.eth12.mcast_solicit = 3
net.ipv4.neigh.pan0.mcast_solicit = 3
net.ipv4.conf.all.mc_forwarding = 1
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.conf.eth0.mc_forwarding = 1
net.ipv4.conf.eth1.mc_forwarding = 1 
net.ipv4.conf.eth2.mc_forwarding = 1 
net.ipv4.conf.eth3.mc_forwarding = 1
net.ipv4.conf.eth4.mc_forwarding = 1
net.ipv4.conf.eth5.mc_forwarding = 1
net.ipv4.conf.eth6.mc_forwarding = 1
net.ipv4.conf.eth7.mc_forwarding = 1
net.ipv4.conf.eth8.mc_forwarding = 1
net.ipv4.conf.eth9.mc_forwarding = 1
net.ipv4.conf.eth10.mc_forwarding = 0
net.ipv4.conf.eth11.mc_forwarding = 1
net.ipv4.conf.eth12.mc_forwarding = 1

El següent pas es configurar les rutes. Segons el manual cal utilitzar l'opció -a

Un exemple:

$ sudo smcroute -a eth0 192.168.0.8 232.168.0.8 eth1 eth2 eth3 eth4 eth5 eth6 eth7 eth8 eth9

Indica que es redireccionaran els paquets multicast del grup multicast 232.168.0.8 rebuts per la interfície eth0 des de la IP 192.168.0.8 cap a les interfícies eth1,eth2,eth3,eth4,eth5,eth6,eth7,eth8 i eth9.

Podeu consultar les rutes amb:

$ cat /proc/net/ip_mr_cache
Group    Origin   Iif     Pkts    Bytes    Wrong Oifs
0800A8E8 0800A8C0 0          0        0        0  1:1    2:1    3:1    4:1    5:1    6:1    7:1    8:1    9:1 

També es pot consultar amb:

$ ip mroute show


Per eliminar les rutes s'utilitza l'opció -r:

$ sudo smcroute -r eth0 192.168.0.8 232.168.0.8 

Podeu comprovar-ho amb:

$ cat /proc/net/ip_mr_cache
Group    Origin   Iif     Pkts    Bytes    Wrong Oifs

Es pot utilitzar tcpdump per veure com els paquets multicast arriben per una tarja de xarxa i surten per un altre amb:

$ sudo tcpdump -ni any ip multicast

Recursos:

smcroute i DRBL (clonezilla multicast)

DRBL utilitza clonezilla com a sistema per a recuperació d'imatges de disc. Clonezilla té una opció de restauració d'imatges amb multicast que utilitza la eina udpcast.

Si el servidor de DRBL està en un segment de xarxa diferent al dels clients clonezilla que volen restaurar una imatge amb multicast, aleshores cal utilitzar un encaminador multicast. Per exemple, podem utilitzar smcroute.

$ sudo smcroute -a eth9 224.0.0.1 eth0
$ sudo smcroute -a eth9 192.168.9.2 224.0.0.1 eth0

Fer els canvis fixos:

$ cat /etc/smcroute/startup.sh 


Reenviar del servidor DRBL a totes les aules:

$ smcroute -a eth0 192.168.0.8 232.168.0.8 eth1 eth2 eth3 eth4 eth5 eth6 eth7 eth8 eth9

Comanda ifconfig

$ sudo ifconfig eth0 -allmulti
Warning: Interface eth0 still in ALLMULTI mode.

Del manual de ifconfig:

[-]allmulti
             Enable or disable all-multicast mode.  If selected,  all  multi‐
             cast packets on the network will be received by the interface.


Comanda netstat

Consultar els grups multicast als quals pertanyen les interfícies de la vostra màquina:

$ sudo 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
wmaster0        1      ALL-SYSTEMS.MCAST.NET
wlan0           1      224.0.0.251
wlan0           1      ALL-SYSTEMS.MCAST.NET
pan0            1      224.0.0.251 
pan0            1      ALL-SYSTEMS.MCAST.NET
lo              1      ip6-allnodes
eth0            1      ff02::1:ff59:1039%3217405160
eth0            1      ip6-allnodes
wmaster0        1      ip6-allnodes 
wlan0           1      ip6-allnodes
pan0            1      ff02::1:ffc9:76e9%3217405160
pan0            1      ip6-allnodes

Per no tenir noms DNS:

$ sudo netstat -g -n

Segons els manual:

   --groups , -g
      Display multicast group membership information for IPv4 and IPv6.

igmpproxy

Consulteu:

http://sourceforge.net/projects/igmpproxy

XORP

Consulteu:

http://www.xorp.org/

Commutadors i multicast

No tots els commutadors suporten multicast. Alguns suporten reenviar les peticions multicast a totes les màquines de la xarxa (com si fos un broadcast) però això limita la eficiència del commutador i de multicast.

Alguns encaminadors suporten el que s'anomena IGMP snooping

Cisco i multicast

Consulteu la guia de resolució de problemes:

http://www.cisco.com/en/US/tech/tk828/technologies_tech_note09186a0080094b55.shtml

Per a commutadors consulteu:

http://www.cisco.com/en/US/tech/tk828/technologies_tech_note09186a0080094b55.shtml#sourcereceiver

Vegeu també:

Xarxes Cisco

Activar multicast més enllà d'un router Cisco

http://www.fogproject.org/wiki/index.php?title=Multicasting_over_a_router

mDNS, Zeroconf, Avahi i multicast

La configuració zeroconf utilitza l'adreça multicast reservada:

224.0.0.251 mDNS

Proxy ARP

Consulteu:

ARP#ARP_Proxy

Resolució de problemes. Troubleshooting

Com saber si suporteu multicast?

$ ifconfig 
eth0      Link encap:Ethernet  HWaddr 6c:62:6d:82:d3:78  
          inet addr:192.168.204.100  Bcast:192.168.204.255  Mask:255.255.255.0
          inet6 addr: fe80::6e62:6dff:fe82:d378/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:26839 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15095 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:15181751 (15.1 MB)  TX bytes:2526913 (2.5 MB)
          Interrupt:17 


rp_filter

Si a l'executar:

$ sudo cat /proc/sys/net/ipv4/conf/*/rp_filter

Apareixen uns, aleshores teniu el filtre rp (reverse path) activat. Proveu de desactivar-lo amb

$ sudo echo 0 /proc/sys/net/ipv4/conf/*/rp_filter

Recursos:

Com saber obtenir els paràmetres de multicast

Utilitzeu la comanda sysctl:

$ sudo /sbin/sysctl -a | grep mc | more
net.ipv4.neigh.eth6.mcast_solicit = 3
net.ipv4.neigh.eth7.mcast_solicit = 3
net.ipv4.neigh.eth1.mcast_solicit = 3
net.ipv4.neigh.eth2.mcast_solicit = 3
net.ipv4.neigh.eth5.mcast_solicit = 3
net.ipv4.neigh.eth3.mcast_solicit = 3
net.ipv4.neigh.eth4.mcast_solicit = 3
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.eth0.mc_forwarding = 0
net.ipv4.conf.eth6.mc_forwarding = 0
net.ipv4.conf.eth7.mc_forwarding = 0
net.ipv4.conf.eth1.mc_forwarding = 0
net.ipv4.conf.eth2.mc_forwarding = 0
net.ipv4.conf.eth5.mc_forwarding = 0
net.ipv4.conf.eth3.mc_forwarding = 0
net.ipv4.conf.eth4.mc_forwarding = 0
net.ipv6.neigh.default.mcast_solicit = 3
net.ipv6.neigh.lo.mcast_solicit = 3
net.ipv6.neigh.eth0.mcast_solicit = 3
net.ipv6.neigh.eth2.mcast_solicit = 3
net.ipv6.neigh.eth3.mcast_solicit = 3
net.ipv6.neigh.eth4.mcast_solicit = 3
error: permission denied on key 'dev.parport.parport0.autoprobe'
error: permission denied on key 'dev.parport.parport0.autoprobe0'
error: permission denied on key 'dev.parport.parport0.autoprobe1'
error: permission denied on key 'dev.parport.parport0.autoprobe2'
error: permission denied on key 'dev.parport.parport0.autoprobe3'
net.ipv6.neigh.eth5.mcast_solicit = 3
net.ipv6.neigh.eth1.mcast_solicit = 3
net.ipv6.neigh.eth7.mcast_solicit = 3
 


Com saber quines són totes les màquines que suporten multicast en una xarxa

$ ping 224.0.0.1

On 224.0.0.1 és la IP reservada al grup all-hosts.

NOTA: La majoria de nuclis Linux ignoren per defecte els pings a broadcast. Cal marcar a 0 la opció:

# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

Consultar els grups multicast als quals una màquina esta subscrita

$ cat /proc/net/igmp
Idx	Device    : Count Querier	Group    Users Timer	Reporter
1	lo        :     0      V3
				010000E0     1 0:00000000		0
2	eth0      :     4      V3
				FB0000E0     1 0:00000000		0
				010000E0     1 0:00000000		0
3	wmaster0  :     3      V3
				010000E0     1 0:00000000		0
4	wlan0     :     3      V3
				FB0000E0     1 0:00000000		0
				010000E0     1 0:00000000		0
5 	pan0      :     4      V3
				FB0000E0     1 0:00000000		0
				010000E0     1 0:00000000		0

També podeu utilitzar netstat

$ netstat -g

/proc/net/ip_mr_vif

Sense interfícies multicast:

$ cat /proc/net/ip_mr_vif
Interface      BytesIn  PktsIn  BytesOut PktsOut Flags Local    Remote

Amb interfícies multicast:

$ cat /proc/net/ip_mr_vif 
Interface      BytesIn  PktsIn  BytesOut PktsOut Flags Local    Remote
0 eth0              0       0         0       0 00000 0200A8C0 00000000
1 eth1              0       0         0       0 00000 0101A8C0 00000000
2 eth2              0       0         0       0 00000 0102A8C0 00000000
3 eth3              0       0         0       0 00000 0103A8C0 00000000
4 eth4              0       0         0       0 00000 0104A8C0 00000000
5 eth5              0       0         0       0 00000 0105A8C0 00000000
6 eth6              0       0         0       0 00000 0106A8C0 00000000
7 eth7              0       0         0       0 00000 0107A8C0 00000000
8 eth8              0       0         0       0 00000 0108A8C0 00000000
9 eth9              0       0         0       0 00000 0109A8C0 00000000
10 eth11             0       0         0       0 00000 020BA8C0 00000000
11 eth12             0       0         0       0 00000 010CA8C0 00000000


/proc/net/ip_mr_cache

Sense rutes multicast:

$ cat /proc/net/ip_mr_cache
Group    Origin   Iif     Pkts    Bytes    Wrong Oifs

Amb rutes multicast:

$ cat /proc/net/ip_mr_cache
Group    Origin   Iif     Pkts    Bytes    Wrong Oifs
0800A8E8 0800A8C0 0          0        0        0  1:1    2:1    3:1    4:1    5:1    6:1    7:1    8:1    9:1 

/proc/sys/net/ipv4/ip_forward

$ cat /proc/sys/net/ipv4/ip_forward

/proc/sys/net/ipv4/conf/eth0/mc_forwarding

$ cat /proc/sys/net/ipv4/conf/eth0/mc_forwarding

Recursos:

/proc/net/igmp

Activar multicast forwarding a totes les targetes de xarxa

echo 1 > /proc/sys/net/ipv6/conf/all/mc_forwarding
echo 1 > /proc/sys/net/ipv4/conf/all/mc_forwarding


Consultar les màquines multicast amb la comanda host

$ host -l mcast.net

Multicast server

http://adehp.wordpress.com/2008/11/05/step-by-step-setup-multi-cast-server-using-ubuntu-804/


Vegeu també

Enllaços externs

OpenFPnet
IES Nicolau Copèrnic