总结: 树莓派上的双跳 VPN。可以通过 VPN ssh 访问本地设备并查看 samba 共享。无法通过 VPN 获取互联网流量。不确定如何继续。
我的设置是一台运行的 Raspberry pi openvpn
。pi-hole
我有两个 openvpn 实例:
server.conf
- VPN 主机已连接tun-incoming
。一切正常,我能够看到 VPN DNS 请求pi-hole
。outgoing.conf
- 通过 连接到 VPN 供应商tun-outgoing
。本地工作。我能够看到新的 IP。
我主要遵循这个指南:https://www.comparitech.com/blog/vpn-privacy/raspberry-pi-vpn/ 我的想法是,我应该能够 (1) 在我的本地网络上的 192.168.*.* 上的所有设备上使用 ssh、查看共享文件等,以及 (2) 通过 VPN 供应商建立互联网隧道。第一个用例运行良好。
我按照指南尝试过这个:
ip rule add from 192.168.1.166 lookup 101
ip route add default via 192.168.1.1 table 101
之后,我失去了通过 SSH 连接的能力ipv4
。
以下是一些相关输出:
IP 路由列表
pi@raspberrypi2:~ $ ip route list
0.0.0.0/1 via 10.1.11.5 dev tun-outgoing
default via 192.168.1.1 dev eth0 src 192.168.1.166 metric 202
10.1.11.1 via 10.1.11.5 dev tun-outgoing
10.1.11.5 dev tun-outgoing proto kernel scope link src 10.1.11.6
10.8.0.0/24 dev tun-incoming proto kernel scope link src 10.8.0.1
128.0.0.0/1 via 10.1.11.5 dev tun-outgoing
192.168.1.0/24 dev eth0 proto dhcp scope link src 192.168.1.166 metric 202
199.229.249.184 via 192.168.1.1 dev eth0
IP 规则列表
pi@raspberrypi2:~ $ ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
iptables -t nat -S
pi@raspberrypi2:~ $ sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -m comment --comment openvpn-nat-rule -j MASQUERADE
是否配置
pi@raspberrypi2:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.166 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 2604:2000:6aa0:c0d0::307 prefixlen 128 scopeid 0x0<global>
inet6 fe80::7a09:12ee:27ff:f6fc prefixlen 64 scopeid 0x20<link>
inet6 fd38:2d6b:a55b::111 prefixlen 128 scopeid 0x0<global>
inet6 fd38:2d6b:a55b::307 prefixlen 128 scopeid 0x0<global>
inet6 fd38:2d6b:a55b:0:3ed3:ce3b:88db:5070 prefixlen 64 scopeid 0x0<global>
inet6 2604:2000:6aa0:c0d0:70cf:5710:52e:373e prefixlen 64 scopeid 0x0<global>
ether dc:a6:32:65:73:5d txqueuelen 1000 (Ethernet)
RX packets 48570 bytes 8636380 (8.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 55906 bytes 34181320 (32.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 331 bytes 27074 (26.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 331 bytes 27074 (26.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tun-incoming: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.8.0.1 netmask 255.255.255.0 destination 10.8.0.1
inet6 fe80::a8c2:d1fa:b798:f945 prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9 bytes 432 (432.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tun-outgoing: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.1.11.6 netmask 255.255.255.255 destination 10.1.11.5
inet6 fe80::9fe5:8e1:b1c0:86c5 prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 24200 bytes 3403386 (3.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 30214 bytes 29464427 (28.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether dc:a6:32:65:73:5e txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
答案1
总结您不需要 IP 规则。这里您需要的只是另一条用于出tun-outgoing
接口数据包的 NAT 规则。
解释:
发生的情况是 VPN 提供商路由器(例如10.1.11.5 dev tun-outgoing
)不知道如何返回10.8.0.0/24
,因此数据包被丢弃/丢失。
这是因为路由器10.8.0.0/24
知道该网络(意味着它在路由表中)raspberrypi2
,但不在同一 VPN 中的任何其他主机(例如 LAN 主机和外部 VPN 提供商)不知道该网络。
只看你提到的第二个用例(使用 VPN 提供商上网),理论上有两种方法可以解决这个问题:
- 通过(静态/自动)配置您需要从 VPN 内部访问的每个主机的路由(
tun-incoming
) - 或者,使用 NAT 屏蔽 IP
第一种方法显然不是在存在外部参与者(VPN 提供商)的情况下是可行的,因此您只能通过创建如下 NAT 规则来解决此问题:
-A POSTROUTING -s 10.8.0.0/24 -o tun-outgoing -j MASQUERADE
此规则将使用VPN 提供商所知的10.8.0.0/24
(源) IP 地址屏蔽从您的 VPN 到互联网的所有连接。raspberrypi2
第一个用例(LAN 访问):
对于第一种用例,您仍然可以(实际上)使用 NAT 方法,但方法 2 也适用。要应用它,如果raspberrypi2
是 LAN 的默认网关,您只需删除 NAT 规则,一切就会正常工作。
如果rasperrypi2
是不是LAN 的默认网关,您仍然可以通过以下方式应用方法 2:
- 在 LAN 的当前默认网关中配置静态路由
- 或者,在每个局域网主机
(显然,两者raspberrypi2
都只指向10.8.0.0/24
子网)。