1 (edytowany przez marcin_wawa 2020-03-22 13:34:26)

Temat: Przekierowanie odwołan do routera z danego interfejsu na konkretny url

Na routerze mam skonfigurowane dwie sieci lan i kid

network.lan=interface
network.lan.type='bridge'
network.lan.ifname='eth0'
network.lan.proto='static'
network.lan.netmask='255.255.255.0'
network.lan.ip6assign='60'
network.lan.ipaddr='192.168.7.1'
network.kid=interface
network.kid.type='bridge'
network.kid.proto='static'
network.kid.netmask='255.255.255.0'
network.kid.ipaddr='192.168.6.1'

Zapytania do DNS z sieci kid są przekierowane do lokalnego DNS

iptables -t nat -I PREROUTING -s 192.168.6.0/24 -p udp --dport 53 -j DNAT --to 192.168.6.1
iptables -t nat -I PREROUTING -s 192.168.6.0/24 -p tcp --dport 53 -j DNAT --to 192.168.6.1

serwer www ma dodatkową stronę, która wyswietla komunikat o braku mozliwości połączenia

 192.168.6.1/cgi-bin/blocked 

Stronę którą chcę zablokować przekierowuję na lokalny adres routera:

 luci add_list dhcp.@dnsmasq[0].address='/example.com/192.168.6.1' 

Wszystko dziala poprawnie. I teraz pytanie:
W jaki sposób mogę skierować wszystkie przekierowania do adresu routera z interfejsu kid do konkretnego url, tak by przekierowane strony wyświetlały komunikat ze strony:

 192.168.6.1/cgi-bin/blocked  

Nie chcę przekierowywać wszystkich odwołań bo z interfejsu lan chcę się dostawać do luci lub innych stron na serwerze.

Czym najlepiej to zrobić i jak? Na poziomie serwera www? iptables? dnsmasq?
Dodatkowym utrudnieniem jest to, że na routerze mam ograniczoną możliwość doinstalowania czegokolwiek (brak miejsca).

Uprzejmie poproszę o podpowiedz.

dziękuję i pozdrawiam,
Marcin

2

Odp: Przekierowanie odwołan do routera z danego interfejsu na konkretny url

Jako przykład:

https://eko.one.pl/?p=openwrt-ustawahazardowa

Tam było blokowanie domen a odwołanie do domeny powodowało przekierowanie na dany adres ip. Tylko przekierowanie było na adres IP a nie na url (tak jak ty podałeś), ponad to musisz obsłużysz wszystkie podstrony (czyli np. w uhttpd zdefiniować errorpage)

Gui routera możesz przerzuć na inny port żeby nie kolidowało, na adresie który podałeś możesz zrobić index.html który wywoła dany cgi (jeżeli to w ogóle musi być).

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Przekierowanie odwołan do routera z danego interfejsu na konkretny url

Dziękuję za podpowiedz.

Samo przekierowanie na inny IP dziala i z tym nie ma problemu.
Szukam wlasnie sposobu by każde z tych przekierowań trafiało na stronę błędu niezależnie od tego jaki był oryginalny url.

Pomysł z ustawieniem strony błędu na Index.html podoba mi się. Dodatkowo mozna ustawić taką samą error_page, ale jak wtedy przekierować luci na inny port?

Pozdrawiam,
Marcin

4

Odp: Przekierowanie odwołan do routera z danego interfejsu na konkretny url

Skonfiguruj inną instancję uhttpd - ta normalna na porcie np. 1080 dla luci i druga na porcie 80, słuchająca tylko na 192.168.6.1 która ma ustawiony index i errorpage. Po prostu kolejna sekcja w /etc/config/uhttpd.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Przekierowanie odwołan do routera z danego interfejsu na konkretny url

Skonfigurowalem uhttpd.

