iptables로 UDP 유니 캐스트 스트림을 복제 할 수 있습니까?


8

장치 # 1 (192.168.1.1)에서 장치 # 2 (.1.2)로 udp 비디오 스트림을 전송하는 독점 시스템이 있습니다. 이 시스템을 변경할 수 없으며이 udp 스트림을 복제하여 다른 프로그램에서 액세스 할 수 있습니다. 이 프로그램은 비디오를 처리하여 멀티 캐스트 스트림으로 다시 보냅니다.

네트워크 카드가 3 개인 Linux 시스템 (현재 Ubuntu Server 12.04를 실행)을 사용하여이 작업을 수행하려고합니다. Linux 컴퓨터의 두 번째 네트워크 카드 (eth0 및 eth1)에 장치 # 1 및 # 2를 연결하고 브리지를 사용하여 통신하게되었습니다. 내 / etc / network / interfaces는 다음과 같습니다.

# The loopback network interface
auto lo
iface lo inet loopback

# The external interface
auto eth3
iface eth3 inet static
address 192.168.10.2
netmask 255.255.255.0

# The bridge interface
auto br0
iface br0 inet manual
  bridge_ports eth0 eth1

이것은 작동하며 tcpdump를 사용하여 udp 패킷이 # 1에서 도착하고 포트 6000에서 # 2로 향하고 있음을 확인했습니다.

다음 단계는 iptables를 사용하여 192.168.1.1에서 오는 모든 udp 패킷을 # 2의 포트 6000으로 보내는 복제하는 것입니다. 나는 iptables에 익숙하지 않지만 온라인과 매뉴얼을 읽은 후에 이것이 효과가 있다고 생각했습니다.

iptables -A PREROUTING -t mangle -p udp -s 192.168.1.1/32 --dport 6000 -j TEE --gateway 192.168.10.2

규칙이 성공적으로 적용되었지만 작동하지 않습니다. tcpdump를 사용하여 eth3을 모니터링하면 거기에 패킷이 표시되지 않습니다.

이 스트림을 가져 와서 작업하고 .10.2 인터페이스에서 멀티 캐스트로 보내려고합니다.

내가 무엇을 잘못하고 있지? 내가 잘못 이해 한 것이 있습니까?

답변:


4

192.168.10.2는 머신 자체이므로 패킷은 eth3에 도달하지 않습니다. 또한 복제 된 패킷에는 여전히 목적지 IP 주소 192.168.1.2가 있습니다. 복제본이 실제로 eth3을 통해 라우팅되도록 192.168.10.0/24의 시스템 (예 : 192.168.10.254)에 연결해야합니다.

iptables -t mangle -A PREROUTING -p udp --dport 6000 -j TEE --gateway 192.168.10.254

그런 다음 192.168.10.254로 DNAT를 DNAT해야하므로 192.168.10.254의 스트림을 읽고 멀티 캐스팅을 통해 스트림을 보낼 수 있습니다.

192.168.10.254 자체 :

iptables -t nat -A PREROUTING -p udp -d 192.168.1.2 --dport 6000 -j DNAT --to-destination 192.168.10.254:6000

또는 패킷이 eth3을 떠나기 전에 여전히 192.168.10.2에 있습니다.

iptables -t nat -A POSTROUTING -o eth3 -p udp -d 192.168.1.2 --dport 6000 -j DNAT --to-destination 192.168.10.254:6000

이것을 올바르게 이해하면 설명 한 내용이 다른 컴퓨터 (.10.254)로 패킷을 보냅니다. 이 여분의 기계를 피하고 내부적으로 한 대의 기계에서 수행하고 싶습니다. 게이트웨이를 127.0.0.1로 설정하면 작동합니까?
Håkon K. Olafsen 님이

게이트웨이는 대상이 여전히 192.168.1.2로 유지되는 다음 홉이며 컴퓨터에서 복제 된 패킷을 "티잉"할 수 없습니다. 따라서 127.0.0.1도 작동하지 않습니다.
lsmooth

그래서 나는 단지 하나의 기계를 사용하려고하는 것을 할 수 없습니다.
Håkon K. Olafsen 님이

0

비슷한 문제가 있었고 libpcap을 사용하여 UDP 패킷의 내용을 읽는 작은 프로그램으로 해결했습니다. 이 패킷의 사본을 다른 대상으로 보냈습니다. (같은 기계에있을 수 있습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.