Somente rota WLAN sobre VPN

1

Estou tentando configurar meu RP3 de maneira que as conexões WiFi sejam roteadas por uma VPN L2TP. Eu tenho a VPN funcionando e com as seguintes configurações todo o tráfego é roteado através da conexão VPN (ppp0 é o dispositivo de túnel VPN):

route add VPN_PUBLIC_IP gw 192.168.1.1
route add default dev ppp0

No entanto, como o meu título sugere, quero que apenas o tráfego de WLAN seja encaminhado através da ligação VPN. Como faço para conseguir isso? Abaixo você encontrará algumas outras configurações que podem ajudar.

ifconfig:

root@raspberrypi:/home/pi# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.110  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::966b:f8b2:31f3:89c9  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:f0:e4:76  txqueuelen 1000  (Ethernet)
        RX packets 151  bytes 13560 (13.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 132  bytes 20723 (20.2 KiB)
        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 1  (Local Loopback)
        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

ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1280
        inet 192.168.42.10  netmask 255.255.255.255  destination 192.168.42.1
        ppp  txqueuelen 3  (Point-to-Point Protocol)
        RX packets 4  bytes 70 (70.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4  bytes 64 (64.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.220.1  netmask 255.255.255.0  broadcast 192.168.220.255
        inet6 fe80::36c5:7f74:7936:c953  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:a5:b1:23  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 44  bytes 7290 (7.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

rota:

root@raspberrypi:/home/pi# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
link-local      0.0.0.0         255.255.0.0     U     303    0        0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U     202    0        0 eth0
192.168.42.1    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
192.168.220.0   0.0.0.0         255.255.255.0   U     0      0        0 wlan0

rota ip:

default via 192.168.1.1 dev eth0 src 192.168.1.110 metric 202 
169.254.0.0/16 dev wlan0 proto kernel scope link src 169.254.51.90 metric 303 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.110 metric 202 
192.168.42.1 dev ppp0 proto kernel scope link src 192.168.42.10 
192.168.220.0/24 dev wlan0 proto kernel scope link src 192.168.220.1 

Qualquer sugestão seria muito apreciada!

    
por Diederik 28.09.2017 / 14:44

1 resposta

0

Você pode configurar uma tabela de roteamento separada e selecioná-la com uma "regra":

Conjunto diferente de rotas

Configuração única: escolha um nome para a tabela de roteamento e atribua um nome exclusivo

echo "1 wlanvpn" > /etc/iproute2/rt_tables.d/wlanvpn.conf

(Se não houver diretório /etc/iproute2/rt_tables.d/ , você precisa anexar a /etc/iproute2/rt_tables )

Em cada inicialização (por exemplo, como pre-up para a interface wlan0)

ip rule add iif wlan0 table wlanvpn
# in case the vpn is not up the route might not exist,
# blackhole by default with high metric
ip route replace to blackhole default table wlanvpn metric 4095
ip route replace default dev ppp0 table wlanvpn

Se você quiser acessar outras redes de wlan0, será necessário clonar as rotas para essa tabela (por exemplo, para eth0 : ip route add 192.168.1.0/24 dev eth0 table wlanvpn ).

A saída de ip rule show deve agora ser:

0:      from all lookup local
32765:  from all iif wlan0 lookup wlanvpn
32766:  from all lookup main
32767:  from all lookup default

Para o IPv6, todos os comandos ip rule e ip route precisam ser duplicados com ip -6 ... ( 32767: from all lookup default não está presente por padrão em ip -6 rule ).

Rotas padrão diferentes

Como alternativa, você poderia especificar apenas rotas padrão diferentes (para que as redes "internas" roteadas manualmente) ainda sejam acessadas pela VPN sem precisar clonar as rotas:

Configuração única: escolha um nome para a tabela de roteamento e atribua um nome exclusivo

echo "10 default-vpn" > /etc/iproute2/rt_tables.d/default-routes.conf
echo "11 default-normal" >> /etc/iproute2/rt_tables.d/default-routes.conf

Em cada inicialização (por exemplo, como pre-up para a interface wlan0)

ip rule add pref 32768 iif wlan0 lookup default-vpn
ip rule add pref 32769 lookup default-normal
ip route replace to blackhole default table default-vpn metric 4095
ip route replace default dev ppp0 table default-vpn
# move your normal default route (from table main) to table default-normal, e.g:
ip route replace default via 192.168.0.1 table default-normal
ip route delete default table main

A saída de ip rule show deve agora ser:

0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
32768:  from all iif wlan0 lookup default-vpn
32769:  from all lookup default-normal
    
por 29.09.2017 / 10:22