2016-05-13 23 views
7

Abbiamo un'applicazione server dockerizzata che esegue il rilevamento automatico di dispositivi fisici sulla rete ascoltando pacchetti multicast sulla porta 6969. Pertanto, è necessario che il contenitore docker sia in grado di ricevere questi pacchetti dai dispositivi esterni l'host, tramite l'host e dentro al contenitore. Ho visto somesimilarissues e fatto alotofreading ma non riesco ancora a ottenere il server per rispondere a questi pacchetti multicast.Docker che riceve traffico multicast

Sono seduto su Wireshark a guardare il traffico di rete, ma non sono uno specialista. So che Docker crea un indirizzo MASQUERADE per far sembrare che tutto il traffico provenga dal gateway Docker, quindi quando guardo lo veth vedo per lo più parlare tra 172.17.0.1 e 172.17.0.2 sebbene il mio server non sia in grado di recuperare alcuna informazione sui dispositivi sulla rete. (Se corro all'esterno della finestra mobile, naturalmente non ho problemi.)

Non riesco a utilizzare --net=host come, come altri, ci avvaliamo della funzione --link. Ho provato le seguenti variazioni ...

  • docker run --name app -p 6969:6969 -d me/app:latest
  • docker run --name app -p 0.0.0.0:6969:6969 -d me/app:latest (Questo avrei giurato ha funzionato una volta, ma ora non lo fa?)
  • docker run --name app -p 0.0.0.0:6969:6969/udp -d me/app:latest
  • docker run --name app -p 255.255.255.255:6969:6969 -d me/app:latest

Qualsiasi aiuto o intuizione che potresti fornire sarebbe molto apprezzato.

+0

La risposta di @ValeriySolovyov ha funzionato per te? – blz

risposta

2

tenta di attivare Multicat sulle vostre schede di rete:

ip link set eth0 multicast on 

echo 1 >/proc/sys/net/ipv4/ip_forwarding per accendere l'IP forwarding

È necessario impostare in modo esplicito o almeno controllare che sia abilitato sulle interfacce rilevanti.

net.ipv4.conf.all.mc_forwarding = 1 
net.ipv4.conf.eth0.rp_filter=0 

Lasciare che il traffico multicast:

iptables -I INPUT -d 224.0.0.0/4 -j ACCEPT 
iptables -I FORWARD -d 224.0.0.0/4 -j ACCEPT 

Inoltre potrebbe essere necessario aggiungere il percorso per il traffico multicast:

route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 

Modificare il TTL del mittente multicast:

iptables -t mangle -A OUTPUT -d <group> -j TTL --ttl-set 128 
Where group is the multicast group address of the stream you want to change the TTL of. 

Anche tu puoi rt multicast proxy

PS:

Si dovrebbe provare (se sopra non aiuta) per avviare contenitore finestra mobile con --net = nessuna opzione e utilizzare tubazioni con il comando seguente:

pipework docker0 -i eth0 CONTAINER_ID IP_ADDRESS/[email protected]_ROUTE_IP 

che crea interfaccia eth0 all'interno del contenitore con flag IFF_MULTICAST e indirizzo IP definito.