我有一个带有 raspbian 操作系统的树莓派,它连接到 openvpn 服务器。 Openvpn 服务器具有公共 IP 并运行 Ubuntu。如果我以这种方式在VPN服务器上启用端口转发(XXX.XXX.XXX.XXX是公共IP),我可以通过VPN服务器的公共IP地址访问在树莓派上运行的Web应用程序:
iptables -t nat -A PREROUTING -d XXX.XXX.XXX.XXX -p tcp --dport 8765 -j DNAT --to-dest 10.8.0.6:8765
但我还想连接一个与树莓派位于同一 LAN 上的 IP 摄像机。不幸的是,我无法在 IP 摄像机上运行 openvpn 客户端,因此 IP 摄像机只有本地 IP 192.168.1.110 并且侦听端口 80。是否可以将公共 IP 上的端口转发到树莓派 openvpn 客户端,然后转发进一步到本地局域网上的网络摄像机吗?
答案1
尝试在树莓派上执行以下操作:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -I PREROUTING -p tcp --dport 8088 -j DNAT --to <cameraip>:<camera port>
# iptables -t nat -I POSTROUTING -s <cameraip>/255.255.255.0 -j MASQUERADE
然后以与访问 pi 上的应用程序相同的方式访问相机,但使用端口 8088 而不是 8765。祝你好运。
答案2
另一种解决方案,无需在您的计算机上启用 IP 转发。
- 将端口从 OpenVPN 服务器转发到 Raspberry,
iptables -t nat -A PREROUTING \
-d XXX.XXX.XXX.XXX -p tcp --dport 8888 \
-j DNAT --to-dest 10.8.0.6:8888
- 在你的 Raspberry 上,使用 socat 之类的东西将传入连接转发到你的相机
socat TCP-LISTEN:8888,fork TCP:192.168.1.110:80
这样做的好处是您无需在计算机上启用 IP 转发,这可能会产生副作用。通过在本地计算机上启用 IP 转发(无需添加防火墙规则),您可能允许 LAN 上的计算机攻击 OpenVPN 服务器网络上的计算机(假设 OpenVPN 服务器允许这样做)。