root@MR3420:~# uci show uhttpd
uhttpd.main=uhttpd
uhttpd.main.listen_http='0.0.0.0:1080' '[::]:1080'
uhttpd.main.listen_https='0.0.0.0:1443' '[::]:1443'
uhttpd.main.home='/www'
uhttpd.main.redirect_https='1'
uhttpd.main.rfc1918_filter='1'
uhttpd.main.max_requests='3'
uhttpd.main.max_connections='100'
uhttpd.main.cert='/etc/uhttpd.crt'
uhttpd.main.key='/etc/uhttpd.key'
uhttpd.main.cgi_prefix='/cgi-bin'
uhttpd.main.script_timeout='60'
uhttpd.main.network_timeout='30'
uhttpd.main.http_keepalive='20'
uhttpd.main.tcp_keepalive='1'
uhttpd.defaults=cert
uhttpd.defaults.days='730'
uhttpd.defaults.bits='2048'
uhttpd.defaults.country='ZZ'
uhttpd.defaults.state='Somewhere'
uhttpd.defaults.location='Unknown'
uhttpd.defaults.commonname='LEDE'
uhttpd.kid_net=uhttpd
uhttpd.kid_net.home='/www/kid-net'
uhttpd.kid_net.error_page='/www/kid-net/index.html'
uhttpd.kid_net.listen_http='0.0.0.0:80'
uhttpd.kid_net.listen_https='0.0.0.0:443'
root@MR3420:~# 

Siec kid działa tak jak powinna, ale niestety widzę, że siec lan niestety zachowuje się tak samo. Tak jakby zapytania do dns z tej sieci również trafiały w lokalne reguły...

A przecież /etc/firewall.user jest ograniczone do sieci kid

iptables -t nat -I PREROUTING -s 192.168.6.0/24 -p udp --dport 53 -j DNAT --to 192.168.6.1
iptables -t nat -I PREROUTING -s 192.168.6.0/24 -p tcp --dport 53 -j DNAT --to 192.168.6.1

konfiguracja sieci lan. Nie pomogło dodatkowe wskazanie serwerów DNS przez dhcp..

root@MR3420:~# uci show dhcp.lan
dhcp.lan=dhcp
dhcp.lan.interface='lan'
dhcp.lan.start='100'
dhcp.lan.limit='150'
dhcp.lan.leasetime='12h'
dhcp.lan.dhcpv6='server'
dhcp.lan.ra='server'
dhcp.lan.netmask='255.255.255.0'
dhcp.lan.ra_management='1'
dhcp.lan.dhcp_option='6,8.8.8.8,8.8.4.4'
root@MR3420:~# 

root@MR3420:~# uci show network.lan
network.lan=interface
network.lan.type='bridge'
network.lan.ifname='eth0'
network.lan.proto='static'
network.lan.netmask='255.255.255.0'
network.lan.ip6assign='60'
network.lan.ipaddr='192.168.7.1'
root@MR3420:~# 

Konfiguracja firewalla

