Исходный набор:
- ip-camera (адрес в локальной сети 192.168.1.21)
- raspberry pi (адрес в локальной сети 192.168.1.190, адрес в vpn сети 10.20.0.2)
- VPS с настроенным wireguard
- Малинка является wireguard-клиентом
Задача: сделать rtsp-поток ip-камеры доступным всем клиентам VPN.
Натыкался на похожий вопрос, попробовал взять решение из него. На малинке прописал:
sudo iptables -t nat -A POSTROUTING -d 192.168.1.21 -p tcp -m tcp --dport 554 -j SNAT --to-source 192.168.1.190
sudo iptables -t nat -A POSTROUTING -d 192.168.1.21 -p udp -m udp --dport 554 -j SNAT --to-source 192.168.1.190
Как я понимаю, этого должно быть достаточно, чтобы протестировать подключение к камере с другого компа в той же локальной сети через малинку
Для теста использую утилиту ffmpeg. Вывод команды, запущенной на самой малинке
ffmpeg -i rtsp://user:pass@192.168.1.21:554/0
ffmpeg version 4.3.4-0+deb11u1+rpt3 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 10 (Debian 10.2.1-6)
configuration: --prefix=/usr --extra-version=0+deb11u1+rpt3 --toolchain=hardened --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-mmal --enable-neon --enable-v4l2-request --enable-libudev --enable-epoxy --enable-sand --libdir=/usr/lib/aarch64-linux-gnu --arch=arm64 --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-vout-drm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
Guessed Channel Layout for Input Stream #0.1 : mono
Input #0, rtsp, from 'rtsp://admin:123456@192.168.1.21:554/0':
Metadata:
title : HTMS
comment : 0
Duration: N/A, start: 0.025125, bitrate: N/A
Stream #0:0: Video: hevc (Main), yuv420p(tv), 704x576, 15 tbr, 90k tbn, 90k tbc
Stream #0:1: Audio: pcm_mulaw, 8000 Hz, mono, s16, 64 kb/s
At least one output file must be specified
Все ок, с самой малинки до камеры могу достучаться
Теперь пробую подключиться к камере с другого компа в той же локальной сети (192.168.1.x). Утилита задумывается секунд на 15, после чего выплевывает следующее
$ ffmpeg -rtsp_transport tcp -i rtsp://user:pass@192.168.1.190:554/0
ffmpeg version 4.3.1-tessus https://evermeet.cx/ffmpeg/ Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 11.0.0 (clang-1100.0.33.17)
configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
[tcp @ 0x7fc391f04a80] Connection to tcp://192.168.1.190:554?timeout=0 failed: Operation timed out
rtsp://admin:123456@192.168.1.190:554/0: Operation timed out
Вывод команды iptables-save на малинке
# Generated by iptables-save v1.8.7 on Sat Aug 20 14:03:41 2022
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [287:17512]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
-A INPUT -p tcp -m tcp --dport 554 -j ACCEPT
-A INPUT -p udp -m udp --dport 554 -j ACCEPT
-A FORWARD -d 192.168.1.21/32 -p tcp -m tcp --dport 554 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 192.168.1.21/32 -p udp -m udp --dport 554 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Sat Aug 20 14:03:41 2022
# Generated by iptables-save v1.8.7 on Sat Aug 20 14:03:41 2022
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -d 10.20.0.2/32 -p tcp -m tcp --dport 554 -j DNAT --to-destination 192.168.1.21:554
-A PREROUTING -d 192.168.1.190/32 -p tcp -m tcp --dport 554 -j DNAT --to-destination 192.168.1.21:554
-A PREROUTING -d 192.168.1.190/32 -p udp -m udp --dport 554 -j DNAT --to-destination 192.168.1.21:554
-A POSTROUTING -d 192.168.1.21/32 -p tcp -m tcp --dport 554 -j SNAT --to-source 192.168.1.190
-A POSTROUTING -d 192.168.1.21/32 -p udp -m udp --dport 554 -j SNAT --to-source 192.168.1.190
-A POSTROUTING -d 192.168.1.21/32 -p udp -m udp --dport 554 -j SNAT --to-source 192.168.1.190
COMMIT
Вывод команды
nmap -Pn -sT 192.168.1.21 c малинки
Starting Nmap 7.80 ( https://nmap.org ) at 2022-08-20 14:06 MSK
Nmap scan report for 192.168.1.21
Host is up (0.00092s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
80/tcp open http
554/tcp open rtsp
8600/tcp open asterix
Вывод команды
nmap -Pn -sT 192.168.1.190 c другого компа в той же локальной сети
Starting Nmap 7.92 ( https://nmap.org ) at 2022-08-20 14:06 MSK
Nmap scan report for 192.168.1.190
Host is up (0.15s latency).
Not shown: 990 closed tcp ports (conn-refused)
PORT STATE SERVICE
139/tcp open netbios-ssn
445/tcp open microsoft-ds
554/tcp filtered rtsp
8000/tcp open http-alt
8080/tcp open http-proxy
Буду признателен за помощь!