У меня есть сервер с двумя портами Ethernet, каждый из которых работает на отдельном сетевом адаптере (eth0 и eth1). Я хотел бы подключить eth0 к отдельной машине, которая передает потоковое видео через UDP (без другого трафика), в то время как другой интерфейс (eth1) подключен к сетевому шлюзу / маршрутизатору.
Меня не волнует, что порт трафика udp не подключается к более широкой сети.
Спасибо!
РЕДАКТИРОВАТЬ: Поскольку этот вопрос был отложен, я хотел бы дополнительно прояснить мою систему в соответствии с комментариями ниже. Моя система состоит из машины, на которой работает Linux, с двумя сетевыми адаптерами Ethernet.Я получаю поток UDP на один из этих портов из прямого соединения LAN-LAN с камерой наблюдения, и хотя я смог прочитать пакеты, поступающие с камеры, используя 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
не сохраняет никаких данных. Раньше я использовал эту машину для сохранения потоков udp с помощью gstreamer, но не тогда, когда использовались оба порта. IE, видео поступало с другой машины через маршрутизатор на этот сервер.
Итак, почему эти пакеты, которые сервер четко видит и понимает (по крайней мере, не отбрасывает их), не могут попасть в мою программу gstreamer?
Обычно вы назначаете вашему кросс-коннекту собственную подсеть /30, из другой части RFC1918 (частного) пространства. Таким образом, вы сделаете примерно следующее:
Если вы затем 192.168.255.1 и 192.168.255.2 в качестве IP-адресов для вашего UDP-соединения, оно будет проходить через eth0.
Это можно сделать, используя ту же подсеть, что и LAN (используя маршруты /32, маршрутизацию политики или трюки с мостами), но все эти способы более сложны и с большей вероятностью будут иметь проблемы с запутыванием случайных программ.
(Краткое объяснение нотации /x: Это короткий способ указания маски сети путем подсчета количества единиц [двоичных!], начиная с левого/старшего значащего бита. Таким образом, /30 означает маску сети 255.255.255.252.)
.