root@MR3420:~# uci show firewall
firewall.@defaults[0]=defaults
firewall.@defaults[0].syn_flood='1'
firewall.@defaults[0].input='ACCEPT'
firewall.@defaults[0].output='ACCEPT'
firewall.@defaults[0].forward='REJECT'
firewall.@zone[0]=zone
firewall.@zone[0].name='lan'
firewall.@zone[0].network='lan'
firewall.@zone[0].input='ACCEPT'
firewall.@zone[0].output='ACCEPT'
firewall.@zone[0].forward='ACCEPT'
firewall.@zone[1]=zone
firewall.@zone[1].name='wan'
firewall.@zone[1].network='wan' 'wan6'
firewall.@zone[1].input='REJECT'
firewall.@zone[1].output='ACCEPT'
firewall.@zone[1].forward='REJECT'
firewall.@zone[1].masq='1'
firewall.@zone[1].mtu_fix='1'
firewall.@forwarding[0]=forwarding
firewall.@forwarding[0].src='lan'
firewall.@forwarding[0].dest='wan'
firewall.@rule[0]=rule
firewall.@rule[0].name='Allow-DHCP-Renew'
firewall.@rule[0].src='wan'
firewall.@rule[0].proto='udp'
firewall.@rule[0].dest_port='68'
firewall.@rule[0].target='ACCEPT'
firewall.@rule[0].family='ipv4'
firewall.@rule[1]=rule
firewall.@rule[1].name='Allow-Ping'
firewall.@rule[1].src='wan'
firewall.@rule[1].proto='icmp'
firewall.@rule[1].icmp_type='echo-request'
firewall.@rule[1].family='ipv4'
firewall.@rule[1].target='ACCEPT'
firewall.@rule[2]=rule
firewall.@rule[2].name='Allow-IGMP'
firewall.@rule[2].src='wan'
firewall.@rule[2].proto='igmp'
firewall.@rule[2].family='ipv4'
firewall.@rule[2].target='ACCEPT'
firewall.@rule[3]=rule
firewall.@rule[3].name='Allow-DHCPv6'
firewall.@rule[3].src='wan'
firewall.@rule[3].proto='udp'
firewall.@rule[3].src_ip='fc00::/6'
firewall.@rule[3].dest_ip='fc00::/6'
firewall.@rule[3].dest_port='546'
firewall.@rule[3].family='ipv6'
firewall.@rule[3].target='ACCEPT'
firewall.@rule[4]=rule
firewall.@rule[4].name='Allow-MLD'
firewall.@rule[4].src='wan'
firewall.@rule[4].proto='icmp'
firewall.@rule[4].src_ip='fe80::/10'
firewall.@rule[4].icmp_type='130/0' '131/0' '132/0' '143/0'
firewall.@rule[4].family='ipv6'
firewall.@rule[4].target='ACCEPT'
firewall.@rule[5]=rule
firewall.@rule[5].name='Allow-ICMPv6-Input'
firewall.@rule[5].src='wan'
firewall.@rule[5].proto='icmp'
firewall.@rule[5].icmp_type='echo-request' 'echo-reply' 'destination-unreachable' 'packet-too-big' 'time-exceeded' 'bad-header' 'unknown-header-type' 'router-solicitation' 'neighbour-solicitation' 'router-advertisement' 'neighbour-advertisement'
firewall.@rule[5].limit='1000/sec'
firewall.@rule[5].family='ipv6'
firewall.@rule[5].target='ACCEPT'
firewall.@rule[6]=rule
firewall.@rule[6].name='Allow-ICMPv6-Forward'
firewall.@rule[6].src='wan'
firewall.@rule[6].dest='*'
firewall.@rule[6].proto='icmp'
firewall.@rule[6].icmp_type='echo-request' 'echo-reply' 'destination-unreachable' 'packet-too-big' 'time-exceeded' 'bad-header' 'unknown-header-type'
firewall.@rule[6].limit='1000/sec'
firewall.@rule[6].family='ipv6'
firewall.@rule[6].target='ACCEPT'
firewall.@rule[7]=rule
firewall.@rule[7].name='Allow-IPSec-ESP'
firewall.@rule[7].src='wan'
firewall.@rule[7].dest='lan'
firewall.@rule[7].proto='esp'
firewall.@rule[7].target='ACCEPT'
firewall.@rule[8]=rule
firewall.@rule[8].name='Allow-ISAKMP'
firewall.@rule[8].src='wan'
firewall.@rule[8].dest='lan'
firewall.@rule[8].dest_port='500'
firewall.@rule[8].proto='udp'
firewall.@rule[8].target='ACCEPT'
firewall.@include[0]=include
firewall.@include[0].path='/etc/firewall.user'
firewall.@zone[2]=zone
firewall.@zone[2].name='kid'
firewall.@zone[2].network='kid'
firewall.@zone[2].input='REJECT'
firewall.@zone[2].forward='REJECT'
firewall.@zone[2].output='ACCEPT'
firewall.@forwarding[1]=forwarding
firewall.@forwarding[1].src='kid'
firewall.@forwarding[1].dest='wan'
firewall.@rule[9]=rule
firewall.@rule[9].src='kid'
firewall.@rule[9].proto='udp'
firewall.@rule[9].src_port='67-68'
firewall.@rule[9].dest_port='67-68'
firewall.@rule[9].target='ACCEPT'
firewall.@rule[9].family='ipv4'
firewall.@rule[10]=rule
firewall.@rule[10].src='kid'
firewall.@rule[10].dest_port='53'
firewall.@rule[10].target='ACCEPT'
firewall.@rule[10].family='ipv4'
firewall.@rule[10].proto='tcpudp'
firewall.@rule[11]=rule
firewall.@rule[11].enabled='1'
firewall.@rule[11].target='ACCEPT'
firewall.@rule[11].src='wan'
firewall.@rule[11].proto='tcp'
firewall.@rule[11].dest_port='22'
firewall.@rule[11].name='WAN-ALLOW-SSH'
firewall.@rule[11].family='ipv4'
firewall.@rule[11].dest_ip='192.168.1.112'
firewall.@rule[12]=rule
firewall.@rule[12].src='kid'
firewall.@rule[12].dest_port='80'
firewall.@rule[12].target='ACCEPT'
firewall.@rule[12].family='ipv4'
firewall.@rule[12].proto='tcpudp'
firewall.@rule[13]=rule
firewall.@rule[13].src='kid'
firewall.@rule[13].dest_port='443'
firewall.@rule[13].target='ACCEPT'
firewall.@rule[13].family='ipv4'
firewall.@rule[13].proto='tcpudp'
root@MR3420:~# 

