NAT를 사용하여 KVM 게스트에서 RTSP 스트림에 액세스할 수 없음 - iptables 전달

NAT를 사용하여 KVM 게스트에서 RTSP 스트림에 액세스할 수 없음 - iptables 전달

네트워크 인터페이스를 통해 연결을 시작한 게스트 의 트래픽을 iptables허용하려면 호스트를 어떻게 구성해야 합니까 ?rtsp://KVMNAT

단순한 매핑은 아닌 것 같습니다. 게스트가 rtsp 스트림에 대한 연결을 열 때 어떤 포트를 사용하는지 모르겠습니다. 그것은 무작위일 수 있습니다. 예를 들어 kvm 게스트는 포트 30110에서 실행되는 rtsp 스트림에 연결을 시도할 때 포트 48000을 사용할 수 있습니다. 다음에 연결이 설정되면 33844와 같이 완전히 다른 포트가 될 수 있습니다. 그러나 rtsp에서 돌아오는 트래픽은 30110 포트는 해당 게스트 또는 사용하는 임의 포트에서 48000에 도달하지 않는 것으로 보입니다. 교통 체증이 어디에서 죽어가고 있는지 잘 모르겠습니다.

특정 포트로 들어오는 연결을 허용해야 하는 경우 /etc/libvirt/hooks/qemu다음과 같은 bash를 사용합니다.

if [ "${1}" = "name" ]; then   # Update the following variables to fit your setup
    GUEST_IP=192.168.12.55
    GUEST_PORT=55555
    HOST_PORT=55555
    if [ "${2}" = "stopped" ] || [ "${2}" = "reconnect" ]; then
        /sbin/iptables -D FORWARD -o virbr0 -d  $GUEST_IP -j ACCEPT
        /sbin/iptables -t nat -D PREROUTING -p tcp --dport $HOST_PORT -j DNAT --to $GUEST_IP:$GUEST_PORT
    fi
    if [ "${2}" = "start" ] || [ "${2}" = "reconnect" ]; then
        /sbin/iptables -I FORWARD -o virbr0 -d  $GUEST_IP -j ACCEPT
        /sbin/iptables -t nat -I PREROUTING -p tcp --dport $HOST_PORT -j DNAT --to $GUEST_IP:$GUEST_PORT
    fi
fi

작동하지만 어떤 이유로 게스트에서 발생하는 트래픽에 대해 NAT 인터페이스에 의해 트래픽이 전달되는 것으로 추정되는 트래픽에도 불구하고 kvm 게스트가 NAT를 통해 rtsp 스트림에 연결하고 데이터를 수신하도록 허용하는 방법을 알아낼 수 없습니다.

무엇을 해야 하는지 아는 사람 있나요?

ffmpeg -i rtsp://{STREAM_URL} -acodec copy -vcodec copy temp.mp4
ffmpeg version 4.1.3-0york1~16.04 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.11) 20160609
  configuration: --prefix=/usr --extra-version='0york1~16.04' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --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-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --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-opengl --enable-sdl2 --enable-nonfree --enable-libfdk-aac --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
[rtsp @ 0x557cc99ec240] UDP timeout, retrying with TCP
[rtsp @ 0x557cc99ec240] Could not find codec parameters for stream 0 (Video: h264, none, 1920x1080): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Guessed Channel Layout for Input Stream #0.1 : mono
Input #0, rtsp, from 'rtsp://{STREAM_URL}':
  Metadata:
    title           : 10
  Duration: N/A, bitrate: 64 kb/s
    Stream #0:0: Video: h264, none, 1920x1080, 90k tbr, 90k tbn, 180k tbc
    Stream #0:1: Audio: pcm_alaw, 8000 Hz, mono, s16, 64 kb/s
File 'temp.mp4' already exists. Overwrite ? [y/N] y
[mp4 @ 0x557cc9a00000] Could not find tag for codec pcm_alaw in stream #1, codec not currently supported in container
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument

동일한 RTSP URL이 내 집 컴퓨터의 VLC에서 제대로 작동합니다.

관련 정보