neironus 0 Опубліковано: 2013-06-05 04:41:51 Share Опубліковано: 2013-06-05 04:41:51 может ли кто просветить по функционалу OnConnect на тему денег и кредитов? cash взять то непроблема а вот как учесть открыт ли кредит. Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2013-06-05 05:38:47 Share Опубліковано: 2013-06-05 05:38:47 может ли кто просветить по функционалу OnConnect на тему денег и кредитов? cash взять то непроблема а вот как учесть открыт ли кредит. Прочитать из базы. Ссылка на сообщение Поделиться на других сайтах
neironus 0 Опубліковано: 2013-06-05 06:15:56 Share Опубліковано: 2013-06-05 06:15:56 этот вариант не отбрасываю, просто он уже поидее реализован в каких то скриптах. не охота городить свой огород. собственно функционал для "дата истечения кредита" Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2013-06-05 07:15:44 Share Опубліковано: 2013-06-05 07:15:44 этот вариант не отбрасываю, просто он уже поидее реализован в каких то скриптах. не охота городить свой огород. собственно функционал для "дата истечения кредита" В планах на 2.409 есть передача произвольного набора параметров в скрипты. Точнее даже уже в процессе реализации. Ссылка на сообщение Поделиться на других сайтах
neironus 0 Опубліковано: 2013-06-10 09:03:07 Share Опубліковано: 2013-06-10 09:03:07 этот вариант не отбрасываю, просто он уже поидее реализован в каких то скриптах. не охота городить свой огород. собственно функционал для "дата истечения кредита" В планах на 2.409 есть передача произвольного набора параметров в скрипты. Точнее даже уже в процессе реализации. набросал небольшой скриптик на пхп, если нужно юзайте. <?php // dnat.php // Author: NeiroN // $sql_arr = file("/etc/stargazer/config"); //print_r ($sql_arr); list($n,$host)=split("host = ",$sql_arr[0]); list($n,$user)=split("host = ",$sql_arr[1]); list($n,$pass)=split("host = ",$sql_arr[2]); list($n,$db)=split("host = ",$sql_arr[3]); $link = mysql_connect($host,$user,$pass) or die("die"); $link = mysql_select_db($db) or die("die"); $sql = mysql_query("select IP from users where (Cash + Credit) < 0;"); while(list($IP)=mysql_fetch_array($sql)) { if(!empty($IP)) { exec("/sbin/iptables -t nat -I PREROUTING -s $IP -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.10.254"); } } ?> выполянется по крону, в onConnect добавил правило на удаление /sbin/iptables -t nat -D PREROUTING -s $IP -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.10.254 но при желание можно и в этом скрипте дописать обратное правило. отрабатывает по крону каждые 10 минут. *172.16.10.254 - шлюз и вебсервер для абонентов. Ссылка на сообщение Поделиться на других сайтах
neironus 0 Опубліковано: 2013-06-10 09:13:31 Share Опубліковано: 2013-06-10 09:13:31 (відредаговано) немного поправил скрипт ато парсинг неверно отработал <?php // dnat.php // Author: NeiroN // $sql_arr = file("/etc/stargazer/config"); print_r ($sql_arr); list($n,$host)=split("host = ",$sql_arr[0]); $host = trim($host); list($n,$user)=split("username = ",$sql_arr[1]); $user = trim($user); list($n,$pass)=split("password = ",$sql_arr[2]); $pass = trim($pass); list($n,$db)=split("database = ",$sql_arr[3]); $db = trim($db); $link = mysql_connect($host,$user,$pass) or die("die"); $link = mysql_select_db($db) or die("die"); $sql = mysql_query("select IP from users where (Cash + Credit) < 0;"); while(list($IP)=mysql_fetch_array($sql)) { if(!empty($IP)) { exec("/sbin/iptables -t nat -I PREROUTING -s $IP -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.10.254"); } } Відредаговано 2013-06-10 09:14:04 neironus Ссылка на сообщение Поделиться на других сайтах
neironus 0 Опубліковано: 2013-06-10 11:54:37 Share Опубліковано: 2013-06-10 11:54:37 финальна я версия скрипта с очисткой правил и комментами: <?php // dnat.php // Author: NeiroN //// сгребаем конфиг в массив$sql_arr = file("/etc/stargazer/config");//print_r ($sql_arr);// парсим конфигlist($n,$host)=split("host = ",$sql_arr[0]); $host = trim($host);list($n,$user)=split("username = ",$sql_arr[1]); $user = trim($user);list($n,$pass)=split("password = ",$sql_arr[2]); $pass = trim($pass);list($n,$db)=split("database = ",$sql_arr[3]); $db = trim($db);// конектимся с базой$link = mysql_connect($host,$user,$pass) or die("die");$link = mysql_select_db($db) or die("die");// чистим правила$sql = mysql_query("select IP from users;");while(list($IP)=mysql_fetch_array($sql)){ exec("/sbin/iptables -t nat -D PREROUTING -s $IP -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.10.254");}// делаем днат для должиков$sql = mysql_query("select IP from users where (Cash + Credit) < 0;");while(list($IP)=mysql_fetch_array($sql)){ if(!empty($IP)) { exec("/sbin/iptables -t nat -I PREROUTING -s $IP -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.10.254"); }}// disconnectmysql_close();?> Ссылка на сообщение Поделиться на других сайтах
major12 12 Опубліковано: 2013-06-10 14:50:45 Share Опубліковано: 2013-06-10 14:50:45 Доречі, вже є RFC, яке розказує, як правильно редіректити користувача - через HTTP статус 511 Network Authentication Required. http://tools.ietf.org/html/rfc6585 Ссылка на сообщение Поделиться на других сайтах
dummy 8 Опубліковано: 2013-06-29 15:37:17 Share Опубліковано: 2013-06-29 15:37:17 iptables -t nat -I PREROUTING -s $IP -p tcp -m tcp --dport 80 -j DNAT --to-destination $IP_WEB_SERVER вот только сам ламаю голову над механизмом. пробовал добавлять в onconnect, но не совсем понял как он работает. к нему обращается stg только если юзер в положительном балансе или же за каждого. думаю прийдет просто добавить правила в /etc/sysconfig/iptables, а потом сверять баланс в onconnect и убивать по одному из ип. но здесь неувязка в том, что нужно и добавлять назад правило при отр. балансе и естественно учесть кредит. как разберусь с принципом работы onconnect b ondisconnect - выложу готовое решение. firewall: # для неподключенных - на 10.1.1.1:81 /sbin/iptables -t nat -N park /sbin/iptables -t nat -A park -m set --match-set internet src -j RETURN /sbin/iptables -t nat -A park -d $INT_NET -j RETURN /sbin/iptables -t nat -A park -d $EXT_IP -j RETURN /sbin/iptables -t nat -A park -p TCP --dport 80 -j DNAT --to 10.1.1.1:81 /sbin/iptables -t nat -A park -p TCP --dport 443 -j DNAT --to 10.1.1.1:81 /sbin/iptables -t nat -A PREROUTING -s $INT_NET -j park OnConnect: ipset add internet $IP OnDisconnect: ipset del internet $IP на 81 порт вешаем nginx все ) Ссылка на сообщение Поделиться на других сайтах
2late 3 Опубліковано: 2014-03-24 19:31:06 Share Опубліковано: 2014-03-24 19:31:06 (відредаговано) Помогите точно так же сделать только редирект должен работать на микротике как dst-nat. Имею следующее: Есть адрес листы, на основе которых режется скорость и в группе которых есть блок внутренних адресов. Есть адрес листа типа TARIF_4MB, в него входят "N" количество абонентов. И все кто находятся в этом адрес листе попадают под свою очередь в дереве очередей. Нужно сделать что бы Ubilling при отключении абона, в микротике помещались в группу типа "drop_users" и на самом же тике сделать редирект на кабинет пользователя. Делал что-то на подобе такого без создания адрес листа типа"drop_users". Кто не попадает под свой адрес лист, тот заворачивается на кабинет пользователя. Но никак не могу добить, как сделать. Это правило отказывается работать ip firewall nat add chain=dstnat protocol=tcp dst-port=80 src-address-list=!T:100 content=http://stat.isp action=dst-nat to-addresses=10.0.6.100 to-ports=80 Відредаговано 2014-03-24 19:40:55 2late Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас