我有一个氮网络V想法右ecorder通过以太网直接连接到树莓派,树莓派通过wlan0
.我想通过树莓派上的 VPN 连接路由来自 NVR 的所有流量。
以下是我启动 VPN 的方法:
openvpn --config /home/pi/my_conf.conf --pull-filter ignore redirect-gateway --route-noexec
我忽略了服务器通过这些命令推送的路由我在开放VPN教程上找到了。经检查,我发现tun0
在连接到 VPN 后创建了一个设备。
因此,为了将流量从 NVR 路由到 VPN,我需要为eth0
树莓派的接口提供 NVR 使用范围内的静态 IP。我是通过以下方式做到的/etc/dhcpcd.conf
:
interface eth0
static ip_address=192.168.1.1/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
我的树莓派wlan0
有网关192.168.0.1
,所以不存在冲突。现在我已经有了一个位于 NVR 范围内的 eth 接口的 IP 地址,并且我已经连接到了 VPN 服务器,我需要做的就是为 NVR 所在的 IP 地址tun0
添加一条路由tun0
要去访问。由于我想访问 192.168.0/24 范围内的一些 IP 摄像机,因此我对路由表进行了如下操作:
pi@raspberrypi:~ $ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 304 0 0 wlan0
192.168.0.0 0.0.0.0 255.255.255.0 U 304 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.255.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
您可以看到该范围内的所有内容192.168.1.0/24
都会通过,tun0
因为它具有 metric 0
。
尽管我也在dnsmasq
上运行eth0
,但我也在 NVR 上使用静态 IP 地址,即192.168.1.9
。
显然我无法访问 NVR 中的任何摄像机。我尝试将 NVR 上的连接添加到192.168.1.189
摄像机。我尝试运行tcpdump
,eth0
这主要是我看到的:
17:10:46.673062 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.189 tell 192.168.1.9, length 46
NVR ( 192.168.1.9
) 正在尝试查找是谁192.168.1.189
,但没有响应。我猜,什么都没有被路由。我还尝试 ping192.168.1.189
树莓派,看看它是否有效。我第一次尝试时就成功了。几分钟后,我无法再 ping 通它,我不知道为什么。但Ping192.168.1.1
总是有效。
更新:
我有点明白我遇到的问题了。由于 NVR 位于192.168.1.0/24
子网上并尝试访问同一子网上的摄像机,因此其 IP 数据包不会发送到网关(树莓派)。相反,它会尝试通过发送 ARP 请求来查找192.168.1.189
(摄像机)在哪里,就像我在 tcpdump 中看到的那样。
为了解决这个问题,我将NVR的子网更改为192.168.2.0/24
并将地址赋予树莓派的接口192.168.2.1
。eth0
我现在可以看到 NVR 发送到摄像机和一些亚马逊服务器等的每个数据包。然而,没有任何回应。 NVR 只发送数据包,但不接收任何数据包。我已经检查过,到达的路线tun0
没有问题,因此数据包应该通过它。但是数据包没有返回。
更新:
我没有手动添加路由,而是将以下内容添加到客户端中打开的 VPN 配置文件中:
route 192.168.1.0 255.255.255.0
route-metric 0
route-nopull
就在下面client
。连接 VPN 后,我现在可以在路由表中看到此路由。我也可以从树莓派 ping 到它,它可以工作。但是看起来NVR仍然只发送数据包,并没有收到任何信息
重要的:如果我运行,tcpdump -vvv -i eth0
我会看到很多发往192.168.1.189
我的相机的数据包。他们应该去,tun0
因为有一条带有度量的路线0
可以让他们通过它。如果我跑步,tcpdump -vvv -i tun0
即使我跑了几分钟,我也什么也看不到。所以事情不会通过那里进行。但是,如果我ping 192.168.1.189
在树莓派内部运行(通过 ssh),我可以在 tcpdump 中看到所有 ping 数据包tun0
,这证实了该路由有效。但它不适用于来自以太网的数据包。