Всем привет,
Такая ситуация. Нужно реализовать подобие Captive Portal. То есть определенные запросы (идущие на 80 порт и удовлетворяющие неким условиям (*) ) отправлять на специальный веб-сервер (типа как через -j REDIRECT), который будет редиректить на некоторую страничку. Проблема в том, что редирект можно делать только в nat/PREROUTING (ну и в OUTPUT еще), а это слишком рано, некие условия (*) оптимальнее всего вычисляются в mangle/FORWARD (потому что там известно, собирался ли пакет убегать через "внешний" интерфейс или нет). Возникла такая идея (проверить пока не на чём): 1) В mangle/FILTER вычислять условие, если оно удовлетворяется, то ставить метку, скажем, в 1. 2) В iproute2 настроить, что все, что имеет метку 1 (вроде, можно такое) отпралять на интерфес lo, через 127.0.0.1. Непонятно, правда, куда пойдет пакет. Судя по картинке http://www.jollycom.ca/iptables-tutorial/images/tables_traverse.jpg он должен идти в mangle/POSTROUTING, nat/POSTROUTING, потом в сеть. 3) Так как мы его отправили в lo, он тут же, по идее, должен опять пройти все цепочки. Тут мы его и заредиректим (т.е правило типа -t nat -i lo -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080. Чтоб с самой машины можно было ходить на 80 порт, можно в шаге 2.5 в POSTROUTING делать SNAT на какой-нибудь дурацкий адрес, и тут его тоже матчить (ну или поставить в условии, что source IP - не 127.0.0.1). Непонятно, как в обратную сторону пакеты пойдут. По идее, они пойдут через OUTPUT, у них восстановится srcaddr:srcport (на тот, что был в dstaddr:dstport перед REDIRECT) и они благополучно вернутся к отправителю. Вопрос. А может, как-то проще можно? Придуманная схема выглядит ой как нетрезво. -- WBR, Ivan S. Dubrov
signature.asc
Description: OpenPGP digital signature