Docker接收组播stream量

我们有一个docker化的服务器应用程序,通过监听端口6969上的多播数据包来自动发现networking上的物理设备。因此,我们需要我们的docker容器能够通过主机从主机之外的设备接收这些数据包,并进入容器。 我已经看到一些 类似的 问题,并做了大量的 阅读,但我仍然无法让服务器响应这些组播数据包。

我坐在Wireshark上观看networkingstream量,但我不是专家。 我知道Docker创build了一个MASQUERADE地址,使stream量看起来像来自Docker网关,所以当我看到veth我发现172.17.0.1172.17.0.2之间的交谈很多,尽pipe我的服务器无法获取有关设备的任何信息在networking上。 (如果我在docker外面跑步,我当然没有问题。)

我不能使用--net=host ,和其他人一样,我们使用了--linkfunction。 我已经尝试了以下变化…

  • 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 (这一个我可以宣誓工作过一次,但现在不?
  • 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

任何帮助或见解,你可以提供将不胜感激。

尝试启用您的nics上的multicat:

 ip link set eth0 multicast on 

echo 1 >/proc/sys/net/ipv4/ip_forwarding打开IP转发

您需要明确地设置或者至less检查它是否在相关的接口上被启用。

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

允许多点传送stream量:

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

您也可能需要添加多播通信的路由:

 route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 

更改多播发送者的TTL:

 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. 

你也可以开始组播代理

PS:

你应该尝试(如果以上没有帮助)启动docker容器与–net = none选项,并使用pipe道和跟随命令:

 pipework docker0 -i eth0 CONTAINER_ID IP_ADDRESS/IP_MASK@DEFAULT_ROUTE_IP 

它使用IFF_MULTICAST标志和定义的IP地址在容器内部创buildeth0接口。