如何配置OpenVPN服务器路由,使VPN客户端能ping通VPN内路由器连接的外部摄像头
看起来你已经搞定了VPN客户端之间的互通(比如10.8.0.2能ping通10.8.0.3),现在就差打通客户端到摄像头网段的最后一步了,别担心,这其实就是路由配置的事儿,我给你一步步捋清楚:
先理清楚核心逻辑
你的摄像头在路由器背后的两个网段(192.100.0.0/16、192.101.0.0/16),而路由器本身在VPN网段里的地址是10.8.0.3。所以关键是要让VPN服务器知道这两个摄像头网段的流量要转发给10.8.0.3,同时让VPN客户端知道要去这两个网段的流量得发往VPN服务器。
步骤1:在OpenVPN服务器上添加静态路由
你之前写的路由目标地址不对,应该把流量导向路由器的VPN内地址(10.8.0.3),而不是VPN服务器自己(10.8.0.1)。执行以下两条命令:
route add -net 192.100.0.0 netmask 255.255.0.0 gw 10.8.0.3 route add -net 192.101.0.0 netmask 255.255.0.0 gw 10.8.0.3
如果要让这些路由重启后依然生效,可以把这两行添加到服务器的开机自启脚本(比如/etc/rc.local)里,或者用你的系统自带的静态路由配置工具(比如ip route的永久配置)。
步骤2:让OpenVPN服务器给客户端推送路由
光服务器知道路由还不够,客户端也得知道要去摄像头网段的流量该往哪发。所以要修改OpenVPN服务器的配置文件(通常是/etc/openvpn/server.conf),添加以下两行:
push "route 192.100.0.0 255.255.0.0" push "route 192.101.0.0 255.255.0.0"
添加完后重启OpenVPN服务,这样客户端重新连接VPN时,就会自动把这两条路由加到自己的本地路由表中。
步骤3:确保VPN服务器开启了IP转发
这是很容易忽略的关键点——如果服务器的IP转发没开,就算加了路由,流量也不会被转发。执行以下命令临时开启:
echo 1 > /proc/sys/net/ipv4/ip_forward
要让这个设置永久生效,编辑/etc/sysctl.conf文件,找到net.ipv4.ip_forward这一行,把注释去掉并设置为1:
net.ipv4.ip_forward = 1
然后执行sysctl -p让配置立即生效。
额外验证要点
- 先在VPN服务器上尝试ping摄像头(比如
ping 192.100.0.2),如果能通,说明服务器到摄像头的路由链路没问题; - 如果服务器能ping通但客户端不行,检查客户端的路由表(Windows用
route print,Linux/macOS用ip route),看是否已经收到了服务器推送的两条路由; - 还要确认路由器本身配置了回包路由——也就是路由器知道要把来自10.8.0.0/24网段的流量发回VPN服务器(10.8.0.1),不然客户端发的ping包能到摄像头,但摄像头的回应包找不到回客户端的路。
备注:内容来源于stack exchange,提问作者obchardon

