LINUX.ORG.RU
ФорумAdmin

проскакивает правило iptables на роутере

 , ,


0

1

Доброго времени всем.

Возникла необходимость сделать так, чтобы все http-запросы wifi-клиентов роутера (DIR-300D1, 192.168.0.1) попадали на локальный «сервер», где уже подготовлена страница и видна по своему адресу (192.168.0.100).

На роутере прописываю такое:

iptables -t nat -A PREROUTING ! -d 192.168.0.1 -i wlan0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100:80

далее iptables-save, и проверяю:

$ iptables -t nat -vnL

Chain PREROUTING (policy ACCEPT 958 packets, 80453 bytes)

 pkts bytes target     prot opt in     out     source               destination     
    
   71  9230 VSERVER    all  --  *      *       0.0.0.0/0            192.168.1.107       

  151 26508 MINIUPNPD  all  --  eth1   *       0.0.0.0/0            0.0.0.0/0         
  
    0     0 DNAT       tcp  --  wlan0  *       0.0.0.0/0           !192.168.0.1         tcp dpt:80 to:192.168.0.100:80 

Chain POSTROUTING (policy ACCEPT 31 packets, 9967 bytes)

 pkts bytes target     prot opt in     out     source               destination      
   
  600 40988 MASQUERADE  all  --  *      eth1   !192.168.1.107        0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 31 packets, 9967 bytes)

 pkts bytes target     prot opt in     out     source               destination         

Chain DNSREDIRECT (0 references)

 pkts bytes target     prot opt in     out     source               destination         

Chain MINIUPNPD (1 references)

 pkts bytes target     prot opt in     out     source               destination     
    
  151 26508 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain VSERVER (1 references)
0/0           to:192.168.0.100 

    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0   
 pkts bytes target     prot opt in     out     source               destination     
    
    0     0 DNAT       all  --  *      *       0.0.0.0/0            0.0.0.0/0           to:192.168.0.100 

    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Подключаюсь к сети, захожу на любой сайт и он спокойно открывается, вместо того, чтобы показать «заглушку».

В чем я ошибся?


Посмотрите iptables-save после того, как пооткрывали страницы. Может у вашего правила не нулевой счётчик и оно срабатывает.

mky ★★★★★ ()

А eth1 это что такое? Точно не бридж? Вывод brctl show и вывод ifconfig давай.

Nao ★★★★★ ()
Последнее исправление: Nao (всего исправлений: 1)
Ответ на: комментарий от Nao
$ brctl show

bridge name     bridge id               STP enabled     interfaces

br0             8000.c4a81d49340f       no              eth0

                                                        eth2

                                                        eth3

                                                        eth4

                                                        wlan0

br0       Link encap:Ethernet  HWaddr C4:A8:1D:49:34:0F
  
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:28538 errors:0 dropped:0 overruns:0 frame:0

          TX packets:30829 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 

          RX bytes:4279244 (4.0 MiB)  TX bytes:26256354 (25.0 MiB)

eth0      Link encap:Ethernet  HWaddr C4:A8:1D:49:34:0F
  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:53212 errors:0 dropped:0 overruns:0 frame:0

          TX packets:59581 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 

          RX bytes:9945498 (9.4 MiB)  TX bytes:38051826 (36.2 MiB)

          Interrupt:12 

eth1      Link encap:Ethernet  HWaddr C4:A8:1D:49:34:10 
 
          inet addr:192.168.1.107  Bcast:192.168.1.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:43048 errors:0 dropped:0 overruns:0 frame:0

          TX packets:33557 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 

          RX bytes:31852602 (30.3 MiB)  TX bytes:7306307 (6.9 MiB)

          Interrupt:12 

lo        Link encap:Local Loopback 
 
          inet addr:127.0.0.1  Mask:255.0.0.0

          UP LOOPBACK RUNNING MULTICAST  MTU:16436  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 

          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Если я правильно понимаю, то бридж - это eth0

Lan4X ()
Ответ на: комментарий от mky

Посмотрел сейчас

$ iptables -L -vxn

/=/=/=/=/

Chain USER_DNAT (2 references)

    pkts      bytes target     prot opt in     out     source               destination   
      
       0        0 ACCEPT     all  --  *      *       0.0.0.0/0            192.168.0.100 
      
   11623  3616155 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain USER_RULES (2 references)

    pkts      bytes target     prot opt in     out     source               destination 
        
   59518 31047609 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

/=/=/=/=/

Как я понимаю, правило не срабатывает.

Lan4X ()
Ответ на: комментарий от Lan4X

Бридж - это br0 и просто так поймать что либо, используя iptables, можно только на нем, а не на отдельных входящих в бридж интерфейсах (eth0, eth2, eth3, eth4, wlan0).

Вам бы выпихнуть wlan0 из бриджа, тогда бы ваше правило работало, но трафик между беспроводными и проводными устройствами уже не коммутировался бы, а маршрутизировался.

Или вот: http://toster.ru/q/29447 если это возможно в вашей прошивке.

rubic ()

wlan0 входит в бридж, а значит его указывать в параметрах -i или -o бесполезно.

Если есть поддержка модуля physdev, то можно сделать так:

iptables -t nat -A PREROUTING ! -d 192.168.0.1 -i br0 -m physdev --physdev-in wlan0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100:80

Если нету и все клиенты которые сидят на wlan0 имею IP-адрес из подсети 192.168.0.0/24 , то:

iptables -t nat -A PREROUTING ! -d 192.168.0.1 -i br0 -s 192.168.0.0/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100:80

В последнем случае, если кто-то на wi-fi поставит себе вручную IP адрес из другой подсети, то в это правило он уже не попадёт.

Nao ★★★★★ ()
Ответ на: комментарий от rubic

В моей прошивке, к сожалению, ничего не возможно. А dd-wrt не встанет на сей девайс.

Lan4X ()
Ответ на: комментарий от Nao

Пытаюсь добавить с physdev - пишет

no chain/target/match by that name

По lsmod вообще пусто, а гугл молчит как партизан. Видимо, с этим мимо.

Второй вариант - браузер просто долго думает, потом вылетает по таймауту.

Lan4X ()
Ответ на: комментарий от Lan4X

Ну так ты посмотри на сервере (192.168.0.100) приходят ли там пакеты хотя бы.
tcpdump на роутере есть?

Nao ★★★★★ ()
Ответ на: комментарий от ValdikSS

Если честно - не знаю.

Попытался поискать хоть какие-нибудь характеристики по железу и устройству - ничего нигде не указано. Ну, или я не так ищу. Самое полное описание, как ни странно, на официальном сайте, но и там пустовато.

Lan4X ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.