Я пытаюсь настроить свой 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