我有一个通常的本地(192.168.1.x)网络,其中包含多个设备和具有互联网连接的路由器。
其中一台设备是通过 WiFi 连接的 Raspberry (192.168.1.2)。它还通过具有不同 IP(LAN IP 192.168.4.1)的以太网连接到 IP 摄像机(192.168.4.2),基本上有两个网络,如下图所示。
网络摄像机具有 HTTP 实时流媒体功能(位于http://192.168.4.1),可以在 Raspberry 上访问,但显然不适用于路由器网络中的设备。
有没有办法通过Raspberry访问IP摄像头页面?例如,通过前往http://192.168.1.2来自路由器网络中的任何设备,它将以某种方式从其内部网络隧道/重定向到 IP 摄像机网页?
答案1
有很多方法可以实现这一目标。尽管考虑到网络的其余部分的情况,使用反向代理可能没有多大好处大概配置好后,它并不比其他方法难多少,提供了更多的灵活性,并且绝对应该成为任何在互联网上公开网络摄像头等设备的人的起点。
有很多优秀的 http 代理软件可供使用。我更喜欢 nginx,而不是 haproxy,而不是 apache httpd。 OTOH 如果您已经运行鱿鱼作为转发代理,它也可以完成这项工作。
nginx 配置可以很简单......
server {
listen 80;
listen [::]:80;
server_name _;
location / {
proxy_pass http://182.168.1.2/;
}
}
但如果网络上存在任何不友好访问的可能性,您应该添加身份验证、TLS 和白名单安全 URL。
答案2
一种方法是在 RasPi 上创建到 192.168.4.0/24 网络的静态路由,另一种方法是在路由器中创建静态路由,以便路由器知道将摄像头的流量发送到哪里。
在RasPi上你可以使用命令
ip route add 192.168.4.0/24 dev eth1
...替换eth1
为通向相机的接口。
在路由器设置中的某个位置,您可以选择配置静态路由。下面的图像来自 TP-Link 路由器,您所显示的图像可能看起来有点不同,但具有相同的元素。
您也可以将 192.168.4.1 设置为目的地。此后,内部网络中的设备只需访问即可访问摄像机http://192.168.4.1。
如果路由器上没有静态路由,将会发生以下情况:
- 客户端尝试访问 192.168.4.1
- 因为它位于不同的网络中,所以它会将数据包发送到其网关,即您的路由器
- 路由器不知道如何到达192.168.4.0/24网络,因此它会向其他路由器发送消息来询问它们是否知道路由
- 没有其他路由器响应,因此它将丢弃数据包
或者,您可以为 RasPi 配置转发规则,指示其将所有流量转发到 192.168.1.2 端口 80 到 192.168.4.1。然后,您的内部客户端将能够通过浏览 192.168.1.2 来访问摄像机。