Co może być przyczyną takiego zachowania w sieci lan?

6

Odp: Przekierowanie odwołan do routera z danego interfejsu na konkretny url

Tzn jak się zachowuje? Jeżeli zrobiłeś to dla całego dnsmasq to on jest jeden i właśnie tak się zachowuje jak zrobiłeś.

Jeżeli chcesz mieć inne to znów - zrób dwie instancje o różnych parametrach.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

7

Odp: Przekierowanie odwołan do routera z danego interfejsu na konkretny url

Nie rozumiem dlaczego skoro dla lan podalem zewnętrzny DNS 8.8.8.8 a firewall przekierowuje do dns routera zapytania wyłącznie z sieci kid odpowiedzi są podmieniane... Co tu zrobiłem źle?

I jak przywiązać instancję dnsmasq do konkretnego interface?

Dziękuję i pozdrawiam,
Marcin

8

Odp: Przekierowanie odwołan do routera z danego interfejsu na konkretny url

Może nie wszystkie urządzenia korzystają z 8.8.8.8? Jak sprawdziłeś że nie działa dla lanu? I jaki miałeś dns skoro blokada zadziałała?

Do każdej sekcji dodajesz opcję instance, patrz przykład tutaj: https://openwrt.org/docs/guide-user/bas … _instances

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

9

Odp: Przekierowanie odwołan do routera z danego interfejsu na konkretny url

Dziękuję.

Stawianie dwóch instancji dnsmasq to oczywiście jest rozwiązanie.

Ale czy naprawdę nie ma możiwości by firewallem (i tylko firewallem) zawrócić zapytania do DNS do Routera wyłącznie z jednej sieci/interfejsu?
To byłoby dużo łatwiejsze. Jak sprawdzić dlaczego to nie działa?

Pozdrawiam,
Marcin

10

Odp: Przekierowanie odwołan do routera z danego interfejsu na konkretny url

dns odpowiada na zapytania. Jeżeli go skonfigurowałeś "globalnie" to odpowiada dla wszystkich. Chcesz konfigurację inną dla każdej sieci to robisz oddzielną instancję.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

11

Odp: Przekierowanie odwołan do routera z danego interfejsu na konkretny url

Dziekuję za dotychczasowe podpowiedzi. Nie daje mi jednak spokoju dlaczego nie działają reguły firewalla

1. Dlaczego zapytania do DNS z sieci 192.168.7.1/24 również trafiają do lokalnego DNS skoro dodana reguła ogranicza to wyłącznie do sieci 192.168.6.1/24?

root@MR3420:~# cat /etc/firewall.user 
iptables -t nat -I PREROUTING -s 192.168.6.0/24 -p udp --dport 53 -j DNAT --to 192.168.6.1
iptables -t nat -I PREROUTING -s 192.168.6.0/24 -p tcp --dport 53 -j DNAT --to 192.168.6.1
root@MR3420:~# 

