Проблема с внутренней маршрутизацией UDP при использовании нескольких сетевых адаптеров

У меня есть сервер с двумя портами 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?

0
02.03.2017, 16:06
1 ответ

Обычно вы назначаете вашему кросс-коннекту собственную подсеть /30, из другой части RFC1918 (частного) пространства. Таким образом, вы сделаете примерно следующее:

  • 192.168.1.234/24 - ваша локальная сеть на eth1
  • 192.168.255.1/30 - эта машина, на eth0 (кросс-коннект)
  • 192.168.255.2/30 - источник видео, на его конце кросс-коннекта

Если вы затем 192.168.255.1 и 192.168.255.2 в качестве IP-адресов для вашего UDP-соединения, оно будет проходить через eth0.

Это можно сделать, используя ту же подсеть, что и LAN (используя маршруты /32, маршрутизацию политики или трюки с мостами), но все эти способы более сложны и с большей вероятностью будут иметь проблемы с запутыванием случайных программ.

(Краткое объяснение нотации /x: Это короткий способ указания маски сети путем подсчета количества единиц [двоичных!], начиная с левого/старшего значащего бита. Таким образом, /30 означает маску сети 255.255.255.252.)

.
0
28.01.2020, 04:48

Теги

Похожие вопросы