VPN de salto duplo - só pode ver o tráfego da LAN, sem internet

VPN de salto duplo - só pode ver o tráfego da LAN, sem internet

TLDR: VPN de salto duplo no Raspberry Pi. Pode fazer ssh e ver compartilhamentos de samba de dispositivos locais por VPN. Não é possível obter tráfego de Internet por VPN. Não tenho certeza de como proceder.

Minha configuração é um único Raspberry pi rodando openvpne pi-hole. Eu tenho duas instâncias do openvpn:

  • server.conf- Host VPN encerrado tun-incoming. Isso está funcionando, consigo ver solicitações de DNS da VPN em arquivos pi-hole.
  • outgoing.conf- conectar-se a um fornecedor de VPN em tun-outgoing. Trabalhando localmente. Consigo ver um novo IP.

Estou seguindo principalmente este guia:https://www.comparitech.com/blog/vpn-privacy/raspberry-pi-vpn/ A ideia é que eu possa (1) fazer ssh, ver arquivos compartilhados, etc. em todos os meus dispositivos em 192.168.*.* na minha rede local e (2) ter um túnel de Internet através do fornecedor de VPN. O primeiro caso de uso está funcionando bem.

Eu tentei isso de acordo com o guia:

ip rule add from 192.168.1.166 lookup 101
ip route add default via 192.168.1.1 table 101

Depois, perdi a capacidade de conectar SSH via ipv4.

Abaixo estão alguns resultados relevantes:

lista de rotas 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

lista de regras de 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

Responder1

DRVocê não precisa de uma regra de IP. Tudo que você precisa aqui é outra regra NAT para pacotes que saem da tun-outgoinginterface.

Explicação: O que está acontecendo é que o roteador do provedor VPN (por exemplo 10.1.11.5 dev tun-outgoing) não sabe como retornar 10.8.0.0/24, então os pacotes são descartados/perdidos.

Isso se deve ao fato de que a rede 10.8.0.0/24é conhecida (ou seja, está na tabela de roteamento) pelo raspberrypi2roteador, mas é desconhecida por qualquer outro host que não esteja na mesma VPN (como hosts LAN e o provedor VPN externo).

Olhando apenas para o segundo caso de uso que você mencionou (usar o provedor VPN para navegar na internet),em teoriavocê tem duas maneiras de resolver isso:

  1. Configurando (estaticamente/automaticamente) uma rota em cada host que você precisa alcançar de dentro da sua VPN ( tun-incoming)
  2. Ou mascarando o IP usando NAT

O primeiro método é obviamentenãoviável na presença de atores externos (o provedor VPN), então você pode resolver esse problema apenas criando uma regra NAT como esta:

-A POSTROUTING -s 10.8.0.0/24 -o tun-outgoing -j MASQUERADE

Esta regra irá mascarar todas as conexões da sua VPN 10.8.0.0/24com a Internet via VPN usando o endereço IP (de origem) do raspberrypi2, que é conhecido pelo provedor de VPN.

Primeiro caso de uso (acesso LAN): Para o primeiro caso de uso, você ainda pode (e realmente usa) usar o método NAT, mas o método 2 também pode ser aplicável. Para aplicá-lo, se raspberrypi2for o gateway padrão da LAN, basta remover a regra NAT e tudo funcionará corretamente.

Se rasperrypi2énãoo gateway padrão da LAN, você ainda pode aplicar o método 2:

  • configurando uma rota estática no gateway padrão atual da LAN
  • ou, configurando uma rota estática emcadaanfitrião da LAN

(ambos, obviamente, apontando raspberrypi2apenas para a 10.8.0.0/24sub-rede).

informação relacionada