Only route WLAN over VPN

I am trying to set up my RP3 in such a way that WiFi connections are routed over an L2TP VPN. I've got the VPN working and with the following settings all traffic is routed over the VPN connection (ppp0 is the VPN tunnel device):

route add VPN_PUBLIC_IP gw 192.168.1.1
route add default dev ppp0

However, as my title suggests, I want ONLY the WLAN traffic to be routed over the VPN connection. How do I achieve this? Below you will find some other settings that might help.

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

route:

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

ip route:

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 

Any suggestions would be much appreciated!

1
задан 28 September 2017 в 15:44
1 ответ

Вы можете настройте отдельную таблицу маршрутизации и выберите ее с помощью «правила»:

Другой набор маршрутов

Одноразовая настройка: выберите имя для таблицы маршрутизации и присвойте уникальное имя

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

(Если нет /etc/iproute2/rt_tables.d/ каталог, который необходимо добавить в / etc / iproute2 / rt_tables )

при каждой загрузке (например, как pre-up ] для интерфейса 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

Если вы хотите подключиться к другим сетям из wlan0, вам необходимо клонировать маршруты в эту таблицу (например, для eth0 : ip route add 192.168.1.0/24 dev eth0 table wlanvpn

Теперь вывод ip rule show должен выглядеть следующим образом:

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

Для IPv6 все команды ip rule и ip route необходимо продублировать с помощью ip -6 ... ( 32767: из всех поисков по умолчанию по умолчанию отсутствует в ip -6 rule ).

Различные маршруты по умолчанию

В качестве альтернативы вы можете указать только разные маршруты по умолчанию (так что "внутренние" сети с ручной маршрутизацией) по-прежнему доступны из VPN без необходимости клонирования маршрутов:

Одноразовая настройка: выберите имя для таблицы маршрутизации и присвойте уникальное имя

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

При каждой загрузке ( например, как pre-up для интерфейса 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

Теперь вывод ip rule show должен выглядеть так:

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
0
ответ дан 4 December 2019 в 04:34

Теги

Похожие вопросы