Docker接收组播stream量
我们有一个docker化的服务器应用程序,通过监听端口6969上的多播数据包来自动发现networking上的物理设备。因此,我们需要我们的docker容器能够通过主机从主机之外的设备接收这些数据包,并进入容器。 我已经看到一些 类似的 问题,并做了大量的 阅读,但我仍然无法让服务器响应这些组播数据包。
我坐在Wireshark上观看networkingstream量,但我不是专家。 我知道Docker创build了一个MASQUERADE
地址,使stream量看起来像来自Docker网关,所以当我看到veth
我发现172.17.0.1
和172.17.0.2
之间的交谈很多,尽pipe我的服务器无法获取有关设备的任何信息在networking上。 (如果我在docker外面跑步,我当然没有问题。)
我不能使用--net=host
,和其他人一样,我们使用了--link
function。 我已经尝试了以下变化…
-
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接口。