2016-05-13 7 views
7

У нас есть докционированное серверное приложение, которое выполняет автоматическое обнаружение физических устройств в сети, прослушивая многоадресные пакеты на порте 6969. Таким образом, нам нужен наш контейнер докеров, чтобы иметь возможность принимать эти пакеты с устройств за пределами хост, через хост и в контейнер. Я видел issues и сделал alotofreading, но я все еще не могу заставить сервер отвечать на эти многоадресные пакеты.Докеры, принимающие многоадресный трафик

Я сижу на Wireshark, наблюдая за сетевым трафиком, но я не специалист. Я знаю, что Docker создает адрес MASQUERADE, чтобы весь трафик выглядел так, как будто он идет от шлюза Docker, поэтому, когда я смотрю veth, я вижу, что в основном разговаривают между 172.17.0.1 и 172.17.0.2, хотя мой сервер не может получить информацию об устройствах в сети. (Если я бегу за пределами докера, у меня проблем нет.)

Я не могу использовать --net=host, так как, как и другие, мы используем функцию --link. Я попытался следующие варианты ...

  • 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

Любая помощь или понимание, которые вы могли бы предоставить, были бы весьма признательны.

+0

Ответчик @ValeriySolovyov работает для вас? – blz

ответ

2

Попробуйте включить MultiCat на вашей тронике:

ip link set eth0 multicast on 

echo 1 >/proc/sys/net/ipv4/ip_forwarding включить IP Forwarding

Вы должны явно установить или, по крайней мере, убедитесь, что он включен в соответствующих интерфейсах.

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

Разрешить многоадресного трафика:

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. 

Также вы можете указать к.т. multicast proxy

PS:

Вы должны попробовать (если выше не помогает), чтобы начать Docker контейнер с --net = нет опции и использовать трубопроводы с командой наблюдения:

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

, который создает eth0 внутри контейнера с флагом IFF_MULTICAST и определенным IP-адресом.

Смежные вопросы