雙跳 VPN - 只能看到 LAN 流量,看不到互聯網

雙跳 VPN - 只能看到 LAN 流量,看不到互聯網

總而言之: 樹莓派上的雙跳 VPN。可以透過 VPN ssh 存取並查看本地設備的 samba 共享。無法透過 VPN 取得網路流量。不知道如何繼續。

我的設定是一個運行的 Raspberry piopenvpnpi-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 提供者上網),理論上你有兩種方法可以解決這個問題:

  1. 透過在您需要從 VPN 內部存取的每個主機中設定(靜態/自動)路由 ( tun-incoming)
  2. 或者,透過使用 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不是區域網路的預設網關,仍然可以應用方法2:

  • 在區域網路目前預設閘道下設定靜態路由
  • 或者,配置靜態路由每個區域網路主機

(顯然,兩者都raspberrypi2僅指向10.8.0.0/24子網路)。

相關內容