Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Embedded Linux
Как включить поддержку connection tracking NAT RTSP
Wad1970
Добавлено 16.10.2018 13:48 Редактировалось 09.11.2018 11:31
0
Сообщение: 1
Wad1970
5

Пункты: 3734
Регистрация: 24.11.2014
Стоит Linux 3-10-17 PREEMPT RT
Для проброса видеопотока камеры с eth0 на ppp0
требуется включить поддержку connection tracking NAT RTSP?
Сотовая связь со статическим IP.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 16.10.2018 14:22 Сообщение: 2
sasamy
4.71

Пункты: 83558
Регистрация: 14.08.2009
Цитата
Стоит Linux 3-10-17 PREEMPT RT
Для проброса видеопотока камеры с eth0 на ppp0


я ничего не понял - откуда камера на eth0 - плата как роутер ? для проброса данных между интерфейсами для начала надо включить forwarding

echo 1 > /proc/sys/net/ipv4/ip_forward
Спуститься к концу Подняться к началу
Персональная информация
Wad1970
Добавлено 16.10.2018 14:40 Сообщение: 3
Wad1970
5

Пункты: 3734
Регистрация: 24.11.2014
Камера подключена по Ethernet к интерфейсу eth0. К плате подключен сотовый модуль с интерфейсом ppp0 (статический IP). Задача: смотреть изображение камеры по rtsp через интернет.
Выполняем следующие действия:

Код
sysctl -w net.ipv4.ip_forward=1

iptables -F
iptables -F -t nat
iptables -S

iptables -t nat -A PREROUTING -i ppp0 --dst $REAL_IP -p tcp -m tcp --dport 55451 -j DNAT --to-destination $IP_CAM:554
iptables -t nat -A POSTROUTING --dst $IP_CAM -p tcp --dport 554 -j SNAT --to-source $LOCAL_IP
iptables -t nat -A OUTPUT --dst $REAL_IP -p tcp --dport 55451 -j DNAT --to-destination $IP_CAM:554


Результат снифинга: протокол RTSP отрабатывает нормально, а пакеты RTP с изображением заворачиваются с ошибкой icmp "port unreachable".
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 16.10.2018 15:58 Сообщение: 4
sasamy
4.71

Пункты: 83558
Регистрация: 14.08.2009
Цитата

Результат снифинга: протокол RTSP отрабатывает нормально, а пакеты RTP с изображением заворачиваются с ошибкой icmp "port unreachable".


наверно надо

https://www.linux.org.ru/forum/admin/12485954?cid=12488248

только в ядре такого модуля нет, в дистрибутивах собирают внешний модуль, вроде все берут отсюда

https://github.com/maru-sama/rtsp-linux
Спуститься к концу Подняться к началу
Персональная информация
Wad1970
Добавлено 16.10.2018 16:10 Сообщение: 5
Wad1970
5

Пункты: 3734
Регистрация: 24.11.2014
Спасибо
Спуститься к концу Подняться к началу
Персональная информация
Wad1970
Добавлено 09.11.2018 11:37 Сообщение: 6
Wad1970
5

Пункты: 3734
Регистрация: 24.11.2014
Цитата

только в ядре такого модуля нет, в дистрибутивах собирают внешний модуль, вроде все берут отсюда

Собрали в QT:
/home/user/src/buildroot-2014.08-sk-3.10.17/package/rtsp-linux-master/nf_conntrack_rtsp.ko
/home/user/src/buildroot-2014.08-sk-3.10.17/package/rtsp-linux-master/nf_nat_rtsp.ko
А куда их теперь подсунуть?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 09.11.2018 13:04 Редактировалось 11.11.2018 14:37 Сообщение: 7
sasamy
4.71

Пункты: 83558
Регистрация: 14.08.2009
1 Скачайте патч в корень buildroot

https://yadi.sk/d/zkjMljuHXcwSnQ

2 пропатчите

patch -p1 < ./buildroot-2014.08-sk-rtsp.patch

3 включите в конфиге ядра поддержку connection tracking

make linux-menuconfig

[*] Networking support --->
Networking options --->
[*] Network packet filtering framework (Netfilter) --->
Core Netfilter Configuration --->
<M> Netfilter connection tracking support

4 включите в сборку модуль для rtsp

make menuconfig

Target packages --->
Hardware handling --->
Freescale i.MX libraries --->
[*] rtsp-linux

5 соберите

make

модули будут в корневой системе где все другие модули ядра

/lib/modules/3.10.17/extra/

перед установкой правил iptables надо выполнить

modprobe nf_nat_rtsp
Спуститься к концу Подняться к началу
Персональная информация
OMu4KA
Добавлено 12.11.2018 13:37 Редактировалось 12.11.2018 13:43 Сообщение: 8
OMu4KA
0

Пункты: 1057
Регистрация: 12.11.2018
Цитата
1 Скачайте патч в корень buildroot

https://yadi.sk/d/zkjMljuHXcwSnQ

2 пропатчите

