Перейти к содержимому
Калькуляторы

morfair

Активный участник
  • Публикации

    154
  • Зарегистрирован

  • Посещение

Все публикации пользователя morfair


  1. И всё-таки я подтянул Kamailio к своей этой задаче. Прямо перед отправкой в под-роутер DISPATCH (dispatcher на FreeSWITCH) сделал вот такой приём: if ( is_method("INVITE") ) { # https://kamailio.org/docs/modules/3.3.x/modules_k/cfgutils.html#idp1794224 $var(delay) = ($RANDOM / 1048576 * 1000); # 2 ** 20 = 2048 #xlog("L_DBG","INVITE SLEEP: $var(delay)\n"); sl_send_reply("100", "Trying, sleep $var(delay)"); t_set_auto_inv_100(0); # turn off automatic 100 replies usleep("$var(delay)"); # waits "time" micro-seconds. } И ситуация стала намного лучше!! Т.е. я придерживаю INVITE перед проксированием на рандомное время в 0 до 2000 мс и CPS у меня как-то размазываются. Но у меня серьезный вопрос!! Функция usleep() в Kamailio блокирующая или нет? Т.е. у меня весь children тупо висит в бесконечном цикле указанное кол-во micro-seconds, или способен выполнять работу по другим соединениям??
  2. Уже пробовал сделать DROP'ами, т.к. рассуждал, что UDP, всё равно еще пакет пришлет... В итоге стали жаловаться клиенты, что долго тишина в трубке, потом сброс.
  3. Други, подскажите как сделать. Есть входящие пакеты определенного типа, конкретно SIP INVITE. Их я могу выцепить iptables'ом. Нюанс в том, что они прилетают кучей, к примеру сразу штук 20, а потом тишина. Получается 20 pps. А мне надо получить 5 pps, не прибегаю к дропу пакетов, а лишь придержав их через lanetcy, т.е. обработать за 4 секунды. Как такое реализовать в Linux?
  4. Здравствуйте! Коммутатор DES-3200-18 (fw: 1.88.B006). На него в теге на порт 17 приходит VLAN 1234 с мультикастом для IPTV. С него же с порта 5 включен коммутатор ZyXel (там тоже настроен MVR). Проблема в том, что если STB (IPTV-плеер) включен напрямую в DES-3200-18, то всё работает (IGMP Join, Report на продление, Leave), а вот если STP включен в ZyXel, то DES-3200-18 не пропускает с него Report на продление, а лишь Join и Leave. Таким образом видео показывается лишь пять минут и перестает. В чем проблема, почему DES-3200 не пропускает IGMP Report'ы (кроме Join и Leave) с нижестоящего ZyXel? С ZyXel'я они на порт 5 D-Link'а приходят (проверил зеркалом), а на уходе, на порту 17 - нет. enable igmp_snooping create igmp_snooping multicast_vlan iptv_milticast 1234 config igmp_snooping multicast_vlan iptv_milticast state enable config igmp_snooping multicast_vlan iptv_milticast add member_port 4,10-12,15 config igmp_snooping multicast_vlan iptv_milticast add tag_member_port 5 config igmp_snooping multicast_vlan iptv_milticast add source_port 17 config igmp_snooping multicast_vlan_group iptv_milticast add 224.0.0.0-239.255.255.config igmp_snooping vlan_name default state disable fast_leave disable report_suppression disable config igmp_snooping data_driven_learning vlan_name default aged_out disable config igmp_snooping vlan_name iptv_milticast fast_leave enable report_suppression disable config igmp_snooping data_driven_learning vlan_name iptv_milticast aged_out disable Кросслинк: http://forum.dlink.ru/posting.php?mode=edit&f=2&p=961443
  5. Примерно так: D-Link: rad_recv: Access-Request packet from host 10.90.68.90 port 1033, id=23, length=96 User-Name = "1C7508058FDC" User-Password = "1C7508058FDC" NAS-IP-Address = 10.90.68.90 NAS-Identifier = "D-Link" NAS-Port-Type = Virtual Service-Type = Framed-User Framed-Protocol = PPP NAS-Port = 1 Framed-IP-Address = 239.37.239.5 ZyXel: rad_recv: Access-Request packet from host 10.90.68.81 port 1026, id=10, length=141 User-Name = "1c7508058fdc" User-Password = "1c7508058fdc" Service-Type = Framed-User NAS-Port-Type = Virtual Called-Station-Id = "B0-B2-DC-B2-7B-B6" NAS-IP-Address = 10.90.68.81 NAS-Port = 2 Calling-Station-Id = "1C-75-08-05-8F-DC" Framed-IP-Address = 192.168.7.97 NAS-Port-Id = "VLAN65/239.37.239.9" Как шифруете и расшифровываете, если не секрет? Поддержка со со стороны Middleware нужна? Мало наглядной инфы гуглится по этому поводу.
  6. спасибо! а мы буквально только что раскопали igmp radius auth, будем через радиус пробовать. Работает, железобетонно. Ага, у нас только и длинки, и зухели, разные реквесты они шлют, к сожалению( Надо разруливать
  7. спасибо! а мы буквально только что раскопали igmp radius auth, будем через радиус пробовать.
  8. А после подключения тестовой пачки юзеров загрустил от нагрузки на аплинки... Курю мультикаст и ограничение доступа к оному. Вопросов как всегда больше чем ответов. Настроил MVR на центральном свитче. А как тащить дальше? Так же MVR везде настраивать? А как быть со свитчами типа DES-2108, которые так не умеют? Не придумали как защитить доступ к мультикасту?
  9. Скажите, а откуда брать ПЕРВЫЙ HD, Россия HD? Это же вроде государственные каналы, их потока нет в свободном доступе?
  10. Ребят, только вникаю в эту тему, объясните, пож. Есть поток, который идет мультикастом в MPTS. Хотим заюзать Stalker Middleware. Есть два основополагающих вопроса. Конечные устройства будут брать поток с севрера со Stalker'ом, или надо как-то маршрутизировать тот самый мультикаст до клиентов? И если второе - а как тогда отключать клиента?
  11. в пятницу прошлую карбон обновился пока обновлялся 2 минуты - 180 пропусков, а так 5-10. А должен бы быть ноль!!)
  12. /etc/freeradius/sites-enabled, в apache-стиле сделан в дебиане, где лежит конфиг с логикой (порядком) работы.
  13. С FreeRADIUS'ом всё просто. Быстренько пробегаетесь по radiusd.conf, потом в clients.conf прописываете nas'ы, localhost уставляете, затем более осознанно настраиваете sql.conf, и в site-enables (в debian style etc) убираете почти всё, кроме pap, chap, sql. Готово.
  14. Можно пошейпить порт агента до 128-256 кбит/сек, отчеты при редукторе были чистыми =)
  15. Ребят, на Debian 8 Jessie столкнулся с этой проблемой, не хочу собирать из сорцов. Кто откуда брал более свежий пакет? В CentOS 7 тоже старый.
  16. у нас не принято вмешиваться в трафик клиентов без явно означенной законом необходимости +
  17. Во-первых, как правильно ответил GrandPr1de, ответы можно слать через бордер, а дальше к клиенту они смаршрутизируются. Во-вторых, локальный трафик может быть не только серый, но и белый. Коннект с одного вашего клиента с белым IP до другого такого же что, идет через магистрала?? Нет, поэтому в зеркале аплинка этого трафа не будет. Или вы считаете не обязательным блокировать свои адреса, если они попадут в список РКН?
  18. Вот это уже идея, спс. Мне для системы блокировки РКН нужно видеть весь трафик, при этом снимать зеркало с аплинка бордера к магистралу не полноценное решение, т.к. там нет "локального" трафика. Приходится получить трафик с зеркала агрегации, но там всё в тегах.
  19. Мне нужно видеть содержимое пакетов, поэтому этот тегированный трафик нужно растегировать. При этом отличать с какого vlan'а пришло мне не нужно.
  20. Други, суть в том, что на Linux с L2 коммутатора летит зеркало всего трафика со всех VLAN'ов, которых порядка двух тысяч. Столько интерфейсов в Linux'е я создавать не хочу. Есть ли какой ядерный модуль, который бы повырезал все 802.1Q из входящих пакетов?
  21. Такая не оптимизированная штука...
  22. Приведу свое решение. В базе у пользователя (radcheck) сделал столбцы opt82_remote_id, opt82_circuit_unit, opt82_circuit_port и opt82_circuit_vlan, заполняются через юзер-интерфейс, названия, думаю, ясны. На сети доступа свитчи Zyxel и D-Link. Написал скрипт на Python для парсинга Agent-Remote-Id (который по нашим внутренним договоренностям - IP-адрес свитча, это важно для этого скрипта!) и Agent-Circuit-Id (скрипт написал на скорую руки, продвинутым питонщикам не судить строго, плс!), opt82_parse.py: #! /usr/bin/env python # # Kalinin Mikhail, morfair@gmail.com, 2016-09-21 # from optparse import OptionParser args_parser = OptionParser() args_parser.add_option("-r", "--agent-remote-id", help="Agent-Remote-Id RADIS attribute wo '0x'") args_parser.add_option("-c", "--agent-circuit-id", help="Agent-Circuit-Id RADIS attribute wo '0x'") return_parts = ["remote_id", "unit", "port", "vlan"] args_parser.add_option( "-p", "--part", help="Return option 82 part: %s" % ", ".join(return_parts) ) (opts, args) = args_parser.parse_args() #~ print opts if not opts.agent_remote_id or not opts.agent_circuit_id or not opts.part or opts.part not in return_parts: print "ERROR in arguments" import sys sys.exit(1) r = opts.agent_remote_id c = opts.agent_circuit_id p = opts.part def is_ip(s): a = s.split('.') if len(a) != 4: return False for x in a: if not x.isdigit(): return False i = int(x) if i < 0 or i > 255: return False return True def parse_dlink_format(r, c): try: res = {} res["remote_id"] = r[4:].decode("hex") res["unit"] = int(c[-4:-2], 16) res["port"] = int(c[-2:], 16) res["vlan"] = int(c[-8:-4], 16) res["info"] = "" return res except: return False def parse_zyxel_format(r, c): try: res = {} res["remote_id"] = r.decode("hex") res["unit"] = int(c[:2], 16) res["port"] = int(c[2:4], 16) res["vlan"] = int(c[4:8], 16) res["info"] = c[8:].decode("hex") return res except: return False def generate_out(res): #~ print "Tmp-String-1 := %s" % res["remote_id"] #~ print "Tmp-Integer-0 := %s" % res["unit"] #~ print "Tmp-Integer-1 := %s" % res["port"] #~ print "Tmp-Integer-2 := %s" % res["vlan"] print res[p] parse_zyxel = parse_zyxel_format(r, c) parse_dlink = parse_dlink_format(r, c) if is_ip( parse_zyxel["remote_id"] ): generate_out(parse_zyxel) else: generate_out(parse_dlink) Далее FreeRADIUS, policy.conf: opt82_generate_attrs { if ( Agent-Remote-Id && Agent-Circuit-Id ) { #update control { update request { Tmp-String-1 := "%{exec:/etc/freeradius/usr/opt82_parse.py -r %{hex:Agent-Remote-Id} -c %{hex:Agent-Circuit-Id} -p remote_id}" Tmp-Integer-0 := "%{exec:/etc/freeradius/usr/opt82_parse.py -r %{hex:Agent-Remote-Id} -c %{hex:Agent-Circuit-Id} -p unit}" Tmp-Integer-1 := "%{exec:/etc/freeradius/usr/opt82_parse.py -r %{hex:Agent-Remote-Id} -c %{hex:Agent-Circuit-Id} -p port}" Tmp-Integer-2 := "%{exec:/etc/freeradius/usr/opt82_parse.py -r %{hex:Agent-Remote-Id} -c %{hex:Agent-Circuit-Id} -p vlan}" } } } После этого добавляем "opt82_generate_attrs" в начало authorize {}: authorize { opt82_generate_attrs } И используем атрибуты Tmp-* при создании запроса SQL.
  23. Коллеги, я заметил, что на разном оборудование формат Agent-Circuit-Id может отличаться. Отсюда вопрос, каким образом вы заносите Agent-Circuit-Id в базу (radcheck)?