Jump to content

редирект должника


Recommended Posts

может ли кто просветить по функционалу OnConnect на тему денег и кредитов?

cash взять то непроблема а вот как учесть открыт ли кредит.

Link to post
Share on other sites

может ли кто просветить по функционалу OnConnect на тему денег и кредитов?

cash взять то непроблема а вот как учесть открыт ли кредит.

Прочитать из базы.
Link to post
Share on other sites

этот вариант не отбрасываю, просто он уже поидее реализован в каких то скриптах.

не охота городить свой огород. собственно функционал для "дата истечения кредита"

Link to post
Share on other sites

этот вариант не отбрасываю, просто он уже поидее реализован в каких то скриптах.

не охота городить свой огород. собственно функционал для "дата истечения кредита"

В планах на 2.409 есть передача произвольного набора параметров в скрипты. Точнее даже уже в процессе реализации.
Link to post
Share on other sites

 

этот вариант не отбрасываю, просто он уже поидее реализован в каких то скриптах.

не охота городить свой огород. собственно функционал для "дата истечения кредита"

В планах на 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

немного поправил скрипт ато парсинг неверно отработал

 

<?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 by neironus
Link to post
Share on other sites

финальна я версия скрипта с очисткой правил и комментами:

 

 

<?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");
        }
}
// disconnect
mysql_close();

?>
 

Link to post
Share on other sites
  • 3 weeks later...

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
  • 8 months later...

Помогите точно так же сделать только редирект должен работать на микротике как 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 by 2late
Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...