#开发环境和应用场景
###开发环境
操作系统:Ubuntu Server 16.04 LTS
VPN服务器:pptpd
web服务器:Apache2
4g路由器:山东有人科技的4g路由器G781
摄像头:海康威视 IPC
###应用场景
4g路由器下挂载了海康的网络摄像头,同时4g路由器连接了VPN服务器,海康给了web页面调用摄像头视频的js接口,需要实现用户打开访问web服务器,登录进去之后能看到监控画面。
#具体实现
中心服务器购买的是腾讯云的学生价10块一个月的云服务器,只有1M带宽,具有公网地址。架设VPN服务器时,pptpd里设置了4g路由器连上来时拥有固定的ip地址192.168.1.10,摄像头的ip地址是192.168.0.64,监控画面的端口是80。
先在有人G781盒子里这样设置:
由于还没去查有没有udp包,所以就一起设置了,这样实现的是如果访问4g路由器在VPN网络里的ip地址 192.168.1.10的600端口的话,是直接指向到 下面挂载的192.168.0.64:80的海康摄像头的。第一步完成。
然后在云服务器这里的设置:
# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 900 -j DNAT --to-destination 192.168.1.10:600
# iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp -m tcp --dport 600 -j SNAT --to-source 192.168.1.1
上面这两行代码实现的是:
- 在进入中心服务器之前,将目的地址是 服务器公网地址:900 的tcp包替换为目的地址为 192.168.1.10:600;
- 在流出中心服务器之前,将目的地址是192.168.1.10:600的tcp包的源地址替换为 192.168.1.1,也就是VPN服务器的网关,表明是从VPN服务器发出的。
其实两条相当于分别设置了数据包在进入服务器和流出服务器的改变,也从物理上表明了外网和内网的隔绝关系,对于外网来说,能看到的只是公网服务器;对于VPN内网来说,能看到的只有VPN服务器。但是作为内外网节点的云服务器需要做好转发这个角色。
以上两条只设置了外网到摄像头的路径的打通。注意方向。
这样一来,凡是对于服务器 900 端口的访问都将被指向到VPN内网里192.168.1.10的600端口,结合上面有人盒子的设置,就最终指向到4g路由器下的192.168.0.64:80的摄像头。这样,在前端调用海康摄像头的js代码的登录项中只要写入中心服务器ip地址和900端口,就可以进行摄像头的访问了。
效果如下: