使用多个 NIC 时的 UDP 内部路由问题

使用多个 NIC 时的 UDP 内部路由问题

我有一台具有两个以太网端口的服务器,每个端口都在单独的 NIC(eth0 和 eth1)上运行。我想将 eth0 连接到一台单独的机器,该机器通过 UDP(没有其他流量)传输视频,而另一个接口 (eth1) 连接到网关/路由器。

我不在乎 udp 流量端口是否无法连接到更广泛的网络。

谢谢你!

编辑:由于这个问题被搁置,我想根据下面的评论进一步澄清我的系统。我的系统由一台运行 Linux 的机器组成,带有两个以太网 NIC。我在这些端口之一上接收从直接 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.239,并直接通过 UDP 广播到我的服务器。 (目标MAC被硬编码到数据包中)它正在广播MJPEG流,当我获取保存的数据包时,tcpdump我可以将其重建为MJPEG。

但是,当我使用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 是视频源,位于交叉连接的一端

如果您将 192.168.255.1 和 192.168.255.2 作为 UDP 连接的 IP 地址,它将通过 eth0 传输。

可以使用与 LAN 相同的子网(使用 /32 路由、策略路由或桥接技巧)来实现此目的,但所有这些都更复杂,并且更可能出现随机程序混乱的问题。

(/x 表示法的快速解释:这是指定网络掩码的一种简短方法,通过从左侧/最高有效位开始计算 1 [二进制!] 的数量。因此 /30 表示网络掩码 255.255.255.252。)

相关内容