Вообщем вопрос Я решил неким иным способом.
eth0 + eth2 = br0 (LOCAL)
eth1 = GATEWAY
первое правило было неправильным поэтому написал на PHP скрипт который лезет в dnsmasq и смотрит какие ip он уже раздал пользователям, подключается к MySQL и делает соответственно записи в таблицу block_address. Перед этим сохраняет правила. Те правила которые разрешены (ip адрес) т/е пользователи которые зарегистрировались в сети их пропускаем ( для них правила уже созданы и записаны в таблицу registered ). Скрипт запускается в кроне раз в минуту этого достаточно т/к даже с изменениями он выполняется быстрее секунды.
Вобщем штатный iptables выглядит так
*nat
:PREROUTING ACCEPT [1240:81254]
:OUTPUT ACCEPT [237:16429]
:POSTROUTING ACCEPT [1115:73028]
-A PREROUTING ! -d 172.16.16.0/24 -i eth1 -p tcp -m multiport --dports 80,8080 -j DNAT --to-destination 10.10.10.10:3128
COMMIT
# Completed on Sat Feb 23 10:04:49 2013
# Generated by iptables-save v1.4.4 on Sat Feb 23 10:04:49 2013
*filter
:INPUT ACCEPT [8688:3656942]
:FORWARD ACCEPT [1826:196201]
:OUTPUT ACCEPT [7501:6004057]
-A INPUT -i lo -j ACCEPT
-A FORWARD -i br0 -o eth1 -j ACCEPT
-A FORWARD -i eth1 -o eth1 -j REJECT --reject-with icmp-port-unreachable
COMMIT
#
Далее пользователь подключется по локальной сети либо по wifi, dnsmasq назначает ему ip адрес, php скрипт из крона смотрит что появился новый ip адрес с новым mac-адресом и заносит его в sql таблицу block а также присваевает правило (например новый клиент 172.16.16.140):
-A PREROUTING -s 172.16.16.140/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.16.1:81
Далее клиент переходит на любой сайт где его встречает моя состряпанная веб-морда на php
http://172.16.16.1:81/, логины и пароли клиентов хранятся в той же SQL базе, после успешной авторизации клиент через веб-морду регистрирует свой ПК всети, т/е нажимает кнопку зарегистрироваться, также ему указаны ПК которые он до этого регистрировал ( максимум для 1 человека сделал 5 регистраций максимально).
После нажатой кнопки делается копия текущих правил iptables, PHP циклом из копии правил удаляется строка блокировки далее делается iptables-restore и добаляются правила:
-A POSTROUTING -s 172.16.16.140/32 -o eth1 -j MASQUERADE
-A FORWARD -s 172.16.16.140/32 -o eth1 -j ACCEPT
также удаляются записи о блоке из SQL и заносятся в таблицу registered там указан id клиента ip адрес и mac адрес. В конце выполнения делается опять-же резервная копия iptables.
ну и внес /etc/network/interfaces на подъем bash скрипт pre-up /opt/startup в котором врубается iptables правила.
ЗНАЮ ЧТО ЖУТКО ГЛУПЫЕ ПРАВИЛА ПОЛУЧАЮТСЯ В IPTABLES НО! На удивление тестировал с час, все работает как часы ))))
в IPTables вообще почти не рублю, так то я программист только.
Немного недопонимаю работу правил iptables как то они линейны не могу понять неужели нет никаких условий как в программирование ну мол если такой то ip есть выполняем такое то правило нет то пропускаем идем дальше, встретили пакет возвращаемся к тому правилу и пропускаем. Всю ночь читал различные учебники одолеть iptables сложнее чем v8 node.js))