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/ |