По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Эта статья подробно объясняет функции и терминологию протокола RIP (административное расстояние, метрики маршрутизации, обновления, пассивный интерфейс и т.д.) с примерами. RIP - это протокол маршрутизации вектора расстояния. Он делится информацией о маршруте через локальную трансляцию каждые 30 секунд. Маршрутизаторы хранят в таблице маршрутизации только одну информацию о маршруте для одного пункта назначения. Маршрутизаторы используют значение AD и метрику для выбора маршрута. Первая часть статьи про базовые принципы работы протокола RIP доступна по ссылке. Административная дистанция В сложной сети может быть одновременно запущено несколько протоколов маршрутизации. Различные протоколы маршрутизации используют различные метрики для расчета наилучшего пути для назначения. В этом случае маршрутизатор может получать различную информацию о маршрутах для одной целевой сети. Маршрутизаторы используют значение AD для выбора наилучшего пути среди этих маршрутов. Более низкое значение объявления имеет большую надежность. Административная дистанция Протокол/Источник 0 Непосредственно подключенный интерфейс 0 или 1 Статическая маршрутизация 90 EIGRP 110 OSPF 120 RIP 255 Неизвестный источник Давайте разберемся в этом на простом примере: А маршрутизатор изучает два разных пути для сети 20.0.0.0/8 из RIP и OSPF. Какой из них он должен выбрать? Ответ на этот вопрос скрыт в приведенной выше таблице. Проверьте объявленную ценность обоих протоколов. Административное расстояние - это правдоподобие протоколов маршрутизации. Маршрутизаторы измеряют каждый источник маршрута в масштабе от 0 до 255. 0 - это лучший маршрут, а 255-худший маршрут. Маршрутизатор никогда не будет использовать маршрут, изученный этим (255) источником. В нашем вопросе у нас есть два протокола RIP и OSPF, и OSPF имеет меньшее значение AD, чем RIP. Таким образом, его маршрут будет выбран для таблицы маршрутизации. Метрики маршрутизации У нас может быть несколько линий связи до целевой сети. В этой ситуации маршрутизатор может изучить несколько маршрутов, формирующих один и тот же протокол маршрутизации. Например, в следующей сети у нас есть два маршрута между ПК-1 и ПК-2. Маршрут 1: ПК-1 [10.0.0.0/8] == Маршрутизатор OFF1 [S0/1 - 192.168.1.254] = = Маршрутизатор OFF3 [S0/1-192.168.1.253] = = ПК-2 [20.0.0.0/8] Маршрут 2: ПК-1 [10.0.0.0/8] == Маршрутизатор OFF1 [S0/0 - 192.168.1.249] == Маршрутизатор OFF2 [S0/0 - 192.168.1.250] == Маршрутизатор OFF2 [S0/1 - 192.168.1.246] == Маршрутизатор OFF3 [S0/0 - 192.168.1.245] == ПК-2 [20.0.0.0/8] В этой ситуации маршрутизатор использует метрику для выбора наилучшего пути. Метрика - это измерение, которое используется для выбора наилучшего пути из нескольких путей, изученных протоколом маршрутизации. RIP использует счетчик прыжков в качестве метрики для определения наилучшего пути. Прыжки - это количество устройств уровня 3, которые пакет пересек до достижения пункта назначения. RIP (Routing Information Protocol) - это протокол маршрутизации вектора расстояния. Он использует расстояние [накопленное значение метрики] и направление [вектор], чтобы найти и выбрать лучший путь для целевой сети. Мы объяснили этот процесс с помощью примера в нашей первой части этой статьи. Хорошо, теперь поймите концепцию метрики; скажите мне, какой маршрут будет использовать OFF1, чтобы достичь сети 20.0.0.0/8? Если он выбирает маршрут S0/1 [192.168.1.245/30], он должен пересечь устройство 3 уровня. Если он выбирает маршрут S0/0 [19.168.1.254/30], то ему придется пересечь два устройства уровня 3 [маршрутизатор OFF! и последний маршрутизатор OFF3], чтобы достичь целевой сети. Таким образом, он будет использовать первый маршрут, чтобы достигнуть сети 20.0.0.0/8. Маршрутизация по слухам Иногда RIP также известен как маршрутизация по протоколу слухов. Потому что он изучает информацию о маршрутизации от непосредственно подключенных соседей и предполагает, что эти соседи могли изучить информацию у своих соседей. Обновления объявлений RIP периодически транслирует информацию о маршрутизации со всех своих портов. Он использует локальную трансляцию с IP-адресом назначения 255.255.255.255. Во время вещания ему все равно, кто слушает эти передачи или нет. Он не использует никакого механизма для проверки слушателя. RIP предполагает, что, если какой-либо сосед пропустил какое-либо обновление, он узнает об этом из следующего обновления или от любого другого соседа. Пассивный интерфейс По умолчанию RIP транслирует со всех интерфейсов. RIP позволяет нам контролировать это поведение. Мы можем настроить, какой интерфейс должен отправлять широковещательную передачу RIP, а какой нет. Как только мы пометим любой интерфейс как пассивный, RIP перестанет отправлять обновления из этого интерфейса. Расщепление горизонта Split horizon-это механизм, который утверждает, что, если маршрутизатор получает обновление для маршрута на любом интерфейсе, он не будет передавать ту же информацию о маршруте обратно маршрутизатору-отправителю на том же порту. Разделенный горизонт используется для того, чтобы избежать циклов маршрутизации. Чтобы понять эту функцию более четко, давайте рассмотрим пример. Следующая сеть использует протокол RIP. OFF1-это объявление сети 10.0.0.0/8. OFF2 получает эту информацию по порту S0/0. Как только OFF2 узнает о сети 10.0.0.0/8, он включит ее в свое следующее обновление маршрутизации. Без разделения горизонта он будет объявлять эту информацию о маршруте обратно в OFF1 на порту S0/0. Ну а OFF1 не будет помещать этот маршрут в таблицу маршрутизации, потому что он имеет более высокое значение расстояния. Но в то же время он не будет игнорировать это обновление. Он будет предполагать, что OFF1 знает отдельный маршрут для достижения сети 10.0.0.0/8, но этот маршрут имеет более высокое значение расстояния, чем маршрут, который я знаю. Поэтому я не буду использовать этот маршрут для достижения 10.0.0.0/8, пока мой маршрут работает. Но я могу воспользоваться этим маршрутом, если мой маршрут будет недоступен. Так что это может сработать как запасной маршрут для меня. Это предположение создает серьезную сетевую проблему. Например, что произойдет, если интерфейс F0/1 OFF1 выйдет из строя? OFF1 имеет прямое соединение с 10.0.0.0/8, поэтому он сразу же узнает об этом изменении. В этой ситуации, если OFF1 получает пакет для 10.0.0.0/8, вместо того чтобы отбросить этот пакет, он переадресует его из S0/0 в OFF2. Потому что OFF1 думает, что у OFF2 есть альтернативный маршрут для достижения 10.0.0.0/8. OFF2 вернет этот пакет обратно в OFF1. Потому что OFF2 думает, что у OFF1 есть маршрут для достижения 10.0.0.0/8. Это создаст сетевой цикл, в котором фактический маршрут будет отключен, но OFF1 думает, что у OFF2 есть маршрут для назначения, в то время как OFF2 думает, что у OFF1 есть способ добраться до места назначения. Таким образом, этот пакет будет бесконечно блуждать между OFF1 и OFF2. Чтобы предотвратить эту проблему, RIP использует механизм подсчета прыжков (маршрутизаторов). Количество прыжков RIP подсчитывает каждый переход (маршрутизатор), который пакет пересек, чтобы добраться до места назначения. Он ограничивает количество прыжков до 15. RIP использует TTL пакета для отслеживания количества переходов. Для каждого прыжка RIP уменьшает значение TTL на 1. Если это значение достигает 0, то пакет будет отброшен. Это решение только предотвращает попадание пакета в петлю. Это не решает проблему цикла маршрутизации. Split horizon решает эту проблему. Если расщепление горизонта включено, маршрутизатор никогда не будет вещать тот же маршрут обратно к отправителю. В нашей сети OFF2 узнал информацию о сети 10.0.0.0/8 от OFF1 на S0/0, поэтому он никогда не будет транслировать информацию о сети 10.0.0.0/8 обратно в OFF1 на S0/0. Это решает нашу проблему. Если интерфейс F0/1 OFF1 не работает, и OFF1, и OFF2 поймут, что нет никакого альтернативного маршрута для достижения в сети 10.0.0.0/8. Маршрут отравления Маршрут отравления работает противоположном режиме расщепления горизонта. Когда маршрутизатор замечает, что какой-либо из его непосредственно подключенных маршрутов вышел из строя, он отравляет этот маршрут. По умолчанию пакет может путешествовать только 15 прыжков RIP. Любой маршрут за пределами 15 прыжков является недопустимым маршрутом для RIP. В маршруте, находящимся в неисправном состоянии, RIP присваивает значение выше 15 к конкретному маршруту. Эта процедура известна как маршрутное отравление. Отравленный маршрут будет транслироваться со всех активных интерфейсов. Принимающий сосед будет игнорировать правило разделения горизонта, передавая тот же отравленный маршрут обратно отправителю. Этот процесс гарантирует, что каждый маршрутизатор обновит информацию об отравленном маршруте. Таймеры RIP Для лучшей оптимизации сети RIP использует четыре типа таймеров. Таймер удержания (Hold down timer) - RIP использует удерживающий таймер, чтобы дать маршрутизаторам достаточно времени для распространения отравленной информации о маршруте в сети. Когда маршрутизатор получает отравленный маршрут, он замораживает этот маршрут в своей таблице маршрутизации на период таймера удержания. В течение этого периода маршрутизатор не будет использовать этот маршрут для маршрутизации. Период удержания будет прерван только в том случае, если маршрутизатор получит обновление с той же или лучшей информацией для маршрута. Значение таймера удержания по умолчанию составляет 180 секунд. Route Invalid Timer - этот таймер используется для отслеживания обнаруженных маршрутов. Если маршрутизатор не получит обновление для маршрута в течение 180 секунд, он отметит этот маршрут как недопустимый маршрут и передаст обновление всем соседям, сообщив им, что маршрут недействителен. Route Flush Timer - этот таймер используется для установки интервала для маршрута, который становится недействительным, и его удаления из таблицы маршрутизации. Перед удалением недопустимого маршрута из таблицы маршрутизации он должен обновить соседние маршрутизаторы о недопустимом маршруте. Этот таймер дает достаточно времени для обновления соседей, прежде чем недопустимый маршрут будет удален из таблицы маршрутизации. Таймер Route Flush Timer по умолчанию установлен на 240 секунд. Update Timer -В RIP широковещательная маршрутизация обновляется каждые 30 секунд. Он будет делать это постоянно, независимо от того, изменяется ли что-то в маршрутной информации или нет. По истечении 30 секунд маршрутизатор, работающий под управлением RIP, будет транслировать свою информацию о маршрутизации со всех своих интерфейсов. RIP - это самый старый протокол вектора расстояний. Для удовлетворения текущих требований к сети он был обновлен с помощью RIPv2. RIPv2 также является протоколом вектора расстояния с максимальным количеством прыжков 15. Вы все еще можете использовать RIPv1, но это не рекомендуется. В следующей таблице перечислены ключевые различия между RIPv1 и RIPv2. Основные различия между RIPv1 и RIPv2 RIPv1 RIPv2 Он использует широковещательную передачу для обновления маршрутизации. Он использует многоадресную рассылку для обновления маршрутизации. Он посылает широковещательный пакет по адресу назначения 255.255.255.255. Он отправляет многоадресную рассылку по адресу назначения 224.0.0.9. Он не поддерживает VLSM. Он поддерживает VLSM. Он не поддерживает никакой аутентификации. Он поддерживает аутентификацию MD5 Он поддерживает только классовую маршрутизацию. Он поддерживает как классовую, так и бесклассовую маршрутизацию. Он не поддерживает непрерывную сеть. Он поддерживает непрерывную сеть.
img
Прочитайте материал про реактивное и упреждающее распределение достижимости в сетях. Есть много случаев, когда более эффективно или в соответствии с конкретными ограничениями политики для плоскости управления изучать информацию о достижимости и топологии с другой плоскости управления, а не с помощью механизмов, описанных до этого момента в этой серии статей. Вот некоторые примеры: Две организации должны соединить свои сети, но ни одна из них не хочет позволить другой контролировать политику и работу своих плоскостей управления; Крупная организация состоит из множества бизнес-единиц, каждая из которых имеет возможность управлять собственной внутренней сетью в зависимости от местных условий и требований приложений. Организация должна каким-то образом позволить двум плоскостям управления взаимодействовать при переходе от одной к другой. Причины, по которым одна плоскость управления может получать информацию о доступности от другой, почти безграничны. Учитывая это требование, многие сетевые устройства позволяют операторам перераспределять информацию между плоскостями управления. При перераспределении достижимости возникают две проблемы, связанные с плоскостью управления: как обрабатывать метрики и как предотвращать петли маршрутизации. Примечание. Перераспределение можно рассматривать как экспорт маршрутов из одного протокола в другой. На самом деле импорт/экспорт и перераспределение часто используются для обозначения одного и того же, либо разными поставщиками, либо даже в разных ситуациях одним и тем же поставщиком. Перераспределение и метрики Взаимосвязь между свойствами связи, политиками и метриками определяются каждым протоколом плоскости управления независимо от других протоколов. Фактически, более описательная или более полезная метрическая система - это то, что иногда привлекает операторов к определенному протоколу плоскости управления. На рисунке 12 показаны два участка сети, в которых работают две разные управляющие плоскости, каждая из которых использует свой метод расчета метрик связей. Протоколы X и Y в этой сети были настроены с использованием двух разных систем для назначения показателей. При развертывании протокола X администратор разделил 1000 на скорость соединения в гигабитах. При развертывании протокола Y администратор создал "таблицу показателей" на основе наилучшего предположения о каналах с самой высокой и самой низкой скоростью, которые они могут иметь в течение следующих 10-15 лет, и назначил метрики для различных скоростей каналов в этой таблице. Результат, как показывает рисунок, несовместимые показатели: 10G каналы в протоколе X имеют метрику 100, в то время как в протоколе Y они имеют метрику 20. 100G-каналы как в протоколе X, так и в протоколе Y имеют метрику 10. Предполагая, что более низкая метрика предпочтительна, если метрики добавлены, канал [B, C, F] будет считаться более желательным путем, чем канал [B, D, G]. Однако, если учитывать пропускную способность, оба канала будут считаться одинаково желательными. Если между этими двумя протоколами настроено перераспределение, как следует обрабатывать эти метрики? Есть три общих решения этой проблемы. Администратор может назначить метрику в каждой точке перераспределения, которая передается как часть внутренней метрики протокола. Например, администратор может назначить метрику 5 для пункта назначения E на маршрутизаторе C при перераспределении из протокола X в Y. Этот пункт назначения, E, вводится в протокол Y с метрикой 5 маршрутизатором C. На маршрутизаторе F метрика для E будет от 25 для C. В G стоимость достижения E будет 35 по пути [F, C]. Желательность использования любой конкретной точки выхода для любого конкретного пункта назначения выбирается оператором при назначении этих ручных метрик. Метрика "другого" протокола может быть принята как часть внутренней метрики протокола. Это не работает в случае, когда один протокол имеет более широкий диапазон доступных метрик, чем другой. Например, если протокол Y имеет максимальную метрику 63, метрики 10G из протокола X будут "выше максимума"; ситуация, которая вряд ли будет оптимальной. При отсутствии такого ограничения маршрутизатор C внедрит маршрут к E со стоимостью 100 в протокол Y. Стоимость достижения E на маршрутизаторе F составит 110; стоимость в G будет от 130 до [F, C]. Примечание. Здесь вы можете увидеть компромисс между состоянием плоскости управления и оптимальным использованием сети, это еще один пример компромисса сложности при проектировании реальных протоколов. Перенос внешней метрики в отдельное поле добавляет состояние плоскости управления, но позволяет более оптимально управлять трафиком через сеть. Назначение или использование внешней метрики снижает состояние плоскости управления, но за счет возможности оптимизации потока трафика. Внешняя метрика может быть перенесена в отдельное поле, поэтому каждое сетевое устройство может отдельно определять лучший путь к каждому внешнему адресату. Это третье решение является наиболее широко используемым, поскольку оно обеспечивает наилучшую возможность управления трафиком между двумя сетями. В этом решении C вводит достижимость для E с внешней стоимостью 100. В F есть две метрики в объявлении, описывающие достижимость для E; внутренняя метрика для достижения точки перераспределения (или выхода) - 20, а метрика для достижения точки E во внешней сети - 100. В G внутренняя метрика для достижения точки выхода - 30, а внешняя метрика - 100. Как реализация будет использовать оба этих показателя? Следует ли протоколу выбирать ближайшую точку выхода или, скорее, самую низкую внутреннюю метрику? Это позволит оптимизировать использование локальной сети и потенциально деоптимизировать использование сетевых ресурсов во внешней сети. Должен ли протокол выбирать точку выхода, ближайшую к внешнему назначению, или, скорее, самую низкую внешнюю метрику? Это позволит оптимизировать сетевые ресурсы во внешней сети, потенциально за счет деоптимизации использования сетевых ресурсов в локальной сети. Или протоколу следует попытаться каким-то образом объединить эти две метрики, чтобы максимально оптимизировать использование ресурсов в обеих сетях? Некоторые протоколы предпочитают всегда оптимизировать локальные или внешние ресурсы, в то время как другие предоставляют операторам возможность конфигурации. Например, протокол может позволять переносить внешние метрики в виде метрик разных типов, при этом один тип считается большим, чем любая внутренняя метрика (следовательно, сначала предпочтение отдается самой низкой внутренней метрике и использование внешней метрики в качестве средства разрешения конфликтов), а другой тип - это когда внутренние и внешние метрики считаются эквивалентными (следовательно, добавляются внутренние и внешние метрики для принятия решения о пути). Перераспределение и петли маршрутизации В приведенном выше обсуждении вы могли заметить, что места назначения, перераспределенные с одного протокола на другой, всегда выглядят так, как будто они подключены к перераспределяющему маршрутизатору. По сути, перераспределение действует как форма резюмирования (что означает, что удаляется информация о топологии, а не информация о достижимости), как описано ранее в этой серии статей. Хотя этот момент не является критическим для показателей перераспределения, важно учитывать способность плоскости управления выбирать оптимальный путь. В некоторых конкретных случаях деоптимизация может привести к тому, что плоскость управления не сможет выбрать пути без петель. Рисунок 13 демонстрирует это. Чтобы построить петлю маршрутизации в этой сети: Маршрут к хосту A перераспределяется от протокола X к Y с вручную настроенной метрикой 1. Маршрутизатор E предпочитает маршрут через C с общей метрикой (внутренней и внешней) 2. Маршрутизатор D предпочитает маршрут через E с общей метрикой 3. Маршрутизатор D перераспределяет маршрут к хосту A в протокол X с существующей метрикой 3. Маршрутизатор B имеет два маршрута к A: один со стоимостью 10 (напрямую) и один с метрикой от 4 до D. Маршрутизатор B выбирает путь через D, создавая петлю маршрутизации. И так далее (цикл будет продолжаться, пока каждый протокол не достигнет своей максимальной метрики). Этот пример немного растянут для создания цикла маршрутизации в тривиальной сети, но все циклы маршрутизации, вызванные перераспределением, схожи по своей структуре. В этом примере важно, что была потеряна не только топологическая информация (маршрут к A был суммирован, что, с точки зрения E, было непосредственно связано с C), но и метрическая информация (исходный маршрут со стоимостью 11 перераспределяется в протокол Y со стоимостью 1 в C). Существует ряд общих механизмов, используемых для предотвращения формирования этой петли маршрутизации. Протокол маршрутизации всегда может предпочесть внутренние маршруты внешним. В этом случае, если B всегда предпочитает внутренний маршрут A внешнему пути через D, петля маршрутизации не образуется. Многие протоколы маршрутизации будут использовать предпочтение упорядочивания при установке маршрутов в локальную таблицу маршрутизации (или базу информации о маршрутизации, RIB), чтобы всегда отдавать предпочтение внутренним маршрутам над внешними. Причина этого предпочтения состоит в том, чтобы предотвратить образование петель маршрутизации этого типа. Фильтры можно настроить так, чтобы отдельные пункты назначения не перераспределялись дважды. В этой сети маршрутизатор D может быть настроен для предотвращения перераспределения любого внешнего маршрута, полученного в протоколе Y, в протокол X. В ситуации, когда есть только два протокола (или сети) с перераспределенной между ними информацией плоскости управления, это может быть простым решением. В случаях, когда фильтры необходимо настраивать для каждого пункта назначения, управление фильтрами может стать трудоемким. Ошибки в настройке этих фильтров могут либо привести к тому, что некоторые пункты назначения станут недоступными (маршрутизация черных дыр), либо приведет к образованию петли, потенциально вызывающей сбой в плоскости управления. Маршруты могут быть помечены при перераспределении, а затем отфильтрованы на основе этих тегов в других точках перераспределения. Например, когда маршрут к A перераспределяется в протокол Y в C, маршрут может быть административно помечен некоторым номером, например, 100, чтобы маршрут можно было легко идентифицировать. На маршрутизаторе D можно настроить фильтр для блокировки любого маршрута, помеченного тегом 100, предотвращая образование петли маршрутизации. Многие протоколы позволяют маршруту нести административный тег (иногда называемый сообществом или другим подобным именем), а затем фильтровать маршруты на основе этого тега.
img
В сегодняшней статье расскажем как подключить Asterisk к виртуальной АТС от Манго – Телеком на примере FreePBX 13 Теория Перед тем как мы приступим к настройке, давайте разберемся со схемой работы интеграции. Подключаться к виртуальной АТС мы будет по протоколу SIP. В интерфейсе виртуальной АТС мы создадим сотрудника и назовем его Asterisk. Вслед за этим, нам необходимо будет создать SIP учетную запись и прикрепить ее к созданному ранее сотруднику. На этом этапе у нас будет логин, пароль и домен для регистрации нашего SIP – аккаунта. Следующим этапом, мы создаем переадресацию на созданного пользователя в настройках распределения звонков. Заключительным этапом мы создаем SIP – транк на нашем Asterisk в сторону виртуальной АТС и регистрируем его. Схема работы приведена ниже: Настройка Придерживаясь созданного плана, переходим к созданию нового сотрудника на виртуальной АТС. Для этого, в разделе «Обработка звонков» выбираем пункт «Сотрудники и группы». Далее, переходим во вкладку «Список абонентов» и нажимаем на кнопку «Добавить сотрудника». Откроется форма «Новый абонент»: Шаг 1 - указываем имя для нашего сотрудника. Мы указали просто asterisk Шаг 2 - указываем внутренний номер Шаг 3 - в качестве устройства можете выбрать либо опцию «На обычный IP – телефон», либо «На софтфон (компьютер)». В динамически сформированном ниже меню выбираем «Создать новую учетную запись SIP автоматически» Шаг 4 - если у вас заведено несколько номеров на виртуальной АТС, то выберите необходимую линию – этим номером буду закрываться все исходящие вызовы с Asterisk Нажимаем на кнопку создать. На скриншоте ниже сохраните себе выделенные красным параметры: Пусть в нашем примере это будут следующие настройки: SIP ID = user11@domain.mangosip.ru Пароль = Vf5kNm7Z Теперь необходимо создать правила распределения вызова на наш Asterisk. Переходим в раздел «Настройка», выбираем меню «Обработка входящих звонков» и нажимаем на «Распределение звонков, приветствие, голосовое меню». В открывшемся пункте меню выбираем номер, звонки на который мы будем маршрутизировать Далее, создаем схему, для этого справа нажмите добавить и введите название для схемы, например, «переадресация» и затем нажмите «Активировать»: Пролистываем ниже. Создаем схему с переадресации на созданного сотрудника asterisk. У вас должно получиться вот так: Настройка FreePBX Создаем SIP – транк в нашем FreePBX. Для этого, переходим в вкладку Connectivity -> Trunks: Во вкладке sip Settings, в разделе Outgoing скопируйте конфигурацию ниже, предварительно изменив параметры логина, пароль и домена: type=friend username=user11 secret=Vf5kNm7Z host=domain.mangosip.ru dtmfmode=rfc2833 disallow=all allow=alaw&g729 fromuser=user11 fromdomain=domain.mangosip.ru canreinvite=no insecure=port,invite qualify=200 context=from-trunk canreinvite=no Во разделе Incoming скопируйте строку регистрации ниже: user11:Vf5kNm7Z@domain.mangosip.ru/4991234567 Здесь, номер 4991234567, это DID, который будет нам передавать Манго - Телеком (номер, выбранный на этапе настройки распределения вызовов). О том, как настроить маршрутизацию вызовов с помощью FreePBX читайте по ссылке ниже: Маршрутизация вызовов FreePBX 13
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59