forum.bitel.ru
http://forum.bitel.ru/

Cisco + Shaper поделитесь решением
http://forum.bitel.ru/viewtopic.php?f=7&t=2432
Страница 1 из 1

Автор:  Heggi [ 13 июн 2009, 22:58 ]
Заголовок сообщения:  Cisco + Shaper поделитесь решением

Есть кошка, стоит шлюзом между инетом и локалкой. Юзеры ходят через кошку без всяких pppoe, pptp и прочее.
Управление кошкой через модуль IPN, шлюз Cisco2 через Telnet.

Каждого юзера нужно шейпить (несколько тарифных планов с разными скоростями)
Для этого необходимо при открытии шлюза на интерфейс fa0/1 повесить traffic-shape group номер_ACL скорость(бит/сек)
И создать соответствующий ACL, в котором перечислить все IP адреса договора модуля IPN.
Самое веселое - это где хранить номер ACL? вариантов там не сильно много, да и нумерация далеко не попорядку... 1-99,1300-1999... т.е. всего 799 ACL. Договоров у меня явно меньше, но привязывать номер ACL к номеру договора нельзя... Вот если бы был параметр в договоре, да чтобы еще номер ACL автоматом назначался из свободных...

Автор:  stark [ 15 июн 2009, 14:36 ]
Заголовок сообщения: 

можете использовать vlan. диапазоны для него поодерживаюься ..автоматического выделения нет ..в следующей версии (5.0) мы сдлелаи подержку веделения свободной сети для модул IPN в шаблоне договра ..можем и vlan так же добавить

Автор:  tee [ 18 июн 2009, 11:03 ]
Заголовок сообщения: 

Тоже думаю как это реализовать


Цитата:
#access-list ?
<1-99> IP standard access list
<100-199> IP extended access list
<1100-1199> Extended 48-bit MAC address access list
<1300-1999> IP standard access list (expanded range)
<200-299> Protocol type-code access list
<2000-2699> IP extended access list (expanded range)
<700-799> 48-bit MAC address access list
compiled Enable IP access-list compilation
dynamic-extended Extend the dynamic ACL absolute timer
rate-limit Simple rate-limit specific access list


если генерировать номер ACL вот так 1300+CID ?
идентификатор договора уникален идет по порядку от 1, на 700 договоров хватит а дальше видно будет

Автор:  Heggi [ 18 июн 2009, 21:54 ]
Заголовок сообщения: 

