2016-05-13 60 views
7

6969 numaralı bağlantı noktasında çok noktaya yayın paketlerini dinleyerek ağ üzerindeki fiziksel aygıtların otomatik olarak keşfedilmesini yapan bir dockerized sunucu uygulamasına sahibiz. Bu nedenle, dış ortamdaki aygıtlardan bu paketleri alabilmek için docker kabını kullanmamız gerekiyor ana bilgisayar, ana bilgisayar aracılığıyla ve kapsayıcıya. somesimilarissues'u gördüm ve alotofreading'u gördüm, ancak sunucunun bu çok noktaya yayın paketlerine yanıt vermesini hala alamıyorum.Docker çok noktaya yayın trafiği alıyor

Ağ trafiğini izlerken Wireshark üzerinde oturuyorum ama uzman değilim. Docker'ın trafiğin Docker ağ geçidinden geldiğine benzemesini sağlamak için MASQUERADE adresi oluşturduğunu biliyorum, bu yüzden veth'u izlediğimde çoğunlukla 172.17.0.1 ve 172.17.0.2 arasında görüştüğümde sunucum ağdaki aygıtlarla ilgili herhangi bir bilgi alamıyor. (Docker dışında koşarsam, hiç sorunum yok.)

--net=host'u kullanamıyorum, diğerleri gibi --link özelliğini kullanıyoruz. Ben

  • 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
(ı yemin Ama bu yapıyor olmasın? Şimdi bir kez çalıştı ama) ... Aşağıdaki varyasyonları denedim

Sağlamanız gereken herhangi bir yardım veya anlayış büyük ölçüde takdir edilecektir.

+0

@ValeriySolovyov'un cevabı sizin için mi çalışıyor? – blz

cevap

2

deneyin sizin NIC üzerinde MultiCat etkinleştirmek için:

ip link set eth0 multicast on 

echo 1 >/proc/sys/net/ipv4/ip_forwarding Açıkça ayarlamak veya en azından ilgili arayüzleri üzerinde etkin olduğunu kontrol etmeniz gerekir

yönlendirme IP açın.

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

izin noktaya yayın trafiği: Ayrıca

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

Eğer noktaya yayın trafiği için rota eklemeniz gerekebilir:

route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 

Değişim noktaya yayın gönderenin 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. 

Ayrıca stada yapabilirsiniz rt multicast proxy

PS:

Sen (yukarıda yardım etmezse) denemelisiniz --net = hiçbiri seçeneği ile liman işçisi kabı başlatmak ve takip komutuyla boru tesisatı kullanmak:

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

yaratır IFF_MULTICAST bayrağı ve tanımlı IP adresi ile kapsayıcıdaki eth0 arabirimi.