Linuxはループバック時にマルチキャストルーティングを無視します。

Linuxはループバック時にマルチキャストルーティングを無視します。

コンピュータでいくつかのマルチキャストコードをテストしようとしています。デフォルトのeth1の代わりにループバックデバイス(lo)を介してパケットを送信しようとしています。 Google 検索ではスペルが引き続き表示されます。

route add -net 224.0.0.0 netmask 240.0.0.0 dev lo
ifconfig lo multicast

しかし、そうした後でも、パケットはまだeth1を介して送信されます。サンプルコード(Python)

#!/usr/bin/env python
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b'hello world', ('225.100.101.0', 8888))

出力tcpdump -i any 'udp port 8888'

10:28:28.957679 IP 192.168.1.104.51159 > 225.100.101.0.8888: UDP, length 11

そのうち192.168.1.104がeth1のホストアドレスです。 IP_MULTICAST_IFソケットオプションを使用して強制的に設定できることを知っていますが(この方法も機能します)、マルチキャストを実行するすべてのアプリケーションではなく、コンピュータでルーティングポリシーを一度設定できることをお勧めします。

私はカーネル3.13.0-68-genericでUbuntu 14.04を実行しています。

答え1

tcpdumpでIPアドレスを見るのは間違っていることがわかりました。ループバックを介してパケットを送信する場合でも、常に192.168.1.104を送信元アドレスとして使用するようです。 tcpdump のインターフェースを指定する際に、実際にどのインターフェースが使用されているかを知ることができます。このパスは時々動作します。この問題動作しない状況を説明します。

関連情報