여러 NIC를 사용할 때 UDP 내부 라우팅 문제

여러 NIC를 사용할 때 UDP 내부 라우팅 문제

두 개의 이더넷 포트가 있는 서버가 있는데, 각각은 별도의 NIC(eth0 및 eth1)에서 실행됩니다. UDP(다른 트래픽 없음)를 통해 비디오를 스트리밍하는 별도의 시스템에 eth0을 연결하고 다른 인터페이스(eth1)는 게이트웨이/라우터에 연결하고 싶습니다.

UDP 트래픽 포트가 더 넓은 네트워크에 연결되지 않아도 상관 없습니다.

감사합니다!

편집: 이 질문은 보류 중이므로 아래 설명을 바탕으로 내 시스템을 더욱 명확하게 설명하고 싶습니다. 내 시스템은 두 개의 이더넷 NIC가 있는 Linux를 실행하는 시스템으로 구성됩니다. 이 포트 중 하나에서 보안 카메라로 직접 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를 의미합니다. )

관련 정보