장치 # 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 인터페이스에서 멀티 캐스트로 보내려고합니다.
내가 무엇을 잘못하고 있지? 내가 잘못 이해 한 것이 있습니까?
답변
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
답변
비슷한 문제가 있었고 libpcap을 사용하여 UDP 패킷의 내용을 읽는 작은 프로그램으로 해결했습니다. 이 패킷의 사본을 다른 대상으로 보냈습니다. (같은 기계에있을 수 있습니다.)