雙跳 VPN - 只能看到 LAN 流量,沒有網際網路
TLDR: 樹莓派上的雙跳 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)ssh,查看共享文件等我在本地網路上位於 192.168.. 的所有設備和 (2) 都通過 VPN 供應商建立了網際網路隧道。第一個案例執行良好。
我已經按照指南嘗試過:
ip rule add from 192.168.1.166 lookup 101 ip route add default via 192.168.1.1 table 101
之後,我失去了通過
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
TL;DR您不需要 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 通過 VPN 到 Internet 的所有連接。raspberrypi2
第一個案例(LAN 訪問): 對於第一個案例,您可以(實際上是)仍然使用 NAT 方法,但方法 2 也可以適用。要應用它,如果
raspberrypi2
是 LAN 的預設網關,您可以簡單地刪除 NAT 規則,一切都會正常工作。如果
rasperrypi2
不是LAN的預設網關,您仍然可以通過以下方式應用方法 2:
- 在目前區域網路預設網關中配置靜態路由
- 或者,在區域網路的每台主機上配置一條靜態路由
raspberrypi2
(顯然,兩者都指向10.8.0.0/24
子網)。