我有两个通过 VPN 连接的网络。我家里的 NAS 上运行着一个 OpenVPN 服务器。在我的网络之外,我有一个 Raspberry Pi (RPi),它通过 VPN 连接到我的本地网络。RPi 使用 WiFi (wlan1) 连接到互联网。一切正常。
现在我想使用以太网 (eth0) 将摄像头连接到 RPi,并将流直接存储在 NAS 上。我在 Rpi 上为 eth0 创建了一个新的网络配置文件,并在那里设置了“共享到其他计算机”。RPi 和摄像头之间的网络是 10.42.0.0/24。摄像头可以从 RPi 访问,一切正常。当我尝试从 NAS(VPN 服务器正在运行且录制将在其中运行)ping (10.42.0.231) 摄像头时,摄像头不可用。
NAS 上的接口和路由表:
$ip a
5: ovs_eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb state UP group default qlen 1
link/ether 00:11:32:aa:84:68 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.142/24 brd 192.168.1.255 scope global ovs_eth0
valid_lft forever preferred_lft forever
6: tun1000: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 169.254.124.128/21 scope global tun1000
valid_lft forever preferred_lft forever
7: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
$route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default router.lan 0.0.0.0 UG 0 0 0 ovs_eth0
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
10.8.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
169.254.120.0 0.0.0.0 255.255.248.0 U 0 0 0 tun1000
169.254.120.0 169.254.120.1 255.255.248.0 UG 0 0 0 tun1000
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ovs_eth0
$ip route
default via 192.168.1.1 dev ovs_eth0 src 192.168.1.142
10.8.0.0/24 via 10.8.0.2 dev tun0
10.8.0.2 dev tun0 proto kernel scope link src 10.8.0.1
169.254.120.0/21 dev tun1000 proto kernel scope link src 169.254.124.128
169.254.120.0/21 via 169.254.120.1 dev tun1000
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.1.0/24 dev ovs_eth0 proto kernel scope link src 192.168.1.142
RPi 上的接口和路由表:
$ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:27:eb:9c:d9:0c brd ff:ff:ff:ff:ff:ff
inet 10.42.0.1/24 brd 10.42.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
4: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 98:de:d0:05:8d:4a brd ff:ff:ff:ff:ff:ff
inet 192.168.220.34/24 brd 192.168.220.255 scope global dynamic noprefixroute wlan1
valid_lft 3448sec preferred_lft 3448sec
6: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.8.0.10 peer 10.8.0.9/32 scope global tun0
valid_lft forever preferred_lft forever
$route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.220.15 0.0.0.0 UG 600 0 0 wlan1
10.8.0.0 10.8.0.9 255.255.255.0 UG 0 0 0 tun0
10.8.0.1 10.8.0.9 255.255.255.255 UGH 0 0 0 tun0
10.8.0.9 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.42.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
192.168.1.0 10.8.0.9 255.255.255.0 UG 0 0 0 tun0
192.168.220.0 0.0.0.0 255.255.255.0 U 600 0 0 wlan1
$ip route
default via 192.168.220.15 dev wlan1 proto dhcp src 192.168.220.34 metric 600
10.8.0.0/24 via 10.8.0.9 dev tun0
10.8.0.1 via 10.8.0.9 dev tun0
10.8.0.9 dev tun0 proto kernel scope link src 10.8.0.10
10.42.0.0/24 dev eth0 proto kernel scope link src 10.42.0.1 metric 100
192.168.1.0/24 via 10.8.0.9 dev tun0
192.168.220.0/24 dev wlan1 proto kernel scope link src 192.168.220.34 metric 600
在我看来,只需向 NAS 添加静态路由就足够了,但这对我没有帮助,我的输入中是否存在错误,还是我需要配置其他内容?感谢您的帮助。
答案1
你需要至少以下任一项:
- RPi 上的 DNAT (又名端口转发)
iroute
OpenVPN 服务器上 RPi 的客户端配置目录 (ccd) 文件中
如果您选择 DNAT,则您的 NAS 上不需要任何额外的路由,因为必要的路由(10.8.0.0/24
如您所见,的路由)已经在服务器启动时由 OpenVPN 添加了。
要设置 DNAT,您可能应该运行以下命令:
iptables -t nat -A PREROUTING -i tun0 -p tcp_or_udp --dport some_port -j DNAT --to-destination 10.42.0.231
10.8.0.10
如果您选择 DNAT,您将使用 RPi 的 VPN IP()访问相机。
如果选择iroute
,则同时需要在 NAS 上添加相应的路由(相同的目的地和网络掩码/前缀长度)。例如:
ip route add 10.42.0.231 dev tun0
路由用于将相应的流量路由到隧道,而 是iroute
为了让 OpenVPN 服务器知道流量应该发往哪个客户端。默认情况下(即没有任何iroute
),它只知道如果目的地是 VPN 客户端的地址,流量应该发往哪里(这就是为什么 DNAT 可以作为替代方案)。
iroute
有关ccd(文件)的详细信息,请参阅 OpenVPN 手册。
对于这两种选择,您都需要确保相机的默认网关(更准确地说,用于目的地为 的流量的网关10.8.0.1
)是10.42.0.1
。如果您无法在相机上使用此类网关进行此类路由,则应在 RPi 上设置源 NAT。例如:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
此外,这两种选择都需要在 RPi 上启用(sysctl)并允许(防火墙)IP 转发。