В идеале заюзать бы и standart и extended ACL. это будет почти 1600 одновременных договоров, но там разный синтаксис и как это реализовать - хз (

Автор:  tee [ 19 июн 2009, 05:32 ]
Заголовок сообщения: 

кстати если полисить на вход и на выход будет расходоватся по 2 ACL договор, это 350 договоров

а сколько rate-limit'ов на интерфейс потянет железка ?
например c72 c NPE-400 или с G1

Автор:  max [ 19 июн 2009, 09:42 ]
Заголовок сообщения: 

tee писал(а):
кстати если полисить на вход и на выход будет расходоватся по 2 ACL договор, это 350 договоров

а сколько rate-limit'ов на интерфейс потянет железка ?
например c72 c NPE-400 или с G1

может вам вешать рейт-лимит на СВИ без акцесс листа?
правда тогда нада схему вилан на пользователя.....

Автор:  Heggi [ 19 июн 2009, 13:00 ]
Заголовок сообщения: 

max писал(а):
tee писал(а):
кстати если полисить на вход и на выход будет расходоватся по 2 ACL договор, это 350 договоров

а сколько rate-limit'ов на интерфейс потянет железка ?
например c72 c NPE-400 или с G1

может вам вешать рейт-лимит на СВИ без акцесс листа?
правда тогда нада схему вилан на пользователя.....


У нас кроме лимитированного инета, есть не лимитированная локалка... так что VLAN на юзера не катит.

А шейпить можно только входящий...

Автор:  max [ 19 июн 2009, 18:41 ]
Заголовок сообщения: 

Heggi писал(а):
max писал(а):
tee писал(а):
кстати если полисить на вход и на выход будет расходоватся по 2 ACL договор, это 350 договоров

а сколько rate-limit'ов на интерфейс потянет железка ?
например c72 c NPE-400 или с G1

может вам вешать рейт-лимит на СВИ без акцесс листа?
правда тогда нада схему вилан на пользователя.....


У нас кроме лимитированного инета, есть не лимитированная локалка... так что VLAN на юзера не катит.

А шейпить можно только входящий...
а какая у вас кошка?

Автор:  tee [ 20 июн 2009, 19:51 ]
Заголовок сообщения: 

"rate-limit" , можно всего 100 штук на сабинтерфейс
http://www.cisco.com/en/US/docs/ios/12_ ... #wp1001055
Cisco IOS Quality of Service Solutions Configuration Guide, Release 12.2

сколько на интерфейс не нашел, про 12.3 и 12.4 пишут тоже самое

"traffic-shape group" наверняка не лучше, поскольку шейпить более ресурсоемкий процесс чем полисить

Автор:  tee [ 20 июн 2009, 19:53 ]
Заголовок сообщения: 

max писал(а):
а какая у вас кошка?


7204 будет с NPE-400 или G1 пока незнаю

Автор:  Heggi [ 20 июн 2009, 21:55 ]
Заголовок сообщения: 

tee писал(а):
"rate-limit" , можно всего 100 штук на сабинтерфейс
http://www.cisco.com/en/US/docs/ios/12_ ... #wp1001055
Cisco IOS Quality of Service Solutions Configuration Guide, Release 12.2

сколько на интерфейс не нашел, про 12.3 и 12.4 пишут тоже самое

"traffic-shape group" наверняка не лучше, поскольку шейпить более ресурсоемкий процесс чем полисить


Если все так плохо, то шейпер придется выкинуть на линукс... Нафига вот только покупали циску за такие бабки - не понятно (((

Автор:  snark [ 22 июн 2009, 06:19 ]
Заголовок сообщения: 

Heggi писал(а):
У нас кроме лимитированного инета, есть не лимитированная локалка... так что VLAN на юзера не катит.

если не гонять весь трафик через кота, а поставить перед ним L3 свич и роутить локалку им - то вполне можно использовать vlan-per-user ;)

Heggi писал(а):
А шейпить можно только входящий...

пардон, "входящий" относительно кого? циски могут шейпить только исходящий ...

Heggi писал(а):
шейпер придется выкинуть на линукс

только предварительно попробуйте что нить в духе:
Код:
class-map match-all no-limit
 match access-group name no-limit


class-map match-all user1
 match access-group name user1

class-map match-all user2
 match access-group name user2

class-map match-all user3
 match access-group name user3


policy-map traf_in
 class no-limit
 class user1
  police 256000 48000 96000 conform-action transmit exceed-action drop
 class user2
  police 128000 24000 48000 conform-action transmit exceed-action drop
 class user1
  police 512000 96000 192000 conform-action transmit exceed-action drop


policy-map traf_out
 class no-limit
 class user1
  shape average 256000
 class user2
  shape average 128000
 class user3
  shape average 512000


ip access-list standard no-limit
 permit сеть.которая.не.лимитруется 0.0.0.255
 deny   any


ip access-list standard user1
 permit ip.адрес.юзера.1
 deny   any

ip access-list standard user2
 permit ip.адрес.юзера.2
 deny   any

ip access-list standard user3
 permit ip.адрес.юзера.3
 deny   any


interface FooBar 0/1
 service-policy in  traf_in
 service-policy out traf_out

Автор:  abehterev [ 22 июн 2009, 11:56 ]
Заголовок сообщения: 

А как же менее трудоемкий процесс:
Код:
rate limit in <SPEED> <SPEED/4> <SPEED/2> conf tr exc dr
rate limit out <SPEED> <SPEED/4> <SPEED/2> conf tr exc dr

причем и acl мона повесить. и 2 не надо создавать, если standard.
Код:
ip access-l 10 perm <net><w_mask>

все отработает как надо.

Автор:  snark [ 22 июн 2009, 13:16 ]
Заголовок сообщения: 

так нельзя разделить куда не нужно резать а куда нужно :(

Автор:  tee [ 22 июн 2009, 13:29 ]
Заголовок сообщения: 

snark писал(а):
Heggi писал(а):
У нас кроме лимитированного инета, есть не лимитированная локалка... так что VLAN на юзера не катит.

если не гонять весь трафик через кота, а поставить перед ним L3 свич и роутить локалку им - то вполне можно использовать vlan-per-user ;)

Heggi писал(а):
А шейпить можно только входящий...

пардон, "входящий" относительно кого? циски могут шейпить только исходящий ...

Heggi писал(а):
шейпер придется выкинуть на линукс

только предварительно попробуйте что нить в духе:
Код:
class-map match-all no-limit
 match access-group name no-limit


class-map match-all user1
 match access-group name user1

class-map match-all user2
 match access-group name user2

class-map match-all user3
 match access-group name user3


policy-map traf_in
 class no-limit
 class user1
  police 256000 48000 96000 conform-action transmit exceed-action drop
 class user2
  police 128000 24000 48000 conform-action transmit exceed-action drop
 class user1
  police 512000 96000 192000 conform-action transmit exceed-action drop


policy-map traf_out
 class no-limit
 class user1
  shape average 256000
 class user2
  shape average 128000
 class user3
  shape average 512000


ip access-list standard no-limit
 permit сеть.которая.не.лимитруется 0.0.0.255
 deny   any


ip access-list standard user1
 permit ip.адрес.юзера.1
 deny   any

ip access-list standard user2
 permit ip.адрес.юзера.2
 deny   any

ip access-list standard user3
 permit ip.адрес.юзера.3
 deny   any


interface FooBar 0/1
 service-policy in  traf_in
 service-policy out traf_out


все замечательно
только конструкции
Код:
class user1
  police 256000 48000 96000 conform-action transmit exceed-action drop
 class user2
  police 128000 24000 48000 conform-action transmit exceed-action drop


это кажется CBWFQ а их можно только 64 штуки на policy-map
http://www.cisco.com/en/US/docs/ios/12_ ... #wp1003029

Код:
class user1
     shape peak 512     

вот это точно CBWFQ а police назнаю

Автор:  abehterev [ 22 июн 2009, 14:02 ]
Заголовок сообщения: 

snark писал(а):
так нельзя разделить куда не нужно резать а куда нужно :(

Это вы кому написали?

Автор:  snark [ 22 июн 2009, 14:07 ]
Заголовок сообщения: 

abehterev писал(а):
Это вы кому написали?
Вам, в ответ на ваше
abehterev писал(а):
все отработает как надо
но потом понял что затупил ... в общем - не обращайте внимания, когда ночь не поспишь и не такое напишешь ...

Автор:  abehterev [ 22 июн 2009, 14:08 ]
Заголовок сообщения: 

Ну желаю удачи и поспать хорошенько :)

Автор:  Heggi [ 27 июн 2009, 01:31 ]
Заголовок сообщения: 

Так, начинаю откровенно тупить...
Есть циска, шлюз CISCO2 телнетовский из вики.
Сейчас команды шлюза такие:
[DEFAULT]
<LOOP>
permit ip host {A} any
</LOOP>
[/DEFAULT]

Надо это развить таким образом, чтобы при открытии шлюза писалось
int fa0/1
traffic-shape group {vlan} ${speed}
exit
<LOOP>
access-list {vlan} permit {A}
</LOOP>

А при закрытии
int fa0/1
no traffic-shape group {vlan}
exit
no access-list {vlan}

Боюсь, что тот скрипт только и умеет, что дописывать ACLки...

Автор:  stark [ 29 июн 2009, 16:51 ]
Заголовок сообщения: 

Heggi писал(а):
Так, начинаю откровенно тупить...
Есть циска, шлюз CISCO2 телнетовский из вики.
Сейчас команды шлюза такие:
[DEFAULT]
<LOOP>
permit ip host {A} any
</LOOP>
[/DEFAULT]

Надо это развить таким образом, чтобы при открытии шлюза писалось
int fa0/1
traffic-shape group {vlan} ${speed}
exit
<LOOP>
access-list {vlan} permit {A}
</LOOP>

А при закрытии
int fa0/1
no traffic-shape group {vlan}
exit
no access-list {vlan}

Боюсь, что тот скрипт только и умеет, что дописывать ACLки...



[DEFAULT]

[REMOVE]

[/REMOVE]

[OPEN]
int fa0/1
traffic-shape group {VID} ${speed}
exit
<LOOP>
access-list {VID} permit {A}
</LOOP>

[/OPEN]

[CLOSE]
int fa0/1
no traffic-shape group {VID}
exit
no access-list {VID}
[/CLOSE]
[/DEFAULT]

добавить тип правила :
speed=256

и другие ..и задавать его вручную каждому клиеенту.
механизм выделения vlan на клиента есть

Автор:  Heggi [ 05 июл 2009, 22:16 ]
Заголовок сообщения: 

Спасибо, допилил, включение/отключение доработал.
Теперь такой интересный вопрос. В планировщике можно сделать периодическую проверку состояния шлюза и отключение/включение в случае несоответствия реального и предписанного.
Что где и как дописать в скрипте, чтобы реализовать эту проверку?
На данный момент никаких проверок нет, и если пришла команда открыть шлюз, то не важно открыт был шлюз или нет, вся пачка команд прописывается заново.
Впрочем циске на это пофигу и одинаковые команды не дублируются. Но, наверно, это не правильно?

Автор:  ODV [ 06 июл 2009, 17:20 ]
Заголовок сообщения: 

Вот пример для вторичного шлюза dlink от первичного циска2
для реализации состояния "создание", тема http://www.bgbilling.ru/forum/viewtopic.php?t=2277
аналогично можете реализовать для любого шлюза

Код:
private String[]  getOpenRules( UserStatus status, int vid )
{
// предедущее состояние шлюза
         cid = status.contractId;
         ps = con.prepareStatement( "select * from ipn_contract_status_log_1 where cid = " + cid );
         rs = ps.executeQuery();
         while( rs.next() ) st = rs.getByte("action");
         ps.close();
         log.info("The pregoing status Gate = " + st);
// end
         if (st == 3)
            return getRules( status, "\\[CREATE\\]((.|\n)*)\\[/CREATE\\]", vid );
         else return getRules( status, "\\[OPEN\\]((.|\n)*)\\[/OPEN\\]", vid );
}


у него есть теперь 4 состояния
Код:
[DEFAULT]

[CREATE]
......................
[/CREATE]

[OPEN]
......................
[/OPEN]

[CLOSE]
......................
[/CLOSE]

[REMOVE]
......................
[/REMOVE]


[/DEFAULT]

Автор:  Heggi [ 06 июл 2009, 18:29 ]
Заголовок сообщения: 

Ответ немного не в тему... возможно я не понятно объясняю...
Представим ситуацию:
1000 договоров, из них 100 в состоянии отключен.
Состояние шлюза соответствует тому, что написано в биллинге.

Сбой питания/шлюз перегрузили/или просто шлюз сдох и его поменяли на другую железку с таким же базовым конфигом.
Т.е. получили несоответствие состояния шлюза тому, что написано в биллинге.
Для таких ситуаций предусмотрен пункт в планировщике - проверка состояний шлюза. Что делает эта команда? Просто тупо прогоняет все команды на все договора? Это же повеситься!!! У меня секунд 7 обрабатывается только один договор (почему так долго - не знаю, возможно из-за реализации через телнет), а 1000 договоров? а 10000???

ИМХО должно быть примерно так:
Вызывается show running-config, считывается весь конфиг, по нему определяется какой договор включен, а какой нет (точнее наличие/отсутствие той или иной строки в конфигурации) и выполнение только отсутствующих команд/удаление присутствующих.

Вот такой примерно алгоритм, но как это реализовать скриптовым языком?

Автор:  ODV [ 06 июл 2009, 18:36 ]
Заголовок сообщения: 

ответ был на:
Heggi писал(а):
На данный момент никаких проверок нет, и если пришла команда открыть шлюз, то не важно открыт был шлюз или нет, вся пачка команд прописывается заново.
Впрочем циске на это пофигу и одинаковые команды не дублируются. Но, наверно, это не правильно?

Автор:  stark [ 06 июл 2009, 18:50 ]
Заголовок сообщения: 

2 Heggi
проверка реалзиуется в самом скрипте. Шеделуер передает списко всех клиентов на этом шлюзе в скрипт, скрипт бежит по ним в цикле . Надо перед циклом вызвать команду получения всего списка клиентов с циски , проанализировать его и послыать команды только для тех шлюзов, которые изменились. По такому принципу работают стандартные шлюзы Manad, Mikrotik, Cisco и их аналоги в BeanShell .
Или в этом шлюзе :
http://wiki.bgbilling.ru/index.php/%D0% ... %D0%BC_ssh

функция isUserPermited. В ней передается буфер с распечаткой всех открытх пользователей

Автор:  Heggi [ 06 июл 2009, 19:30 ]
Заголовок сообщения: 

А теперь для тупых и на пальцах...
Имею:
Код:
protected void doSync()
{
   try
   {
      //удалено для упрощения

      session.doCommand("configure terminal");
 
      doCommands(session);
 
      session.doCommand("exit");
      session.doCommandAsync("exit");
   }
   catch (Exception e)
   {
      throw new RuntimeException(e);
   }
}

private void doCommands(MyTelnetSession session) throws IOException, OperationTimedoutException
{      
   for(UserStatus status : statusList)
   {
      VlanManager manager = new VlanManager(status.mid,con);
      gateId  = gate.getId();
      vid = manager.getVlan(gateId, status.contractId);
      
      //TODO - подумать что сделать с правилами на добавление
 
      rules = null;
      if (status.status == IPNContractStatus.STATUS_OPEN)
      {
         rules = getOpenRules(status,vid);
      }          
      else
      if (status.status == IPNContractStatus.STATUS_REMOVED)
      {
         rules = getRemoveRules(status,vid);   
      }
      //if closed and etc
      else
      {
         rules = getCloseRules(status,vid);
      }
 
      if (vid > 0)
      {
         for (String rule : rules)
         {               
            session.doCommand(rule);            
         }
      }
   }      
}


В statusList находится информация по всем договорам? Или на каждый договор вызывается свой doSync?
Перед for(UserStatus status : statusList) необходимо получить реальное состояние шлюза? и потом в getOpenRules и getCloseRules уже решать добавлять или нет правила в список на выполнение?

Автор:  stark [ 07 июл 2009, 11:29 ]
Заголовок сообщения: 

Heggi писал(а):
А теперь для тупых и на пальцах...
Имею:
Код:
protected void doSync()
{
   try
   {
      //удалено для упрощения

      session.doCommand("configure terminal");
 
      doCommands(session);
 
      session.doCommand("exit");
      session.doCommandAsync("exit");
   }
   catch (Exception e)
   {
      throw new RuntimeException(e);
   }
}

private void doCommands(MyTelnetSession session) throws IOException, OperationTimedoutException
{      
   for(UserStatus status : statusList)
   {
      VlanManager manager = new VlanManager(status.mid,con);
      gateId  = gate.getId();
      vid = manager.getVlan(gateId, status.contractId);
      
      //TODO - подумать что сделать с правилами на добавление
 
      rules = null;
      if (status.status == IPNContractStatus.STATUS_OPEN)
      {
         rules = getOpenRules(status,vid);
      }          
      else
      if (status.status == IPNContractStatus.STATUS_REMOVED)
      {
         rules = getRemoveRules(status,vid);   
      }
      //if closed and etc
      else
      {
         rules = getCloseRules(status,vid);
      }
 
      if (vid > 0)
      {
         for (String rule : rules)
         {               
            session.doCommand(rule);            
         }
      }
   }      
}


В statusList находится информация по всем договорам? Или на каждый договор вызывается свой doSync?

да, по всем ..
вообще есть 2 случая :
1.Задача проверки шлюзов в шедулере. statusList - находятся все догвора на данном шлюзе . doSync вызывается один раз для данного шлюза

2. Вы меняется состояние шлюза из клиента для конретного догворра . В этом случае в statusList будет один договор .

Heggi писал(а):
Перед for(UserStatus status : statusList) необходимо получить реальное состояние шлюза? и потом в getOpenRules и getCloseRules уже решать добавлять или нет правила в список на выполнение?


да

Автор:  nur16 [ 16 мар 2013, 03:52 ]
Заголовок сообщения:  Re:

Heggi писал(а):
Спасибо, допилил, включение/отключение доработал.

А можно выложить конфу циски? Какая циска у вас?
Нам тоже необходимо такую схему реализовать (шейпер на циске, плюс включение/отключение),
но в цисках не сильны совсем. Спасибо.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/