複数のNICを使用する場合のUDP内部ルーティングの問題

複数のNICを使用する場合のUDP内部ルーティングの問題

2つのイーサネットポートを持つサーバーがあり、それぞれは別々のNIC(eth0とeth1)で実行されます。他のトラフィックなし(UDP)を介してビデオをストリーミングする別のシステムにeth0を接続し、他のインターフェイス(eth1)をゲートウェイ/ルーターに接続したいと思います。

UDPトラフィックポートがより広いネットワークに接続されていなくても構いません。

ありがとうございます!

編集:この質問は保留中なので、以下の説明に基づいて私のシステムをより明確に説明したいと思います。私のシステムは、2つのイーサネットNICを持つLinuxを実行しているシステムで構成されています。これらのポートの1つからセキュアカメラへの直接LAN-LAN接続を介してUDPストリームを受信して​​います。カメラからパケットを読み取ることはできますが、それを介して着信tcpdumpパケットは見たことがありません。ビデオを表示するために使用する予定ですgstreamer

どちらのポートも静的IPアドレスを持ち、次のように設定されます。

eth0      Link encap:Ethernet  HWaddr 5C:F8:21:34:80:F6
      inet addr:192.168.1.233  Bcast:192.168.1.255  Mask:255.255.255.0
      inet6 addr: fe80::5ef8:21ff:fe34:80f6%132688/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:1237 errors:0 dropped:0 overruns:0 frame:0
      TX packets:90 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:113089 (110.4 KiB)  TX bytes:14016 (13.6 KiB)
      Interrupt:99

eth1      Link encap:Ethernet  HWaddr 5C:F8:21:34:80:F7
      inet addr:192.168.1.234 Bcast:192.168.1.255 Mask:255.255.255.0
      UP BROADCAST MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1%132688/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:65536  Metric:1
      RX packets:330 errors:0 dropped:0 overruns:0 frame:0
      TX packets:330 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1
      RX bytes:277171 (270.6 KiB)  TX bytes:277171 (270.6 KiB)

内部ルーティングテーブルは次のとおりです。

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth1
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth1
192.168.1.1     0.0.0.0         255.255.255.255 UH        0 0          0 eth1

カメラはそのアドレスにあり、192.168.1.239UDPを介して自分のサーバーに直接放送されます。 (ターゲットMACはパケットにハードコードされています。)MJPEGストリームをブロードキャストしており、保存されたパケットを受信するとtcpdumpMJPEGに再構成できます。

gstreamerただし、次のコマンドを使用する場合:

gst-launch-1.0 udpsrc multicast-iface=eth0, port=1234 ! filesink location=foo

fooデータは保存されません。私は過去にgstreamerを使用してUDPストリームを保存するためにこのシステムを使用しましたが、両方のポートが使用されていたときはそうではありませんでした。 IEの場合、ビデオは別のコンピュータから出て、ルーターを介して問題のサーバーに移動します。

それでは、サーバーが明確に見て理解する(少なくとも破棄しない)、これらのパケットが私のgstreamerプログラムに到達できないのはなぜですか?

ベストアンサー1

通常、RFC1918(プライベート)スペースの他のビットでは、独自の/ 30サブネットをクロス接続に割り当てます。だからあなたは次のようにします:

  • 192.168.1.234/24はeth1のLANです。
  • 192.168.255.1/30は、eth0(クロスコネクト)にあるこのマシンです。
  • 192.168.255.2/30はビデオソースであり、クロスコネクトの一端にあります。

UDP接続用のIPアドレスとして192.168.255.1と192.168.255.2を使用している場合は、eth0を介して送信されます。

LANと同じサブネットを使用して(/ 32ルーティング、ポリシールーティング、またはブリッジングトリックを使用)、これを達成できますが、これらすべての方法はより複雑で、ランダムプログラムの混乱による問題を引き起こす可能性が高くなります。

(/x表記の簡単な説明:これは、左/最上位ビットから始めて1[バイナリ!]の数を数えてネットマスクを指定する簡単な方法です。したがって、/ 30はネットマスク255.255.255.252を意味します。)

おすすめ記事