Назад | Перейти на главную страницу

Только маршрутизировать WLAN через VPN

Я пытаюсь настроить свой RP3 таким образом, чтобы соединения WiFi маршрутизировались через L2TP VPN. У меня работает VPN, и со следующими настройками весь трафик маршрутизируется через VPN-соединение (ppp0 - это устройство туннеля VPN):

route add VPN_PUBLIC_IP gw 192.168.1.1
route add default dev ppp0

Однако, как следует из названия, я хочу, чтобы ТОЛЬКО трафик WLAN маршрутизировался через VPN-соединение. Как мне этого добиться? Ниже вы найдете некоторые другие настройки, которые могут помочь.

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

маршрут:

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-маршрут:

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 

Любые предложения будут высоко ценится!

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

Различный набор маршрутов

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

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: from all lookup default отсутствует по умолчанию в 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