项目解决方案:跨不同的物理网络实现视频监控多画面的实时视频的顺畅访问
目录
一、碰到的需求问题
二、需求分析
三、方案分析
(一)方法1:使用HTTP代理
1. 安装HTTP代理服务器
2. 配置Nginx代理
3. 重启Nginx
4. 访问视频流
(二)方法2:使用反向代理
1. 安装反向代理服务器
2. 配置HAProxy
3. 重启HAProxy
4. 访问视频流
(三)方法3:使用iptables进行端口转发
1. 配置iptables
2. 保存iptables规则
3. 访问视频流
(四)方法4:使用SSH隧道
1. 配置SSH隧道
2. 访问视频流
四、最优解决方案
五、实际效果
一、碰到的需求问题
客户的网络视频监控摄像机(IPC)都部署在一个网段;办公网络是另外一个网段;还有一个网段是开放给其他合作单位的。由于视频监控网络的视频占用带宽比较大,而办公网络的数据数量有比较多,因此为了互不影响,视频监控网络和办公网络物理隔离,不能直通。
同时,合作单位可以访问的网络跟其他网络也要完全进行物理隔离,相互之间不同通信。
这样安全问题没有了,但是视频监控作为需要能够让办公网络的用户,以及合作单位的用户能够根据适当的权限来查看,如何解决这个问题 ?不能让视频网络成为一个数据孤岛或者视频孤岛。
二、需求分析
根据现场情况,视频监控的网络拓扑图表示如下:
我们可以对需求进行如下分解:
- 网络A、网络B和网络C是隔离的,相互之间不能直接访问;
- 成本不能太高,一个网闸的话动辄上万,还需要其他设备和软件支撑;
- 交换机设置vlan的话,还是会导致网络A的其他人,可能访问网络B、或者网络C;这种情况也不允许;
- 网络A的用户,需要有一定的特权,才能看视频。
三、方案分析
要实现让网络B和网络C内的用户访问网络A上的监控视频数据,可以通过以下几种方法来配置一个网络服务器,网络服务器带3个网络接口。这个网络服务器使其充当代理或中继的角色。如下为初步拟定的几个方法。
(一)方法1:使用HTTP代理
1. 安装HTTP代理服务器
你可以使用Nginx或Apache作为HTTP代理服务器。
安装Nginx:
sudo yum install nginx CentOS/RHEL
sudo apt-get install nginx Debian/Ubuntu
2. 配置Nginx代理
编辑Nginx配置文件,将监控视频的URL代理到网络A上的监控服务器。
sudo nano /etc/nginx/nginx.conf
添加或修改配置:
nginx
http {
server {
listen 80;
server_name NET-A-IP;
location /video {
proxy_pass http://network_a_ip:port/video;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
其中:
- NET-A-IP 是网络主机的IP地址。
- network_a_ip 是网络A上的监控服务器的IP地址。
- port 是监控服务器提供的视频流端口。
3. 重启Nginx
使用如下命令:
sudo systemctl restart nginx
4. 访问视频流
网络B和网络C内的用户可以通过访问网络主机的URL来查看监控视频。例如:
http://NET-A-IP/video
(二)方法2:使用反向代理
1. 安装反向代理服务器
你可以使用HAProxy或Nginx作为反向代理服务器。
安装HAProxy:
sudo yum install haproxy CentOS/RHEL
sudo apt-get install haproxy Debian/Ubuntu
2. 配置HAProxy
编辑HAProxy配置文件,将监控视频的请求代理到网络A上的监控服务器。
sudo nano /etc/haproxy/haproxy.cfg
添加或修改配置:
haproxy
frontend http_front
bind :80
default_backend video_backend
backend video_backend
server video_server network_a_ip:port
其中:
- network_a_ip 是网络A上的监控服务器的IP地址。
- port 是监控服务器提供的视频流端口。
3. 重启HAProxy
sudo systemctl restart haproxy
4. 访问视频流
网络B和网络C内的用户可以通过访问网络主机的URL来查看监控视频。例如:
http://NET-A-IP
(三)方法3:使用iptables进行端口转发
1. 配置iptables
使用iptables将网络B和网络C的请求转发到网络A上的监控服务器。
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination network_a_ip:port
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
其中:
- 8080 是网络主机上监听的端口。
- network_a_ip 是网络A上的监控服务器的IP地址。
- port 是监控服务器提供的视频流端口。
2. 保存iptables规则
使用如下命令:
sudo service iptables save
3. 访问视频流
网络B和网络C内的用户可以通过访问网络主机的URL来查看监控视频。例如:
http://NET-A-IP:8080
(四)方法4:使用SSH隧道
1. 配置SSH隧道
使用SSH隧道将网络B和网络C的请求转发到网络A上的监控服务器。
ssh -L 8080:network_a_ip:port user@NET-A-IP
其中:
- 8080 是本地监听的端口。
- network_a_ip 是网络A上的监控服务器的IP地址。
- port 是监控服务器提供的视频流端口。
- user 是网络主机上的用户名。
- NET-A-IP 是网络主机的IP地址。
2. 访问视频流
网络B和网络C内的用户可以通过访问本地的URL来查看监控视频。例如:
http://localhost:8080
四、最优解决方案
以上方法都可以实现,但是需要进行复杂的配置,同时还需要专业的技术人员进行维护。
我们采用如下方案,使用一个带多网口的视频监控接入网关,可以轻松实现对摄像机视频的访问,如下图:
- 网络A、网络B和网络C完全隔离,除了一个网关设备外,没有增加任何设备。接入网关可以连通两个网络,只传输客户端需要的视频数据;
- 这个网关成本比较低(产品可以参考vidisit.cn);
- 无需添加以太网交换机等网络设备,不涉及到交换机进行vlan设置;
- 在网关上给特权用于特定的权限,能够访问特定的视频。这样网络A的这些特定客户需要看视频的时候,视频网关把摄像机的视频传给特定客户的电脑,查看实时视频和录像视频(视频回放)。
此方案能够完全满足客户的需求。
五、实际效果
通过浏览器,直接访问多网口网关的IP地址,可以看到如下效果的视频:
通过访问 http://172.16.0.20:26088 ;http://10.16.2.30:26088; 都可以实时的看到上述画面,画面实时流畅,没有任何停顿。
文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。