Megas Posted December 6, 2011 Posted December 6, 2011 буду краток: iptables -t nat -A PREROUTING -s 192.168.50.55 -p tcp --dport 80 -j REDIRECT --to-ports 8080 хочу, чтобы его редиректило на мою страничку где ему говорится связаться ТП. на 8080 повесил обычный lighttpd, но как всегда кумкалки не хватило, на 404 повесил свою index.html, но как-то все не понятно и не работает Как правильно такое реализовывается? Вставить ник Quote
ThreeDHead Posted December 6, 2011 Posted December 6, 2011 DNAT-ом делайте: # Packets to port 80 redirecting to local HTTPD /sbin/iptables -t nat -A PREROUTING -i $GUEST_INTERFACE -s $LOCAL_NETWORK -p tcp --dport www -j DNAT --to-destination $GUEST_SYSTEM_IP Вставить ник Quote
Megas Posted December 6, 2011 Author Posted December 6, 2011 Спасибо тебе добрый человек. Теперь я обретаю новое понятие для счастья. А те кому интересно: скрипт, раз в 10 минут выгребает из базы всех зверей в utm у которых стоит статус выкл., сравнивает предыдущию выгрузку и если она изменилась то применяет обновленную версию правил. при чем: правила вносятся в отдельную цепочку но в таблице nat, тем самым убиваем кучу времени. почему так? да кто его знает, только учусь. Ну а так как надо делится, то вот: SQL="SELECT inet_ntoa(ig.ip &4294967295) AS FIELD_1, inet_ntoa(ig.mask &4294967295) AS FIELD_2 FROM accounts a, service_links sl, iptraffic_service_links il, ip_groups ig WHERE sl.account_id = a.id AND sl.id = il.id AND il.ip_group_id = ig.ip_group_id AND sl.is_deleted = 0 AND il.is_deleted = 0 AND ig.is_deleted = 0 AND a.int_status = 0" mysql --user="$user" --password="$password" -e "$SQL INTO outfile '/tmp/blockusers.txt';" utm5 iptables -t nat -F BLOCKUSERS iptables -t nat -N BLOCKUSERS cat /tmp/blockusers.txt | while read ip mac; do iptables -t nat -A BLOCKUSERS -s $ip -p tcp --dport 80 -j DNAT --to-destination myhost:port done Вставить ник Quote
dmitry_ Posted December 6, 2011 Posted December 6, 2011 через ipset делайте будет и красивее в iptables и проще добавлять/удалять ip-ы из цепочек, +производительность не потеряете если будет несколько тысяч ip а теперь вопрос: у меня такая же схема работает для предупреждения о задолженности, на странице можно нажать кнопку "Продолжить" правило удаляется из ipset-a и пользователь продолжает ходить в сеть на странице запоминается куда абонент пытался достучаться (к примеру на ya.ru) и пытается переадресовать через php header("Location: ...") и вот тут или какой-то кэш или conntrack записи, помнят что была переадресация и по нажатию на кнопку "Продолжить" перекидывает опять на эту же страницу с кнопкой "Продолжить" (запоминается именно 1 адрес куда нужно переадресовывать), тут особенность если попытаться вручную открыть к примеру google.ru все уже успешно открывается никто не сталкивался с такой проблемой? Вставить ник Quote
ThreeDHead Posted December 7, 2011 Posted December 7, 2011 никто не сталкивался с такой проблемой? Модифицируйте строку запроса и сделайте задержку в 15 секунд $redirect = $_POST['url'].(preg_match('/\?/', $_POST['url']) ? '&' : '?').'r='.rand(); <meta http-equiv="refresh" content="15; url=<?php echo $redirect;?>"> Вставить ник Quote
Ilya Evseev Posted December 7, 2011 Posted December 7, 2011 Редирект через файрволл - не очень хорошо, потому если биллинг начнёт отвечать напрямую, то TCP-сессия подвиснет, а если через BRAS, то это изврат. Как вариант, можно запускать на 81 порту BRAS'a вот такой сценарий: http://forum.nag.ru/forum/index.php?showtopic=61117&view=findpost&p=547399 Файрволл заворачивает на него обращения заблокированных клиентов к 80 порту, сценарий делает HTTP-редирект на биллинг, после чего биллинг общается с клиентом напрямую. Вставить ник Quote
ThreeDHead Posted December 7, 2011 Posted December 7, 2011 Редирект через файрволл - не очень хорошо, потому если биллинг начнёт отвечать напрямую, то TCP-сессия подвиснет, а если через BRAS, то это изврат. После того как у меня откроется Опера с 50-ю вкладками, в которых появится в адресной строке адрес биллинга - я скажу вам "спасибо". зыж Но тем не менее решение красивое. Вставить ник Quote
s.lobanov Posted December 7, 2011 Posted December 7, 2011 Редирект через файрволл - не очень хорошо, потому если биллинг начнёт отвечать напрямую, то TCP-сессия подвиснет, а если через BRAS, то это изврат. После того как у меня откроется Опера с 50-ю вкладками, в которых появится в адресной строке адрес биллинга - я скажу вам "спасибо". зыж Но тем не менее решение красивое. А лучше чтоб вообще ничего не открылось? Вставить ник Quote
Ivan_83 Posted December 8, 2011 Posted December 8, 2011 А лучше чтоб вообще ничего не открылось? У меня %времени это чтение из браузера, и открыто там много, это представляет для меня ценность, потому что на это потрачено моё время и это сохраняет моё время. Зачем провайдеру злить/делать плохо человеку, который ему платит деньги? Вставить ник Quote
Ilya Evseev Posted December 8, 2011 Posted December 8, 2011 Зачем провайдеру злить/делать плохо человеку, который ему платит деньги? Редирект на биллинг делается только у должников, которые как раз _не_ платят. Это делается для их удобства, чтобы сразу был ответ на вопрос "почему пропал Интернет?". Заплатили - нажимают в браузере backspace и радуются жизни. Вставить ник Quote
a_andry Posted December 8, 2011 Posted December 8, 2011 через ipset делайте будет и красивее в iptables и проще добавлять/удалять ip-ы из цепочек, +производительность не потеряете если будет несколько тысяч ip а теперь вопрос: у меня такая же схема работает для предупреждения о задолженности, на странице можно нажать кнопку "Продолжить" правило удаляется из ipset-a и пользователь продолжает ходить в сеть на странице запоминается куда абонент пытался достучаться (к примеру на ya.ru) и пытается переадресовать через php header("Location: ...") и вот тут или какой-то кэш или conntrack записи, помнят что была переадресация и по нажатию на кнопку "Продолжить" перекидывает опять на эту же страницу с кнопкой "Продолжить" (запоминается именно 1 адрес куда нужно переадресовывать), тут особенность если попытаться вручную открыть к примеру google.ru все уже успешно открывается никто не сталкивался с такой проблемой? Помнит броузер пользователя. На странице с редиректом добавьте в заголовки connection: close . Я еще на всякий случай добавлял запреты для кеширования страницы. Вставить ник Quote
Ivan_83 Posted December 8, 2011 Posted December 8, 2011 Редирект на биллинг делается только у должников, которые как раз _не_ платят.Это делается для их удобства, чтобы сразу был ответ на вопрос "почему пропал Интернет?".Заплатили - нажимают в браузере backspace и радуются жизни. Сомнительное удовольствие нажимать 400-800 раз НАЗАД. Не все должники умышленно не платят. Вставить ник Quote
s.lobanov Posted December 8, 2011 Posted December 8, 2011 Редирект на биллинг делается только у должников, которые как раз _не_ платят.Это делается для их удобства, чтобы сразу был ответ на вопрос "почему пропал Интернет?".Заплатили - нажимают в браузере backspace и радуются жизни. Сомнительное удовольствие нажимать 400-800 раз НАЗАД. Не все должники умышленно не платят. Если http-редиректа не будет и url изменяться не будет, то после оплаты можно перезапустить браузер. P.S. 400-800 вкладок это какой браузер и сколько памяти на компе? Вставить ник Quote
a_andry Posted December 8, 2011 Posted December 8, 2011 Гммм, не дочитал. А зачем вообще "назад"? На сервере с редиректом через rewrite заворачиваем все на свой index.чего-то-там . В индексе запоминаем оригинальный запрос пользователя в hidden форму. На нажатие кнопки "продолжить" ставим что-то вроде <script type=\"text/javascript\"> setTimeout( document.location = '$fulluri' , 500); </script> - сразу редирект по ранее запрашиваемому адресу с нужными параметрами запроса. Для GET работает на ура со всеми броузерами. Для POST не делал, просто лениво, но тоже должно работать. Отдельный демон считает таймауты показа для каждого должника страницы и добавляет адреса в ipset - нагрузка "размазана" по времени, нету редиректа одновременно сотен абонентов (можно и через таймауты в самом ipset + cron). Один раз эта радость поломалась, народ некоторый даже жаловаться по телефону начал - не предупредили мы их, понимаешь, о задолженности :) Вставить ник Quote
Ivan_83 Posted December 8, 2011 Posted December 8, 2011 P.S. 400-800 вкладок это какой браузер и сколько памяти на компе? фаерфокс ~ 300-350, опера ~150-300. Win7 x64, Е8500, 8Гб, без свопа, можно поставить 16Гб, тк ддр3 4 слота, EP43 чипсет. На 2к3х64 тоже самое укладывалось в 4-5 Гб легко, теперь вот 6+. Вставить ник Quote
st_re Posted December 8, 2011 Posted December 8, 2011 А что Вы в этих вкладках делаете ? 8-[] Еще помню была жалоба от абонента "Интернет не работает".. Выяснилось, что там была опера с 666 запомненными вкладками (их конечно никто не считал, но дюже дохрена), и в каких то, типа 10 15 33 и 55 попались помершие по таймауту сайты и еще пара просто тормозящих. В итоге оно уперлось в количество параллельно открываемых УРЛов и до его 666 вкладки дело доходило минуты через 3, если не дольше.... Дядя не дожидался. Настроили забывать открытые вкладки, и настало дяде счастье. А то он в тындексе что найдет, новая вкладка. А что это вкладка, и там старая осталась он не в курсе, браузер закроет, откроет а они все снова там. А там, где авторефреш, где анимация навернутая, где еще что... Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.