Klienci sieci 192.168.7.1 (lan) mają dodaną opcję DNS do DHCP

root@MR3420:~# uci show dhcp.lan
dhcp.lan=dhcp
dhcp.lan.interface='lan'
dhcp.lan.start='100'
dhcp.lan.limit='150'
dhcp.lan.leasetime='12h'
dhcp.lan.dhcpv6='server'
dhcp.lan.ra='server'
dhcp.lan.netmask='255.255.255.0'
dhcp.lan.ra_management='1'
dhcp.lan.dhcp_option='6,8.8.8.8,8.8.4.4'
root@MR3420:~# 

Nie daje mi to spokoju. Dlaczego to nie dziala...

2. Alternatywnie, może dodać regułę IP tables dla sieci 192.168.7.1 (lan) aby forwardować zapytania DNS, by omijały lokalny DNS.
Jak to zrobić? Tak będzie ok?

iptables -t nat -I PREROUTING -s 192.168.7.0/24 -p udp --dport 53 -j DNAT --to 8.8.8.8
iptables -t nat -I PREROUTING -s 192.168.7.0/24 -p tcp --dport 53 -j DNAT --to 8.8.8.8

Czy mozliwe jest zrobienie tego o co mi chodzi z jedną instancją dnsmasq?

Dziękuje i pozdrawiam,
Marcin

12 (edytowany przez Cezary 2020-03-29 13:12:17)

Odp: Przekierowanie odwołan do routera z danego interfejsu na konkretny url

Skąd wiesz że trafiają? Jak to sprawdziłeś?

Mam wrażenie że coś ci nie działa. Przecież skoro ustawiłeś inne dnsy który klient otrzymuje to nic nie powinno iść do lokalnego serwera dns tylko do tego którego im dałeś.

EDIT: zrobiłem sobie coś takiego. Mam dwie sieci, .11.1 i .12.1. Wymuszenie dnsów jest takie:

iptables -t nat -I PREROUTING -s 192.168.11.0/24 -p udp --dport 53 -j DNAT --to 192.168.11.1
iptables -t nat -I PREROUTING -s 192.168.11.0/24 -p tcp --dport 53 -j DNAT --to 192.168.11.1

, sieć .12 ma ustawione dla klientów inne dnsy:

dhcp.lan2=dhcp
dhcp.lan2.interface='lan2'
dhcp.lan2.start='100'
dhcp.lan2.limit='150'
dhcp.lan2.leasetime='12h'
dhcp.lan2.dhcp_option='6,8.8.8.8,8.8.4.4'

Klient to dostał:

$ nmcli device show wlan0 | grep IP4
IP4.ADDRESS[1]:                         192.168.12.120/24
IP4.GATEWAY:                            192.168.12.1
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 192.168.12.1, mt = 600
IP4.ROUTE[2]:                           dst = 192.168.12.0/24, nh = 0.0.0.0, mt = 600
IP4.DNS[1]:                             8.8.8.8
IP4.DNS[2]:                             8.8.4.4
IP4.DOMAIN[1]:                          lan

I nie, ten klient nie przechodzi przez reguły wymuszenia:

root@MiFi:~# iptables -v -t nat -L PREROUTING
Chain PREROUTING (policy ACCEPT 68 packets, 7468 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  any    any     192.168.11.0/24      anywhere             tcp dpt:domain to:192.168.11.1
    0     0 DNAT       udp  --  any    any     192.168.11.0/24      anywhere             udp dpt:domain to:192.168.11.1
   68  7468 prerouting_rule  all  --  any    any     anywhere             anywhere             /* !fw3: Custom prerouting rule chain */
   12  2328 zone_lan_prerouting  all  --  br-lan any     anywhere             anywhere             /* !fw3 */
   56  5140 zone_lan2_prerouting  all  --  br-lan2 any     anywhere             anywhere             /* !fw3 */
    0     0 zone_wan_prerouting  all  --  wwan0  any     anywhere             anywhere             /* !fw3 */

Na licznikach jest zero, a właśnie piszę przez niego. Wszystko działa zgodnie z założeniami i nie ma sytuacji takiej jak opisujesz.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.