neironus 0 Posted 2013-06-05 04:41:51 Share Posted 2013-06-05 04:41:51 может ли кто просветить по функционалу OnConnect на тему денег и кредитов? cash взять то непроблема а вот как учесть открыт ли кредит. Link to post Share on other sites
madf 279 Posted 2013-06-05 05:38:47 Share Posted 2013-06-05 05:38:47 может ли кто просветить по функционалу OnConnect на тему денег и кредитов? cash взять то непроблема а вот как учесть открыт ли кредит. Прочитать из базы. Link to post Share on other sites
neironus 0 Posted 2013-06-05 06:15:56 Share Posted 2013-06-05 06:15:56 этот вариант не отбрасываю, просто он уже поидее реализован в каких то скриптах. не охота городить свой огород. собственно функционал для "дата истечения кредита" Link to post Share on other sites
madf 279 Posted 2013-06-05 07:15:44 Share Posted 2013-06-05 07:15:44 этот вариант не отбрасываю, просто он уже поидее реализован в каких то скриптах. не охота городить свой огород. собственно функционал для "дата истечения кредита" В планах на 2.409 есть передача произвольного набора параметров в скрипты. Точнее даже уже в процессе реализации. Link to post Share on other sites
neironus 0 Posted 2013-06-10 09:03:07 Share Posted 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 - шлюз и вебсервер для абонентов. Link to post Share on other sites
neironus 0 Posted 2013-06-10 09:13:31 Share Posted 2013-06-10 09:13:31 (edited) немного поправил скрипт ато парсинг неверно отработал <?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"); } } Edited 2013-06-10 09:14:04 by neironus Link to post Share on other sites
neironus 0 Posted 2013-06-10 11:54:37 Share Posted 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();?> Link to post Share on other sites
major12 12 Posted 2013-06-10 14:50:45 Share Posted 2013-06-10 14:50:45 Доречі, вже є RFC, яке розказує, як правильно редіректити користувача - через HTTP статус 511 Network Authentication Required. http://tools.ietf.org/html/rfc6585 Link to post Share on other sites
dummy 8 Posted 2013-06-29 15:37:17 Share Posted 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 все ) Link to post Share on other sites
2late 3 Posted 2014-03-24 19:31:06 Share Posted 2014-03-24 19:31:06 (edited) Помогите точно так же сделать только редирект должен работать на микротике как 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 Edited 2014-03-24 19:40:55 by 2late Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now