Динамическое разделение канала на n vpn-пользователей
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- рядовой
- Сообщения: 15
- Зарегистрирован: 2008-02-26 12:25:45
Динамическое разделение канала на n vpn-пользователей
Есть сеть, в ней рутер с 3 интерфейсами: vr0,vr1,rl0
vr1 - интерфейс к адсл модему
vr0 - интерфейс к LAN 1
rl0 - интерфейс к LAN 2
Рутер под управлением FreeBSD 7.0
На интерфейсах vr0,rl0 слушает VPN сервер Mpd5 без радиуса.
Надо общий канал интернета с vr1 раздать юзерам по vpn, с определенной минимальной гарантированной полосой.
Допустим user1 - 64Kb, user2 - 128Kb и т.д.
И еще нужно сделать если например user1 не подключен или использует свой канал не полностью, надо эту
неиспользованную скорость отдать user2.
Ткните куда хоть копать.Весь моск сломал уже
vr1 - интерфейс к адсл модему
vr0 - интерфейс к LAN 1
rl0 - интерфейс к LAN 2
Рутер под управлением FreeBSD 7.0
На интерфейсах vr0,rl0 слушает VPN сервер Mpd5 без радиуса.
Надо общий канал интернета с vr1 раздать юзерам по vpn, с определенной минимальной гарантированной полосой.
Допустим user1 - 64Kb, user2 - 128Kb и т.д.
И еще нужно сделать если например user1 не подключен или использует свой канал не полностью, надо эту
неиспользованную скорость отдать user2.
Ткните куда хоть копать.Весь моск сломал уже
Последний раз редактировалось CrazyAdmin 2008-09-04 18:44:56, всего редактировалось 1 раз.
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
- hizel
- дядя поня
- Сообщения: 9032
- Зарегистрирован: 2007-06-29 10:05:02
- Откуда: Выборг
Re: Динамическое разделение канала на n vpn-пользователей
вы рулите mpd radius-ом?
дело в том что есть ng_car который хорошо интегрируется с mpd
только вот как задать каналы не через RADIUS я например не знаю
иначе проце связкой pipe\queue dummynet
дело в том что есть ng_car который хорошо интегрируется с mpd
только вот как задать каналы не через RADIUS я например не знаю

