ダブルホップVPN - LANトラフィックのみ表示可能、インターネットは表示不可

ダブルホップVPN - LANトラフィックのみ表示可能、インターネットは表示不可

要約: Raspberry Pi 上のダブルホップ VPN。VPN 経由でローカル デバイスの ssh を実行して samba 共有を表示できます。VPN 経由でインターネット トラフィックを取得できません。どのように進めればよいかわかりません。

openvpn私のセットアップは、 とを実行している単一の Raspberry Pi ですpi-hole。openvpn のインスタンスが 2 つあります。

  • 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

ifconfig

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 プロバイダーなど)には認識されていないという事実によるものです。

あなたが言及した2番目のユースケース(VPNプロバイダーを使用してインターネットを閲覧する)だけを見ると、理論的にはこれを解決するには 2 つの方法があります。

  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 からインターネットへのすべての接続を VPN 経由でマスクします。raspberrypi2

最初のユースケース(LAN アクセス): 最初の使用例では、NAT 方式を引き続き使用できます (実際に使用しています) が、方式 2 も適用できます。これを適用するには、 がraspberrypi2LAN のデフォルト ゲートウェイである場合は、NAT ルールを削除するだけで、すべてが正常に動作します。

もしrasperrypi2ないLAN のデフォルト ゲートウェイの場合でも、次の方法で方法 2 を適用できます。

  • LANの現在のデフォルトゲートウェイに静的ルートを設定する
  • または、静的ルートを設定するそれぞれLANのホスト

(どちらも、明らかにサブネットraspberrypi2のみを指しています10.8.0.0/24)。

関連情報