2016-05-13 41 views
7

Mamy skatalizowaną aplikację serwerową, która automatycznie wykrywa urządzenia fizyczne w sieci, nasłuchując pakietów multicast na porcie 6969. Potrzebujemy więc naszego kontenera dokera, aby móc odbierać te pakiety z urządzeń zewnętrznych gospodarza, przez hosta i do kontenera. Zobaczyłem some i zrobiłem alotofreading, ale nadal nie mogę uzyskać serwer odpowiedzi na te pakiety multicast.Docker odbierający ruch multiemisji

Siedzę na Wireshark patrząc na ruch sieciowy, ale nie jestem specjalistą. Wiem, że Docker tworzy adres MASQUERADE, aby ruch wyglądał tak, jakby pochodził z bramy Docker, więc gdy oglądam veth widzę głównie rozmowę między 172.17.0.1 i 172.17.0.2, chociaż mój serwer nie jest w stanie pobrać żadnych informacji o urządzeniach w sieci. (Jeśli działam poza dockerem, nie mam żadnych problemów.)

Nie mogę używać --net=host jako, podobnie jak inni, używamy funkcji --link. Próbowałem następujące odmiany ...

  • 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 (Ten Mógłbym przysiąc pracował raz, ale teraz nie?)
  • 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

Każda pomoc lub spostrzeżenie, które możesz podać, będzie bardzo mile widziane.

+0

Czy odpowiedź @ValeriySolovyov działa dla Ciebie? – blz

Odpowiedz

2

Spróbuj włączyć Multicat na swoich kart sieciowych:

ip link set eth0 multicast on 

echo 1 >/proc/sys/net/ipv4/ip_forwarding włączyć IP Forwarding

Trzeba jawnie ustawić lub przynajmniej sprawdzić, czy jest włączona odpowiednich interfejsów.

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

Pozostawić ruchu multicast:

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

Również może trzeba dodać trasy dla ruchu multicast:

route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 

zmienić TTL multiemisji nadawcy:

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. 

Również możesz sta rt multicast proxy

PS:

Należy spróbować (jeśli powyższe nie pomoże), aby rozpocząć pojemnik Döcker z --net = brak opcji i używać przewodów rurowych z poleceniem obserwacji:

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

który tworzy Interfejs eth0 wewnątrz kontenera z flagą IFF_MULTICAST i zdefiniowanym adresem IP.