иначе проце связкой pipe\queue dummynet
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.
-
- рядовой
- Сообщения: 15
- Зарегистрирован: 2008-02-26 12:25:45
Re: Динамическое разделение канала на n vpn-пользователей
есть у меня рабочий конфиг на ipfw, с разделениями с фиксированными лимитами. Но если кто то не в сети, то его канал простаивает
вот как бы сделать один общий пайп размером с канал инета, и потом дочерние пайпы сделать с минимальной(гарантированной) скоростью, но возможностью увеличения за счет неиспользованной скорости канала.
Код: Выделить всё
[root@ ~]# ipfw sh
ipfw: DEPRECATED: 'sh' matched 'show' as a sub-string
00100 222592 24135036 allow ip from any to any via lo0
00120 0 0 fwd 192.168.0.254,31020 ip from any to 192.168.1.254 dst-port 30020
00130 0 0 fwd 192.168.0.254,31080 ip from any to me dst-port 80
00200 28629655 21782153795 divert 8668 ip from any to any via vr0
03000 3862324 4784696105 pipe 321 ip from any to 172.16.0.32 via vr0
04000 2705748 149219547 pipe 320 ip from 172.16.0.32 to any
05000 6262322 8253540125 pipe 341 ip from any to 192.168.0.34 via vr0
06000 4343121 275400250 pipe 340 ip from 192.168.0.34 to any
07000 4221661 1708971152 pipe 201 ip from any to 192.168.0.20 via vr0
65535 45142346 34851572141 allow ip from any to any
Код: Выделить всё
[root@ ~]# ipfw pipe list
00340: 136.000 Kbit/s 0 ms 50 sl. 1 queues (1 buckets) droptail
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
00341: 280.000 Kbit/s 0 ms 50 sl. 1 queues (1 buckets) droptail
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
08100: 100.000 Mbit/s 0 ms 50 sl. 0 queues (1 buckets) droptail
01770: 72.000 Kbit/s 0 ms 50 sl. 0 queues (1 buckets) droptail
01771: 152.000 Kbit/s 0 ms 50 sl. 0 queues (1 buckets) droptail
00321: 424.000 Kbit/s 0 ms 50 sl. 1 queues (1 buckets) droptail
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
00201: 168.000 Kbit/s 0 ms 50 sl. 1 queues (1 buckets) droptail
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
00320: 200.000 Kbit/s 0 ms 50 sl. 1 queues (1 buckets) droptail
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
- hizel
- дядя поня
- Сообщения: 9032
- Зарегистрирован: 2007-06-29 10:05:02
- Откуда: Выборг
Re: Динамическое разделение канала на n vpn-пользователей
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.
-
- рядовой
- Сообщения: 15
- Зарегистрирован: 2008-02-26 12:25:45
Re: Динамическое разделение канала на n vpn-пользователей
сделал вот такое разделение канала: есть канал 1024 кбит. он полностью выделяется на один комп, если подключаются vpn пользователи, загружаются из базы их скоростные настройки, и от моего компа они отнимаются и отдаются пользователю. как только пользователь от vpn Отключается, его скорость снова возвращается ко мне. скрипты написал не универсальные, на Php. если кому интересно могу выложить.
- zingel
- beastie
- Сообщения: 6204
- Зарегистрирован: 2007-10-30 3:56:49
- Откуда: Moscow
- Контактная информация:
Re: Динамическое разделение канала на n vpn-пользователей
выкладывайте, естественно, это - не помешает
Z301171463546 - можно пожертвовать мне денег
-
- рядовой
- Сообщения: 15
- Зарегистрирован: 2008-02-26 12:25:45
Re: Динамическое разделение канала на n vpn-пользователей
так, в общем это решение временное, потом все равно надо доработать с учетом загруженности канала пользователя.
у меня adsl канал:
днем: 1024/1024 входящий/исходящий
ночью: 2048/1024 входящий исходящий
сделал таким образом: по умолчанию весь канал прописывается к одному pipe. при подключении пользователей к vpn им выделяется их скорость из pipe по умолчанию, при отключении скорость снова добавляется к pipe по умолчанию.
ниже скрипты:
#mpd.conf:
#day_night_changer.php скрипт для удвоения ночной скорости в 2 раза, и для уменьшения скорости утром. увеличение скорости с 12 ночи до 8 утра. вызывается через cron
#ipfw_limits_add.php - выделение канала пользователю.
#ipfw_limits_del.php - при отключении пользователя, часть его канала возвращается к pipe-по умолчанию
#ipfw_users_pipes -собственно база пользователей с их ограничениями. первое число есть последнее число в выдаваемом ip адресе через vpn - 172.16.0.XX, где XX - число из первого столбика. Имя пользователя должно быть введено точно также как и в mpd.secret, скорость задается в Kbit
у меня adsl канал:
днем: 1024/1024 входящий/исходящий
ночью: 2048/1024 входящий исходящий
сделал таким образом: по умолчанию весь канал прописывается к одному pipe. при подключении пользователей к vpn им выделяется их скорость из pipe по умолчанию, при отключении скорость снова добавляется к pipe по умолчанию.
ниже скрипты:
#mpd.conf:
Код: Выделить всё
set iface up-script "/etc/ipfw/ipfw_limits_add.php"
set iface down-script "/etc/ipfw/ipfw_limits_del.php"
Код: Выделить всё
#!/usr/local/bin/php
<?
$users=file('/etc/ipfw/ipfw_user_pipes');
$ifc=shell_exec('ifconfig');
$pattern="/inet[\s]+.*->[\s]+(.*)[\s]+netmask/iUs";
preg_match_all($pattern,$ifc,$ma);
$ips=$ma[1];
$now_hour=date('H');
if($now_hour>=0 and $now_hour<8)
$max=2048;
else
$max=1024;
$all_in=0;
$all_out=0;
foreach($users as $str)
{
list($id,$user,$in,$out)=explode('|',$str);
if($now_hour>=0 and $now_hour<8)
$in=$in*2;
if(in_array("172.16.0.{$id}",$ips))
{
shell_exec("/sbin/ipfw pipe {$id}1 config bw {$in}Kbit");
$all_in+=$in;
}
}
$to_me=$max-$all_in;
shell_exec("/sbin/ipfw pipe 361 config bw {$to_me}Kbit");
?>
Код: Выделить всё
#!/usr/local/bin/php
<?
$user_arg=$argv[5];
$action='add';
$users=file('/etc/ipfw/ipfw_user_pipes');
foreach($users as $str)
{
list($id,$user,$in,$out)=explode('|',$str);
$now_hour=date('H');
if($now_hour>=0 and $now_hour<8)
$in=$in*2;
if($user===$user_arg)
{
$str=shell_exec("/sbin/ipfw pipe 361 list");
$pattern="/00361:(.*)[\d]+.*ms/";
preg_match($pattern,$str,$ma);
$now_bw=trim($ma[1]);
if(stripos($now_bw,'Mbit/s'))
{
$now_bw=str_replace('Mbit/s','',$now_bw);
$now_bw=$now_bw*1000;
}
if(stripos($now_bw,'Kbit/s'))
{
$now_bw=str_replace('Kbit/s','',$now_bw);
$now_bw=intval($now_bw);
}
$out=$in/2;
shell_exec("/sbin/ipfw pipe {$id}0 config bw ".$out."Kbit");
shell_exec("/sbin/ipfw pipe {$id}1 config bw ".$in."Kbit");
shell_exec("/sbin/ipfw add ${id}0 pipe {$id}0 all from 172.16.0.{$id} to any in via {$argv[1]}");
shell_exec("/sbin/ipfw add ${id}1 pipe {$id}1 all from any to 172.16.0.{$id} out via {$argv[1]}");
$new_bw=$now_bw-$in;
shell_exec("/sbin/ipfw pipe 361 config bw {$new_bw}Kbit");
}
}
?>
Код: Выделить всё
#!/usr/local/bin/php
<?
$user_arg=$argv[5];
$action='del';
$users=file('/etc/ipfw/ipfw_user_pipes');
foreach($users as $str)
{
list($id,$user,$in,$out)=explode('|',$str);
$now_hour=date('H');
if($now_hour>=0 and $now_hour<8)
$in=$in*2;
if($user===$user_arg)
{
$str=shell_exec("/sbin/ipfw pipe 361 list");
$pattern="/00361:(.*)[\d]+.*ms/";
preg_match($pattern,$str,$ma);
$now_bw=trim($ma[1]);
if(stripos($now_bw,'Mbit/s'))
{
$now_bw=str_replace('Mbit/s','',$now_bw);
$now_bw=$now_bw*1000;
}
if(stripos($now_bw,'Kbit/s'))
{
$now_bw=str_replace('Kbit/s','',$now_bw);
$now_bw=intval($now_bw);
}
shell_exec("/sbin/ipfw pipe {$id}1 delete");
shell_exec("/sbin/ipfw pipe {$id}0 delete");
shell_exec("/sbin/ipfw del ${id}0");
shell_exec("/sbin/ipfw del ${id}1");
$new_bw=$now_bw+$in;
shell_exec("/sbin/ipfw pipe 361 config bw {$new_bw}Kbit");
}
}
?>
Код: Выделить всё
34|user1|280|140
32|user2|424|212
177|user3|152|76