Назад | Перейти на главную страницу

Можно ли продублировать одноадресный поток UDP с помощью iptables?

У меня есть проприетарная система, которая передает видеопоток udp с устройства № 1 (192.168.1.1) на устройство № 2 (.1.2). Я не могу вносить изменения в эту систему и пытаюсь клонировать этот поток udp, чтобы получить к нему доступ в другой программе. Эта программа будет обрабатывать видео и снова отправлять его в виде многоадресного потока.

Я надеюсь сделать это на машине Linux (сейчас на ней установлен Ubuntu Server 12.04) с тремя сетевыми картами. Подключив устройства № 1 и № 2 к двум сетевым картам (eth0 и eth1) на машине Linux и используя мост, я получил их связь. Мой / 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 и направляются к №2 на порту 6000.

Следующий шаг, который, я надеюсь, сработает, - это использовать iptables для клонирования всех пакетов udp, поступающих из 192.168.1.1 на порт 6000 в # 2. Я не очень знаком с 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.

Что я делаю не так? Я что-то неправильно понял?

Пакеты никогда не достигают eth3, поскольку 192.168.10.2 - это сама машина. Также дублированные пакеты по-прежнему имеют IP-адрес назначения 192.168.1.2. Вам нужно подключить их к машине в 192.168.10.0/24, например 192.168.10.254, чтобы дубликаты фактически маршрутизировались через eth3.

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

Затем вам также необходимо настроить DNAT на 192.168.10.254, чтобы вы могли прочитать поток на 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

Или все еще на 192.168.10.2 до того, как пакеты покинут eth3:

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-пакетов. Он отправил копии этих пакетов в другое место назначения. (Что может быть на той же машине.)