首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IP摄像机(HTTP,RTSP)的端口转发而不改变路由

IP摄像机(HTTP,RTSP)的端口转发而不改变路由
EN

Server Fault用户
提问于 2018-06-25 21:42:12
回答 1查看 4.4K关注 0票数 0

我已经在一个内部网络中安装了两个大华IPC-C15 IP摄像机,并希望通过VPN访问它们。

当地网络的建立情况如下:

  • 缺省GW: 192.168.1.1
  • vpn-连接机器: 192.168.1.31
  • IP摄像机: 192.168.1.4{0,1}
  • 动态子网(其他机器):192.168.1.50-90

我保持默认的GW和vpn连接的机器分开,并希望避免它们混合(默认GW是一个股票ADSL路由器,vpn客户端是有点零碎从硬件的角度来看)。

我考虑过以下通过VPN曝光摄像机的计划:

  1. 为摄像机上的所有服务分配唯一端口
  2. 转发VPN连接机器上的特定端口。
  3. 通过VPN连接的机器上通过VPN访问服务。

下面的图表会使它变得清晰。

代码语言:javascript
复制
[cam-0]
(1080, 5664)    \
                  --> [vpn-client]             --> (VPN)
[cam-1]              (forwards 1080, 1081)
(1081, 5665)    /    (         5664, 5665)

摄像机与修改后的端口工作得很好,所以我试图通过端口转发使它们可用。我转发了cam-0所需的所有端口(甚至有点过分热情)

代码语言:javascript
复制
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 1080 -j DNAT --to-destination 192.168.1.40:1080
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 1554 -j DNAT --to-destination 192.168.1.40:1554
iptables -t nat -A PREROUTING -p udp -i eth0 --dport 1554 -j DNAT --to-destination 192.168.1.40:1554
iptables -t nat -A PREROUTING -p udp -i eth0 --dport 37777 -j DNAT --to-destination 192.168.1.40:37777
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 37777 -j DNAT --to-destination 192.168.1.40:37777
iptables -t nat -A PREROUTING -p udp -i eth0 --dport 37778 -j DNAT --to-destination 192.168.1.40:37778
iptables -A FORWARD -p udp -d 192.168.1.40 --dport 37778 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.1.40 --dport 37777 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.1.40 --dport 1080 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp -d 192.168.1.40 --dport 1554 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A POSTROUTING -j MASQUERADE

最终的结果是HTTP访问可以正常工作,但RTSP回放却不能。我不敢尝试ONVIF的发现,可能是一团糟。

使用ffplay的RTSP错误如下所示

代码语言:javascript
复制
$ ffplay -hide_banner 'rtsp://$USER:$PASS@192.168.1.31:1554'
[rtsp @ 0x7fa124000b80] UDP timeout, retrying with TCP   0B f=0/0   
[rtsp @ 0x7fa124000b80] method PAUSE failed: 455 Method Not Valid in This State
[rtsp @ 0x7fa124000b80] Could not find codec parameters for stream 0 (Video: h264, none): unspecified size
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, rtsp, from 'rtsp://admin:50076929dhA!@192.168.1.31:1554':
  Metadata:
    title           : Media Server
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: h264, none, 90k tbr, 90k tbn, 180k tbc
    Stream #0:1: Audio: aac, 16000 Hz, mono, fltp
[rtsp @ 0x7fa124000b80] UDP timeout, retrying with TCP   0B f=0/0   
[rtsp @ 0x7fa124000b80] method PAUSE failed: 455 Method Not Valid in This State

如果我查看正在进行转发的机器上的iptable统计数据,数据包似乎会流:

代码语言:javascript
复制
# iptables -L -vn

Chain INPUT (policy ACCEPT 9827 packets, 6479K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 196 packets, 17202 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1620  183K ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.40         tcp dpt:1080 state NEW,RELATED,ESTABLISHED
  107 21217 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.40         tcp dpt:1554 state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            192.168.1.40         udp dpt:1554 state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            192.168.1.40         udp dpt:37778 state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.40         tcp dpt:37777 state NEW,RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT 857 packets, 96412 bytes)
 pkts bytes target     prot opt in     out     source               destination

# iptables -t nat -L -vn
Chain PREROUTING (policy ACCEPT 233 packets, 45610 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  128  7680 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:1080 to:192.168.1.40:1080
    7   420 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:1554 to:192.168.1.40:1554
    0     0 DNAT       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpt:1554 to:192.168.1.40:1554
    0     0 DNAT       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpt:37777 to:192.168.1.40:37777
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:37777 to:192.168.1.40:37777
    0     0 DNAT       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpt:37778 to:192.168.1.40:37778

Chain INPUT (policy ACCEPT 233 packets, 45610 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 246 packets, 23141 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  455 38579 MASQUERADE  all  --  *      *       0.0.0.0/0            0.0.0.0/0

我现在没有想法了,所以任何关于如何推进这件事的建议都是非常感谢的。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2018-06-25 22:36:25

显然,转发规则起作用了,我只是要求ffmpeg使用ffplay -rtsp_transport tcp来使用tcp。

此外,我使用的Android应用程序(Ovn显)很高兴只转发了HTTP和RSTP端口,所以我称之为“完成”。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/918164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档