Nous avons une application serveur dockée qui effectue la découverte automatique des appareils physiques sur le réseau en écoutant les paquets de multidiffusion sur le port 6969. Nous avons donc besoin de notre conteneur Docker pour pouvoir recevoir ces paquets à partir de périphériques en dehors de l'hôte, via l'hôte, et dans le conteneur. J'ai vu certainssimilaireproblèmes et fait alotoflecture mais je ne parviens toujours pas à faire répondre le serveur à ces paquets de multidiffusion.
Je suis assis sur Wireshark à regarder le trafic réseau, mais je ne suis pas un spécialiste. Je sais que Docker crée une adresse MASQUERADE
pour que tout le trafic semble provenir de la passerelle Docker, donc quand je regarde veth
je vois surtout parler entre 172.17.0.1
et 172.17.0.2
bien que mon serveur ne puisse pas récupérer d'informations sur les périphériques du réseau. (Si je cours en dehors de Docker, je n'ai bien sûr aucun problème.)
Je ne peux pas utiliser --net=Host
comme, comme d'autres, nous utilisons --link
fonctionnalité. J'ai essayé les variantes suivantes ...
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
(Celui que j'aurais juré a travaillé une fois mais maintenant non?)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
Toute aide ou information que vous pourriez fournir serait grandement appréciée.
Essayez d'activer multicat sur vos cartes réseau:
ip link set eth0 multicast on
echo 1 >/proc/sys/net/ipv4/ip_forwarding
pour activer le transfert IP
Vous devez définir explicitement ou au moins vérifier qu'il est activé sur les interfaces pertinentes.
net.ipv4.conf.all.mc_forwarding = 1
net.ipv4.conf.eth0.rp_filter=0
Autorisez le trafic de multidiffusion:
iptables -I INPUT -d 224.0.0.0/4 -j ACCEPT
iptables -I FORWARD -d 224.0.0.0/4 -j ACCEPT
Vous devrez peut-être également ajouter l'itinéraire pour le trafic de multidiffusion:
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
Modifiez le TTL de l'expéditeur de multidiffusion:
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.
Vous pouvez également démarrer proxy multicast
PS:
Vous devriez essayer (si cela ne vous aide pas) de démarrer le conteneur Docker avec l'option --net = none et d'utiliser la tuyauterie avec la commande follow:
pipework docker0 -i eth0 CONTAINER_ID IP_ADDRESS/IP_MASK@DEFAULT_ROUTE_IP
qui crée l'interface eth0 à l'intérieur du conteneur avec l'indicateur IFF_MULTICAST et l'adresse IP définie.