我已经在树莓派中设置了 OpenVpn,它运行正常,我可以从手机登录树莓派。我也在树莓派上安装了付费 VPN(Windscribe)。当我在树莓派中激活付费 VPN(windscribe)时,问题就出现了windscribe connect
。之后,我就再也无法用手机访问树莓派了。
我想要 OpenVPN(PiVPN),这样我就可以访问我的家庭网络,并且我也希望 windscribe vpn 处于活动状态,以便安全地浏览互联网。现在我有第一部分。当 windscribe 未处于活动状态时,我可以访问我的家庭网络。
我尝试了很多次使用 iptables,但都没有成功,为接口、隧道和许多组合创建了转发规则,但似乎都没有用。最后我重置了所有内容。
这是我的配置。
sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P POSTROUTING ACCEPT
-P OUTPUT ACCEPT
-A POSTROUTING -s 10.8.0.0/24 -o wlan0 -m comment --comment openvpn-nat-rule -j MASQUERADE
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
pi@raspberrypi:~ $ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT DROP
-A OUTPUT ! -o tun+ -p tcp -m tcp --dport 53 -j DROP
-A OUTPUT ! -o tun+ -p udp -m udp --dport 53 -j DROP
-A OUTPUT -d 192.168.0.0/16 -j ACCEPT
-A OUTPUT -d 10.0.0.0/8 -j ACCEPT
-A OUTPUT -d 172.16.0.0/12 -j ACCEPT
-A OUTPUT -d 104.20.26.217/32 -j ACCEPT
-A OUTPUT -d 104.20.27.217/32 -j ACCEPT
-A OUTPUT -d 172.67.17.175/32 -j ACCEPT
-A OUTPUT -d 104.21.93.29/32 -j ACCEPT
-A OUTPUT -d 172.67.203.127/32 -j ACCEPT
-A OUTPUT -d 104.21.53.216/32 -j ACCEPT
-A OUTPUT -d 172.67.219.39/32 -j ACCEPT
-A OUTPUT -d 172.67.189.40/32 -j ACCEPT
-A OUTPUT -d 104.21.65.74/32 -j ACCEPT
-A OUTPUT -o tun+ -j ACCEPT
-A OUTPUT -d 127.0.0.1/32 -j ACCEPT
-A OUTPUT -d 209.58.129.121/32 -j ACCEPT
pi@raspberrypi:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.111 netmask 255.255.255.0 broadcast 192.168.0.255
ether b8:27:eb:ec:6a:4b txqueuelen 1000 (Ethernet)
RX packets 19989 bytes 21885907 (20.8 MiB)
RX errors 160 dropped 4 overruns 0 frame 0
TX packets 11508 bytes 1206589 (1.1 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
loop txqueuelen 1000 (Local Loopback)
RX packets 618 bytes 201828 (197.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 618 bytes 201828 (197.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.8.0.1 netmask 255.255.255.0 destination 10.8.0.1
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 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tun1: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.120.138.29 netmask 255.255.254.0 destination 10.120.138.29
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 164 bytes 32755 (31.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 961 bytes 114896 (112.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether b8:27:eb:b9:3f:1e 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
pi@raspberrypi:~ $ ip route list
0.0.0.0/1 via 10.120.138.1 dev tun1
default via 192.168.0.1 dev eth0 src 192.168.0.111 metric 202
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1
10.120.138.0/23 dev tun1 proto kernel scope link src 10.120.138.29
128.0.0.0/1 via 10.120.138.1 dev tun1
192.168.0.0/24 dev eth0 proto dhcp scope link src 192.168.0.111 metric 202
209.58.129.121 via 192.168.0.1 dev eth0
pi@raspberrypi:~ $ ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
更新:我找到了这个教程,它对我帮助很大 comparitech.com/blog/vpn-privacy/raspberry-pi-vpn 。但我发现当我设置这 2 条规则时
ip rule add from 192.168.1.2 lookup 101
ip route add default via 192.168.1.1 table 101
我可以访问 vpn,但无法像以前一样使用 192.168.0.111 ping 我的 vpn 服务器,现在我必须使用 10.8.0.1。有没有什么办法可以启用 ping 192.168.0.111 的功能 – tseres 12 分钟前 删除
答案1
您的 Raspberry PI 是否在私有网络中?比如在家里使用互联网盒子?那么它就无法工作,因为您必须在私有网络中从互联网盒子添加路由到 Raspberry PI。然后将您的手机连接到公共 VPN,尝试访问您的互联网盒子的公共 IP。
如果您的手机连接到具有公共 IP 的外部 VPN,而您的 Raspberry PI 位于私有网络中,则它们无法访问自己。您要做的第一件事就是让您的 Raspberry PI 的 VPN 可通过公共网络访问。我希望这能有所帮助,连接两个不同的 VPN 非常困难,您为什么要这样做?(没有冒犯的意思,我只是好奇)
一个更简单的解决方案是获取外部 VPN 的公共 IP,然后在本地路由器上允许 ssh 或该 IP 上的任何协议重定向到您的树莓派。
答案2
我终于找到了如何让它工作的方法。感谢https://www.raspberrypi.org/forums/viewtopic.php?t=251453&sid=5d7e57949fb3cec559d5319f666f3825#p1638481
通过替换这些行
ip rule add from 192.168.1.2 lookup 101
ip route add default via 192.168.1.1 table 101
和
sudo iptables -A OUTPUT -t mangle -p tcp --sport 1194 -j MARK --set-mark 1
sudo ip rule add fwmark 1 table 101
sudo ip route add table 101 default via 192.168.1.1 dev eth0
解释:第一行标记来自端口 1194 上的 OpenVPN 服务器的所有数据包 - 如果您正在监听其他端口,则需要更改此数字。这还可以阻止默认路由接管并将 tun-incoming 直接推送到 tun-outgoing 并导致不对称路由。第二行是 IP 策略规则,规定如果数据包标记为“1”,则查找路由表 101。第三行是路由规则,使数据包从 eth0 路由回宽带路由器,再路由回移动设备。