Temat: Złe trasowanie ruchu
Serdecznie wszystkich witam. Posiadam następującą konfigurację na urządzeniu z bezpośrednim dostępem do publicznego IP:
root@OpenWrt:~# for i in network firewall; do uci show $i; echo; done
network.loopback=interface
network.loopback.ifname='lo'
network.loopback.proto='static'
network.loopback.ipaddr='127.0.0.1'
network.loopback.netmask='255.0.0.0'
network.globals=globals
network.wan=interface
network.wan.proto='static'
network.wan.force_link='1'
network.wan.ipv6='0'
network.wan.ipaddr='51.68.x.x'
network.wan.netmask='255.255.248.0'
network.wan.gateway='51.68.136.1'
network.wan.dns='1.1.1.1'
network.wan.delegate='0'
network.wan.ifname='eth0'
network.@rule[0]=rule
network.@rule[0].mark='255'
network.@rule[0].lookup='252'
network.@route[0]=route
network.@route[0].gateway='51.68.136.1'
network.@route[0].interface='wan'
network.@route[0].target='0.0.0.0/0'
network.@route[0].table='mgmt'
network.@route[1]=route
network.@route[1].netmask='255.255.248.0'
network.@route[1].target='51.68.136.0'
network.@route[1].interface='wan'
network.@route[1].table='mgmt'
firewall.@defaults[0]=defaults
firewall.@defaults[0].input='DROP'
firewall.@defaults[0].output='DROP'
firewall.@defaults[0].forward='DROP'
firewall.@defaults[0].syn_flood='1'
firewall.@defaults[0].drop_invalid='1'
firewall.@zone[0]=zone
firewall.@zone[0].name='wan'
firewall.@zone[0].mtu_fix='1'
firewall.@zone[0].network='wan'
firewall.@zone[0].forward='DROP'
firewall.@zone[0].input='DROP'
firewall.@zone[0].masq='1'
firewall.@zone[0].family='ipv4'
firewall.@zone[0].output='DROP'
firewall.@include[0]=include
firewall.@include[0].path='/etc/firewall.user'
firewall.@rule[0]=rule
firewall.@rule[0].name='EnableDirectMgmt'
firewall.@rule[0].target='MARK'
firewall.@rule[0].proto='tcp'
firewall.@rule[0].family='ipv4'
firewall.@rule[0].set_mark='255'
firewall.@rule[0].src_port='x'
firewall.@rule[0].dest='*'
firewall.@rule[0].src_ip='51.68.136.1'
firewall.@rule[1]=rule
firewall.@rule[1].src='*'
firewall.@rule[1].family='ipv6'
firewall.@rule[1].target='DROP'
firewall.@rule[1].dest='*'
firewall.@rule[1].proto='all'
firewall.@rule[1].name='BlockIPv6-frwd'
firewall.@rule[2]=rule
firewall.@rule[2].src='*'
firewall.@rule[2].family='ipv6'
firewall.@rule[2].proto='all'
firewall.@rule[2].target='DROP'
firewall.@rule[2].name='BlockIPv6-in'
firewall.@rule[3]=rule
firewall.@rule[3].proto='all'
firewall.@rule[3].dest='*'
firewall.@rule[3].target='DROP'
firewall.@rule[3].family='ipv6'
firewall.@rule[3].name='BlockIPv6-out'
firewall.@rule[4]=rule
firewall.@rule[4].src='wan'
firewall.@rule[4].family='ipv4'
firewall.@rule[4].target='ACCEPT'
firewall.@rule[4].name='AllowMgmt-inwan'
firewall.@rule[4].dest_port='x'
firewall.@rule[4].proto='tcp'
firewall.@rule[5]=rule
firewall.@rule[5].family='ipv4'
firewall.@rule[5].target='ACCEPT'
firewall.@rule[5].dest='wan'
firewall.@rule[5].name='AllowMgmt-outwan'
firewall.@rule[5].mark='255'
firewall.@rule[5].src_port='x'
firewall.@rule[5].proto='tcp'
firewall.@rule[6]=rule
firewall.@rule[6].proto='all'
firewall.@rule[6].name='AllowVPN-outwan'
firewall.@rule[6].dest='wan'
firewall.@rule[6].extra='-m owner --uid-owner openvpn'
firewall.@rule[6].target='ACCEPT'
firewall.@rule[6].family='ipv4'
root@OpenWrt:~# cat /etc/iproute2/rt_tables
#
# reserved values
#
128 prelocal
255 local
254 main
253 default
0 unspec
252 mgmt
#
# local
#
#1 inr.ruhepZałożenie jest takie, by do internetu mogło wyjść tylko openvpn, reszta ma być na eth0 blokowana. Konfiguracja openvpn z kolei jest zrobiona tak, że przy podłączeniu do serwera ten ustawia bramę główną na siebie, więc urządzenie ma dostęp do internetu po podłączeniu (zakładamy tutaj, że output dla tun0 jest dozwolony).
Problem rodzi się gdy muszę administrować urządzeniem zdalnie. Jeżeli otworzę odpowiednie porty, to otrzymuje ono zapytanie, natomiast ze względu na gw odpowiedź jest routowana przez vpn i do mnie nie trafia (tzn. trafia ale z IP VPN i na innym porcie). Dlatego mam oddzielną tablicę dla trafficu trafiającego na port x ssh. Jeżeli zechcę poadministrować, to przez KVM włączam regułę 'EnableDirectMgmt' i mam dostęp ssh.
Niestety, nie działa to jak należy. Po nawiązaniu połączenia ovpn urządzenie na porcie x nie odpowiada. Dopiero gdy dodam ip route add z moim IP i poprzednim gw do main mogę się połączyć, co wskazywałoby na to, że kernel nadal korzysta z tablicy main, a nie mgmt. Tak być nie powinno, bo po mangle output kernel powinien ponownie sprawdzić trasowanie.
Co robię źle?