web-dev-qa-db-ja.com

マルチキャストトラフィックを受信するDocker

ポート6969でマルチキャストパケットをリッスンすることにより、ネットワーク上の物理アプライアンスの自動検出を実行するドッキングサーバーアプリケーションがあります。したがって、ホストを介してホストの外部のデバイスからこれらのパケットを受信できるようにするために、ドッキングコンテナーが必要です。コンテナに入れます。私は somesimilarissues を見てきました alotofreading しかし、これらのマルチキャストパケットにサーバーを応答させることができません。

Wiresharkに座ってネットワークトラフィックを監視していますが、専門家ではありません。 DockerがMASQUERADEアドレスを作成して、トラフィックがすべてDockerゲートウェイからのトラフィックのように見えることを知っているので、vethを見ると、172.17.0.1172.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

あなたが提供できるどんな助けや洞察も大いに高く評価されるでしょう。

14
DTI-Matt

NICでmulticatを有効にしてみてください:

ip link set eth0 multicast on

echo 1 >/proc/sys/net/ipv4/ip_forwarding IP転送をオンにする

明示的に設定するか、少なくとも関連するインターフェイスで有効になっていることを確認する必要があります。

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.

また、開始することができます マルチキャストプロキシ

PS:

(上記の方法が役に立たない場合)Dockerコンテナーを--net = noneオプションで起動し、followコマンドでpipeworkを使用してみてください:

pipework docker0 -i eth0 CONTAINER_ID IP_ADDRESS/IP_MASK@DEFAULT_ROUTE_IP 

これは、IFF_MULTICASTフラグと定義済みのIPアドレスを使用して、コンテナー内にeth0インターフェイスを作成します。

5