patch -p1 < ./buildroot-2014.08-sk-rtsp.patch
...


Здравствуйте. Большое спасибо, все заработало!

Остался только один нюанс:
Если сделать проброс порта RTSP с внешнего 554 на внутренний 554, то все работает отлично. А с другим внешним портом (например, 8054 или 5541 или 55451) и внутренним 554 - служебный обмен RTCP идет, а поток данных RTP - отсутствует.

Обмен RTSP проходит все этапы, как положено:
<- OPTIONS rtsp://REAL_IP:5541 RTSP/1.0
-> RTSP/1.0 200 OK

<- DESCRIBE rtsp://REAL_IP:5541 RTSP/1.0
-> RTSP/1.0 200 OK

<- SETUP rtsp://IP_CAM:554/TraficonVideo/video RTSP/1.0
-> RTSP/1.0 200 OK

<- PLAY rtsp://IP_CAM:554/TraficonVideo/ RTSP/1.0
-> RTSP/1.0 200 OK

<- GET_PARAMETER rtsp://IP_CAM:554/TraficonVideo/ RTSP/1.0
-> RTSP/1.0 200 OK

Далее по RTCP обмениваются обычными пакетами:
-> Sender Report (200)
<- Receiver Report (201)

А поток данных RTP - просто отсутствует.

И через несколько секунд соединение завершается пакетом:
<- TEARDOWN rtsp://IP_CAM:554/TraficonVideo/ RTSP/1.0

Не подскажете, в чем проблема? У нас должно подключаться несколько камер к одной плате, так что использовать только один внешний порт (стандартный 554) не получится.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 12.11.2018 14:42 Редактировалось 12.11.2018 16:12 Сообщение: 9
sasamy
4.71

Пункты: 83558
Регистрация: 14.08.2009
Цитата

Если сделать проброс порта RTSP с внешнего 554 на внутренний 554, то все работает отлично. А с другим внешним портом (например, 8054 или 5541 или 55451) и внутренним 554 - служебный обмен RTCP идет, а поток данных RTP - отсутствует.


для нестандартного порта надо наверно добавить привязку соединения к нужному conntrack helper-у, для стандартного порта это делается автоматом (в новых ядрах возможно уже и для стандартных надо привязывать). Что-то типа того

iptables -t nat -A PREROUTING -i ppp0 --dst $REAL_IP -p tcp -m tcp --dport 55451 -j CT --helper rtsp -j DNAT --to-destination $IP_CAM:554

PS Это кстати в параметре модуля при его загрузке можно указать

Цитата

* Module load syntax:
* insmod nf_conntrack_rtsp.o ports=port1,port2,...port<MAX_PORTS>
* max_outstanding=n setup_timeout=secs
*
* If no ports are specified, the default will be port 554.


https://github.com/maru-sama/rtsp-linux/blob/master/nf_conntrack_rtsp.c#L24

modprobe nf_nat_rtsp ports=554,8054,5541,55451
Спуститься к концу Подняться к началу
Персональная информация
OMu4KA
Добавлено 13.11.2018 12:36 Редактировалось 13.11.2018 12:48 Сообщение: 10
OMu4KA
0

Пункты: 1057
Регистрация: 12.11.2018
Цитата


для нестандартного порта надо наверно добавить привязку соединения к нужному conntrack helper-у, для стандартного порта это делается автоматом (в новых ядрах возможно уже и для стандартных надо привязывать). Что-то типа того

iptables -t nat -A PREROUTING -i ppp0 --dst $REAL_IP -p tcp -m tcp --dport 55451 -j CT --helper rtsp -j DNAT --to-destination $IP_CAM:554

PS Это кстати в параметре модуля при его загрузке можно указать

Цитата

* Module load syntax:
* insmod nf_conntrack_rtsp.o ports=port1,port2,...port<MAX_PORTS>
* max_outstanding=n setup_timeout=secs
*
* If no ports are specified, the default will be port 554.


modprobe nf_nat_rtsp ports=554,8054,5541,55451


Спасибо за ответ. Но что-то у нас не получается.

1. Добавили команду:
iptables -t raw -I PREROUTING -p tcp --dport 55451 -j CT --helper rtsp

Ошибка выполнения:
iptables: No chain/target/match by that name.

Добавляем "-j DNAT" - выдает ошибку "iptables v1.4.21: multiple -j flags not allowed"
Добавляем "--to-destination $IP_CAM:554" - ошибка "iptables v1.4.21: unknown option "--to-destination".

Чего-то не хватает в команде? или в ядре?

conntrack_helper включен:
# sysctl net.netfilter.nf_conntrack_helper
net.netfilter.nf_conntrack_helper = 1


2. Выполняем команды:
# modprobe nf_conntrack_rtsp ports=55451
# modprobe nf_nat_rtsp

Выполняется без ошибок, но потока по-прежнему нет. (команда "modprobe nf_nat_rtsp ports=55451" выдает ошибку "Invalid argument").
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux