我有一台具有两个以太网端口的服务器,每个端口都在单独的 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。)