openWRT, policy base routing не работает для локальных адресов
Здравствуйте!
Помогите, пожалуйста, разобраться с конфигурацией pbr. Марщрутизатор под OpenWrt (Chaos Calmer 15.05.1) подключен к Интернет по 4G с серым ip. В lan сегменте (192.168.52.0/24) есть несколько устройств с tcp сервисами (80, 443, 22), для их публикации в Интернет поднят vpn канал (pptp) к vpn серверу c белым статическим ip. На этом vpn сервере есть свой lan сегмент 192.168.89.0/24 и на этом же сервере опубликованы сервисы из 192.168.52.0/24, сети 192.168.89.0/24 и 192.168.52.0/24 марщрутизируются по статике.
На openWRT по ряду причин dgw оставлен на br-wan (т.е. по 4G), поэтому при установлении соединения из Интернет к lan сервисам (пакеты приходят на интерфес pptp-vpn) нужно, обеспечить маршрутизаци через vpn интерфейс, а не через dgw. Прописывать статические маршруты к таким источникам соединений можно и работает, но по сути это плохо, т.к. фиксируем - с каких интернет ip возможно обращение на сервисы. Конфигурирую маркировку пакетов/соединений и маршрутизацию по правилам, собственно конфигурация:
root@OpenWrt:/#ifconfig
br-lan Link encap:Ethetnet HWaddr 00:0C:29:FD:63:B2
inet addr:192.168.52.1 Bcast:192.168.52.255 Mask 255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
br-wan Link encap:Ethetnet HWaddr 00:0C:29:FD:63:BC
inet addr:172.20.95.128 Bcast:172.20.255.255 Mask 255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth0 Link encap:Ethetnet HWaddr 00:0C:29:FD:63:B2
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth1 Link encap:Ethetnet HWaddr 00:0C:29:FD:63:BC
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
pptp-vpn Link encap:Poiunt-to-Point Protocol
inet addr:192.168.89.2 P-t-P:192.168.89.1 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1420 Metric:1
root@OpenWrt:/#cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
100 vpntbl
root@OpenWrt:/ip route show table main
default via 172.20.100.7 dev br-wan proto static src 172.20.95.128
84.115.18.248 via 172.20.100.7 dev br-wan proto static
192.168.52.0/24 dev br-lan proto kernel scope link src 192.168.52.1
192.168.89.0/24 dev pptp-vpn proto static scope link
192.168.89.1 dev pptp-vpn proto kernel scope link src 192.168.89.2
root@OpenWrt:/ip route show table vpntbl
default dev pptp-vpn scope link
192.168.52.0/24 dev br-lan proto kernel scope link src 192.168.52.1
192.168.89.0/24 dev pptp-vpn scope link
root@OpenWrt:/#ip rule show
0: from all lookup 128
0: from all fwmark 0x3 lookup vpntbl
1: from all lookup local
32766: from all lookup main
12767: from all lookup default
root@OpenWrt:/#iptabels -t mangle -nL PREROUTING
target prot opt source destination
MARK all -- pptp-vpn 0.0.0.0/0 MARK set 0x3
CONNMARK all -- pptp-vpn 0.0.0.0/0 ctstate NEW CONNMARK save
CONNMARK all -- 0.0.0.0/0 0.0.0.0/0 CONMARK restore
fwmark all -- 0.0.0.0/0 0.0.0.0/0
root@OpenWrt:/#iptabels -t mangle -nL OUTPUT
target prot opt source destination
CONNMARK all -- 0.0.0.0/0 0.0.0.0/0 CONNMARK restore
Результат этой конфигурации - работающая система для всех нужных сервисов из br-lan, но публикация самого маршрутизатора таким образом не работает.
Смотрю iptables (счётчики пакетов) и tcpdump на попытку установить соединение из Интернте к маршрутизатору. Первый пакет SYN (79.134.194.50.38944 > 192.168.52.1.80) приходит на интерфейс pptp-vpn, попадает в PREROUTING, но потом, вместо INPUT и далее локальному процессу попадает в цепочку FORWARD, далее в POSTROUTING, но далее генерируется серия ARP (Request who-has 192.168.52.1 tell 192.168.52.1) на интерфейсе br-lan. На этот запрос ответа нет, поэтому следует (172.20.95.128 > 79.134.194.50: ICMP host 192.168.52.1 unreachable) обратно на pptp-vpn, причём с неверным src адресом, должно быть 192.168.89.2 второи и третий пакет - аналогично, далее таймаут на инициализующей стороне.
root@OpenWrt:/#tcpdump -i pptp-vpn -nnnt
IP 79.134.194.50.38944 > 192.168.52.1.80: Flags [S], seq 340882049, win 8192, options [mss 1380,nop,wscale 8,nop,nop,sackOK], length 0
IP 172.20.95.128 > 79.134.194.50: ICMP host 192.168.52.1 unreachable, length 60
IP 79.134.194.50.38944 > 192.168.52.1.80: Flags [S], seq 340882049, win 8192, options [mss 1380,nop,wscale 8,nop,nop,sackOK], length 0
IP 172.20.95.128 > 79.134.194.50: ICMP host 192.168.52.1 unreachable, length 60
IP 79.134.194.50.38944 > 192.168.52.1.80: Flags [S], seq 340882049, win 8192, options [mss 1380,nop,nop,sackOK], length 0
IP 172.20.95.128 > 79.134.194.50: ICMP host 192.168.52.1 unreachable, length 56
root@OpenWrt:/#tcpdump -i br-lan -nnnt
ARP, Request who-has 192.168.52.1 tell 192.168.52.1, length 28
ARP, Request who-has 192.168.52.1 tell 192.168.52.1, length 28
ARP, Request who-has 192.168.52.1 tell 192.168.52.1, length 28
ARP, Request who-has 192.168.52.1 tell 192.168.52.1, length 28
ARP, Request who-has 192.168.52.1 tell 192.168.52.1, length 28
ARP, Request who-has 192.168.52.1 tell 192.168.52.1, length 28
ARP, Request who-has 192.168.52.1 tell 192.168.52.1, length 28
ARP, Request who-has 192.168.52.1 tell 192.168.52.1, length 28
ARP, Request who-has 192.168.52.1 tell 192.168.52.1, length 28
ARP, Request who-has 192.168.52.1 tell 192.168.52.1, length 28
ARP, Request who-has 192.168.52.1 tell 192.168.52.1, length 28
ARP, Request who-has 192.168.52.1 tell 192.168.52.1, length 28
Почему пакеты адресуемые маршрутизатору пытаются уйти в lan сегмент? Что неверно или чего не хватает в настройке марщрутизации для публикации 80 порта самого маршрутизатора в интернете через pptp-vpn?