Docker接收多播流量

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

我坐在Wireshark上观察网络流量,但我不是专家。我知道Docker创建了一个伪装地址,使流量看起来都像来自Docker网关,所以当我观看veth时,我看到的大部分是172.17.0.1172.17.0.2之间的对话,尽管我的服务器无法检索到网络上设备的任何信息。(如果我在docker之外跑步,我当然没有问题。)

我不能使用--net=host,因为像其他人一样,我们使用--link功能。我试过以下几种变体

  • docker-run-name-app-p 6969:6969-d me/app:latest
  • docker run——name app-p 0.0.0:6969:6969-d me/app:latest(这个我本可以发誓工作过一次,但现在不行了?)
  • docker-run-name-app-p0.0.0:6969:6969/udp-d-me/app:latest
  • docker-run-name-app-p 255.255.255:6969:6969-d-me/app:latest

如果您能提供任何帮助或见解,我们将不胜感激

尝试在NIC上启用多播:

ip链路设置eth0多播打开

echo 1&gt/proc/sys/net/ipv4/ip_-forward打开ip转发

您需要显式设置或至少检查相关接口上是否启用了它

net.ipv4.conf.all.mc\u转发=1
net.ipv4.conf.eth0.rp_filter=0

允许多播通信:

iptables-I输入-d 224.0.0.0/4-j接受
iptables-I转发-d 224.0.0.0/4-j接受

此外,您可能需要为多播流量添加路由:

路由添加-网络224.0.0.0网络掩码240.0.0.0开发eth0

更改多播发送方的TTL:

iptables-t mangle-A输出-d<集团&gt-j TTL--TTL集128
其中group是要更改其TTL的流的多播组地址。

还可以启动多播代理

附言:

您应该尝试(如果上面没有帮助)使用–net=none选项启动docker容器,并使用pipework和follow命令:

管道docker0-i eth0容器\u ID IP\u地址/[email protected]_ROUTE_IP 

它使用IFF_多播标志和定义的IP地址在容器内创建eth0接口

发表评论