По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
При настройке телефонной маршрутизации очень часто возникает необходимость изменения (корректировки) телефонных номеров, как набираемого (Б-номер), так и инициатора вызова (А-номер, АОН). Например, абоненты вашей станции набирают междугородние/федеральные номера через префикс "8", а вышестоящему оператору связи необходимо передавать номер без префикса, в десятизначном формате. Или вызовы на вашу станцию приходят с кодом зоны, а внутри станции используются номера в 6 или 7 знаков, и лишние символы необходимо удалить. Для корректировки номеров в SoftX3000 существует множество инструментов, применяемые в зависимости от конкретных случаев. Рассмотрим некоторые из них. Таблица корректировки символов DNC Для любых операций с изменением номера используются правила таблицы DNC. Эти правила используются для непосредственной корректировки символов, а все прочие команды определяют, в отношении какого поля (А-номер или Б-номер), на каком направлении (входящее/исходящее) и на какой транк-группе будет применено это правило. Для добавления правила в эту таблицу используется команда ADD DNC. Назначение атрибутов и применение этой команды: Number change index порядковый номер правила. Используется для идентификации правила Number change type тип преобразования номера, принимает значения: NONE номер не изменяется. Используется, если нужно изменить только тип номера MOD изменение цифр номера DEL удаление цифр из номера, указываем позицию, начиная с которой удаляются цифры (Change location) и количество цифр (Change length) INS добавление цифр в номер, указываем позицию, куда вставляем цифры (Change location) и сами цифры (New number) RPL замена цифр в номере, указываем позицию, с которой начинаются цифры для замены (Change location) и сами цифры (New number) Change location позиция цифр, которые подлежат корректировке. Nature of address indicator тип номера, принимает значения: NONE тип номера не изменяется IDN международный номер NDN национальный номер UDN местный номер UNN неизвестный номер SDN специальный номер New number добавляемые (изменяемые) цифры. Для наглядности приведем реальные примеры таких правил: В таблице выше: Правило №2 изменяет первый символ в номере (Change location 0) на цифру 8 (New number). Правило №4 удаляет первые (Change location 0) два символа (Change length - 2) в номере и преобразует тип номера в международный. Правило №9 заменяет первые (Change location 0) шесть символов (Change length - 6) на номер 29xxxx. В системе можно создать 65535 правил, правило под №0 системное, изменению не подлежит. Изменение А и Б номеров на исходящем направлении Для корректировки номеров вызовах в исходящих направлениях используется две таблицы: TGLD здесь компонуются правила для А и Б номера. TGLDIDX указывает транк, в отношении которого применяется правило TGLD и условия, при которых оно применяется. При добавлении записи командой ADD TGLD, необходимо задать следующие обязательные параметры: Bearer index номер правила по порядку. Этот номер будет использоваться для идентификации в таблице TGLDIDX. Trunk seizure point минимальная длина набираемого номера. Caller sending change index правило из таблицы DNC, которое будет применено к А-номеру. Callee sending change index правило из таблицы DNC, применяемое к Б-номеру. Примеры записей TGLD: Здесь запись TGLD=1 изменяет А-номер по правилу DNC=3 и Б-номер по правилу DNC=12. Далее, необходимо привязать созданное правила TGLD к транкам. Для этого используем команду ADD TGLDIDX: Указываем следующие параметры: Trunk group number номер транка, к которому применяется данное правило. Call source code callsource источника вызова, по которому срабатывает правило. Если код отличается, правило не применится. Чтобы применить правило ко всем callsrc, необходимо указать 65534. Local DN set код Local DN set, к которому принадлежат номера/транки, совершающие вызов. Call prefix префикс, при наборе которого срабатывает правило. Bearer index номер правила из таблицы TGLD, которое было создано предыдущей командой. Пример: Рассмотрим правила, применяемые к транку №7 (столбец Trunk group number): Для вызовов с callsource=5 при наборе "8" будет применено правило TGLD=2. Для вызовов с любых прочих callsource при наборе 8 будет применено правило TGLD=17. Для вызовов с любых callsource при наборе 810 будет применено правило TGLD=1. Изменение А и Б номеров на входящем направлении Для изменения атрибутов вызова во входящем направлении применительно ко всем входящим вызовам с определенным callsrc (это может быть группа транков или группа абонентов, объединённых этим параметром), используется таблица PFXPRO. Рассмотрим назначение параметров команды ADD PFXPRO сразу на примере: Параметры имеют следующее назначение: Call source code = 0 правило будет применяться к входящим вызовам с callsrc=0 и только к ним. Call prefix = 871229 правило применяется, если Б-номер начинается с этого префикса (871229). Local DN set = 0 набор номера должен производится с транка или абонента, привязанного к Local DN set = 0. Следует отметить, что вышеуказанный префикс (871229) должен присутствовать в таблице CNACLD с любым атрибутом в указанном Local DN set. Called number change flag = true означает, что Б-номер подлежит изменению. Called number change index = 1 Б-номер будет изменен по правилу DNC=1, которое, для наглядности, приведено ниже: Согласно данному правилу, из номера Б будут удалены первые 4 символа. Reanalysis = true после всех изменений вызов снова будет обработан как вновь поступивший и смаршрутизирован согласно новым параметрам А и Б номеров. Таким образом, вызов, поступивший с атрибутом callsrc=0, в котором Б-номер соответствует шаблону 871229хххх, вновь поступит на обработку, но уже с Б-номером 29хххх, то есть будет вызван 6-значный номер внутреннего абонента станции. Таблица PFXPRO так же позволяет корректировать и А-номер (поля Caller number change flag и Caller number change index), назначить новое значение источника вызова (New call source code) и изменять некоторые другие поля. В нашей станции данная таблица используется в нескольких целях: Приведение Б-номеров по входящему направлению к виду, который мы можем маршрутизировать, то есть: от операторов связи приходит вызов на номер 871229xxxx, а номера абонентов нашей станции 29xxxx, соответственно, нам нужно отрезать первые 4 символа, чтобы распознать нашего абонента. Номера некоторых экстренных служб имеют общий вид (6-значный городской номер), однако абонент набирает короткий номер службы (01, 02, 03). Нам нужно распознать такой набор и подменить номер на реальный. Кроме того, в зависимости от того, в какой местности расположен абонент, номера одной и той же службы могут быть разными. Для того, чтобы учесть этот аспект, мы и используем атрибут callsrc (назначаем каждому району свой callsrc и в соответствии с ним осуществляем подмену набранного номера). Изменение атрибутов вызова на входящем направлении на определенном транке Для корректировки атрибутов вызова на входящем транке используется таблица CLRDSN. Запись CLRDSN привязывается к определенному транку командой ADD TGDSG. В самой команде CLRDSN можно создать несколько правил корректировки, которые будут срабатывать в зависимости от А-номера: Для добавления правила даем команду ADD CLRDSN: Здесь заполняем следующие поля: Discrimination group number номер правила, по этому номеру выполняется привязка к транку в команде ADD TGDSG (в предыдущем примере, например, мы рассматривали параметры правила №5). Caller number номер вызывающего, то есть А-номер. Можем указать конкретный номер или начальный префикс (например, если указать 995, правило будет действовать на все вызовы, которые совершаются с номеров, начинающихся на 995). Есть возможность использовать так называемый символ "Wildcard", то есть применить к любым возможным номерам, для этого вводим символ "E". Префикс в данном поле должен быть таким же, как он приходит из транка. Например, если установить префикс 906, а из транка номер буден приходить 8906 или 7906 правило не сработает. Address nature тип А-номера. Позволяет ограничить применение правила только к А-номерам определенного типа, то есть, только для Unknown неизвестный International международный National междугородный Subscriber местный All все типы номеров Function code тип действия с вызовом. Выбираем ATT(Modify caller attribute), то есть изменение атрибутов А-номера. Call source code если установить значение, код callsource будет изменен. Если оставит пустым, будет установлен callsource = 0. (Однажды потратил полдня, пока не обнаружил эту особенность). Number change index правило DNC, которое будет применено к А-номеру. Если дать команду с тем же номером Discrimination group number, но другими параметрами, правило будет добавлено в ту же группу. Таким образом, мы добавим правила для разных номеров (или разных типов номеров) в одну группу и сможем привязать ее к транку. Как было сказано ранее, привязку правила CLRDSN к транку выполняется командой ADD TGDSG. Мы используем данную функцию для нескольких сценариев. Сценарий 1 Подмена номера от подключенной УПАТС. Например, имеем некоторую УПАТС, которая подключена к нашей станции. Мы выдали им номер из нашей емкости, которую они, в том числе, должны использовать в качестве А-номера (29хххх). Однако, по какой-то причине, в поле А-номера абонент присылает нам внутренние номера своей станции (101, 102 и т.д.). а) Добавим правило DNC, которое выполнит полную подмену номера на тот, который должен быть: б) Создадим правило, в котором применим правило DNC=15 (number change index = 15), ко всем входящим вызовам (number = E, Adress nature = All number): в) Привяжем правило CLRDSN=30 к транку №30 командой ADD TGDSG: Сценарий 2 Блокировка нежелательных вызовов с транка (например, для спам-звонков). Для блокировки вызовов в станции создан Local DNset с пустой таблицей маршрутизации (в таблице CNACLD нет никаких записей), и создан callsource (callsrc=4), привязанный к этому Local DNset. При совпадении А-номера с нежелательным, вызову назначается callsrc=4, тем самым вызов не сможет быть смаршрутизирован и будет отбит. Сценарий 3 Фильтрация входящих вызовов с транка. В данном случае, изначально присваиваем траку callsrc=4, тем самым, по-умолчанию, все входящие вызовы будут запрещены. Затем создаются правила CLRDSN с определенными условиями, при соблюдении которых входящий вызов может быть смаршрутизирован. При выполнении этих условий код callsrc заменяется на разрешенный и вызов проходит. Условиями для проверки обычно выступают префикс А-номера. Например, при входящих вызовах от сотового оператора все А-номера должны начинаться на с символа "9". При входящих вызовах с наших УПАТС А-номер должен начинаться с цифр "29" и т.д. Изменение атрибутов вызова по Б-номеру для внутренних абонентов Данная функция может использоваться для разных задач. Одна из них ограничение исходящих вызовов для определенного абонента на определенный номер. В нашем примере это будут исходящие вызовы на префикс 810, то есть международные вызовы (эту задачу можно решить и другими способами). Используем команду ADD CNACLR: Здесь выделим следующие параметры: Call source code код callsrc, к которому принадлежит номер. Call prefix префикс, при наборе которого срабатывает правило. Caller number номер телефона абонента, к которому применяется правило. Здесь так же применимо выражение wildcard, то есть применить правило к любому номеру, установив символ "E". Function code тип обработки вызова. В данном случае используем изменение Б-номера, выбрав Modify caller attribute. Caller number change index правило DNC, которое применяется к А-номеру. Called number change index правило DNC, которое применяется к Б-номеру. Reanalysis flag = true устанавливаем данный флаг для повторной обработки вызова в таблице маршрутизации с новыми параметрами. Приведенное правило используется в следующем сценарии. В организации приобретен номер 8-800, вызовы на которые переадресуются на локальный номер станции 29хххх. При помощи данного правила мы можем обнаружить набор этого номера 8800 локальными абонентами и подменить его на локальный номер назначения внутри станции, тем самым избежав тарификации этих вызовов на платформе 8800, а так же снизив внешний трафик. Применение данных функций и команд не ограничивается приведенными сценариями, и ограничено только фантазией и лицензиями оборудования. Версия станции Huawei SoftX3000 V300R600, но команды будут применимы на более свежих версиях, а принцип их применения такой же.
img
Что это вообще такое? Docker Compose является инструментом для определения и запуска контейнерных приложений. С Compose вы получаете возможность настраивать службы используя файл YAML. С помощью одной команды Compose вы создаете и запускаете все службы в соответствии с вашей конфигурацией. Установка начинается с создания каталога проекта: $ mkdir composetest $ cd composetest Создайте файл под названием app.py и вставьте в него следующие данные: import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times. '.format(count) В нашем случае название хоста - redis, который использует порт 6379. Создайте файл под названием needs.txt в каталоге вашего проекта и вставьте его в: flask Redis Теперь следует написать код для файла Dockerfile, содержащий все необходимые переменные для среды разработки. В каталоге вашего проекта создайте файл с именем Dockerfile (файл будет определять среду приложения) и вставьте следующее содержимое: FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0 RUN apk add --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["flask", "run"] Определение сервисов осуществляется при создании файла с именем docker-compose.yml в каталоге вашего проекта со следующей информацией: version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine" На основании содержания файла происходит запуск двух сервисов: Web и Redis, а в дальнейшем вы можете вносить в этот файл различные БД и иную важную информацию. C помощью команды Compose создайте ваше приложение, после чего из каталога проекта запустите приложение, запустив docker-compose. Вот так: $ docker-compose up Creating network "composetest_default" with the default driver Creating composetest_web_1 ... Creating composetest_redis_1 ... Creating composetest_web_1 Creating composetest_redis_1 ... done Attaching to composetest_web_1, composetest_redis_1 web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) redis_1 | 1:C 17 Aug 22:11:10.480 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo redis_1 | 1:C 17 Aug 22:11:10.480 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=1, just started redis_1 | 1:C 17 Aug 22:11:10.480 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf web_1 | * Restarting with stat redis_1 | 1:M 17 Aug 22:11:10.483 * Running mode=standalone, port=6379. redis_1 | 1:M 17 Aug 22:11:10.483 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. web_1 | * Debugger is active! redis_1 | 1:M 17 Aug 22:11:10.483 # Server initialized redis_1 | 1:M 17 Aug 22:11:10.483 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. web_1 | * Debugger PIN: 330-787-903 redis_1 | 1:M 17 Aug 22:11:10.483 * Ready to accept connections Compose извлекает образ Redis, создавая образ для вашего приложения и запускает выбранные службы. В этом случае код копируется в образ во время сборки. Как вам такое? Теперь попробуйте ввести http://localhost:5000/ в браузере, чтобы чекнуть запущенное приложение. Если вы используете Docker для Linux, Docker Desktop для Mac или Docker Desktop для Windows, то теперь веб-приложение должно "смотреть" на порт 5000 на хосте Docker. Введите в своем веб-браузере адрес http://localhost:5000, чтобы увидеть сообщение Hello World. Если не сработает, вы также можете попробовать зайти на http://127.0.0.1:5000. Если вы используете Docker Machine на Mac или Windows, используйте ip MACHINE_VM docker-machine для получения IP-адреса вашего хоста Docker. Затем откройте http://MACHINE_VM_IP:5000 в браузере. Вы должны увидеть сообщение в своем браузере: Hello World! I have been seen 1 times. Переключитесь на другое окно терминала и введите docker image ls, чтобы вывести список локальных образов/контейнеров. Вывод на этом этапе должен показывать redis и web. $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE composetest_web latest e2c21aa48cc1 4 minutes ago 93.8MB python 3.4-alpine 84e6077c7ab6 7 days ago 82.5MB redis alpine 9d8fa9aa0e5b 3 weeks ago 27.5MB Важно: Вы можете просматривать запущенные контейнеры с помощью Docker Inspect Tag или ID Запустите docker-compose из каталога вашего проекта во втором терминале, либо нажмите CTRL + C в исходном терминале, где приложение уже запущено и отредактируйте файл Compose. Отредактируйте docker-compose.yml в каталоге вашего проекта для внесения той или иной правки в веб-службе version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code environment: FLASK_ENV: development redis: image: "redis:alpine" Новый ключ редактирует каталог проекта на хосте внутри контейнера, что позволяет изменять код без необходимости перестраивать весь образ. Ключ среды устанавливает переменную FLASK_ENV, которая сообщает о запуске в режиме разработки и перезагрузке кода при изменении. Важно: этот режим должен использоваться только при разработке. В каталоге проекта введите docker-compose up, чтобы создать приложение с обновленным файлом Compose, и запустите его. $ docker-compose up Creating network "composetest_default" with the default driver Creating composetest_web_1 ... Creating composetest_redis_1 ... Creating composetest_web_1 Creating composetest_redis_1 ... done Attaching to composetest_web_1, composetest_redis_1 web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) … Поскольку код приложения теперь добавляется в контейнер с помощью тома, вы можете вносить изменения в его код и мгновенно просматривать изменения без необходимости перестраивать образ. Измените сообщение в app.py и сохраните его: Hello from Docker!: return 'Hello from Docker! I have been seen {} times. '.format(count) Обновите результат в вашем браузере (нажмите F5 или Ctrl + F5) . Приветствие должно быть обновлено, а счетчик должен увеличиваться. Вы можете поэкспериментировать с другими командами. Если вы хотите запускать свои службы в фоновом режиме, вы можете сделать следующее: docker-compose up and use docker-compose ps to see what is currently running: $ docker-compose up -d Starting composetest_redis_1... Starting composetest_web_1... $ docker-compose ps Name Command State Ports ------------------------------------------------------------------- composetest_redis_1 /usr/local/bin/run Up composetest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp Команда docker-compose run позволяет вам применять одноразовые команды к вашим сервисов. Например, чтобы увидеть, какие переменные среды доступны для веб-службы: $ docker-compose run web env Выполните команду docker-compose –help, чтобы увидеть весь список доступных команд. Если вы запустили Compose с помощью docker-compose up -d, то нужно будет остановить ваши службы после работы с ними, для этого поможет команда ниже:$ docker-compose stop Если хотите полностью уничтожить контейнер, используйте команду down.
img
В предыдущей статье мы рассмотрели необходимость перераспределения маршрутов, а также рассмотрели некоторые примеры конфигурации. Эта статья основана на предыдущей конфигурации и рассматривает возможность фильтрации маршрутов с помощью карт маршрутов. В частности, в предыдущем примере показано взаимное перераспределение маршрутов между EIGRP и OSPF, где все маршруты были перераспределены между двумя автономными системами. Однако некоторые сценарии проектирования могут потребовать, чтобы мы предотвратили перераспределение каждого отдельного маршрута. Один из способов сделать эту фильтрацию - использовать карту маршрутов. Для справки, вот топология, с которой мы работаем: Кроме того, с нашей текущей конфигурацией перераспределения маршрутов таблица IP-маршрутизации на роутере OFF1 выглядит следующим образом: Скажем, по какой-то причине мы не хотим, чтобы сеть 192.168.2.0 /24 была перераспределена из EIGRP в OSPF. Один из способов сделать эту фильтрацию - использовать карту маршрутов, которая ссылается на список управления доступом (ACL). Во-первых, давайте перейдем к роутеру CENTR и создадим ACL, который соответствует сети, которую мы хотим отфильтровать. CENTR # conf term Enter configuration commands, one per line. End with CNTL/Z. CENTR (config) access-list 1 permit 192.168.2.0 0.0.0.255 Обратите внимание на использование ключевого слова permit в ACL. В этом контексте слово permit одно из ключевых среди match, notallow. Далее мы будем ссылаться на этот ACL в карте маршрутов, и это карта маршрутов, расскажет, что мы хотим запретить этой сети быть перераспределенной. Вот как мы можем создать эту карту маршрута: CENTR (config)# route-map LAB deny 10 CENTR (config-route-map) # match ip address 1 CENTR (config-route-map) #exit CENTR (config)# route-map LAB permit 20 CENTR (config-route-map) exit CENTR (config)# Обратите внимание, что у нас есть два оператора route-map с порядковыми номерами 10 и 20. Как и в ACL, route-map обрабатываются сверху вниз. В этом примере мы хотим запретить сеть 192.168.2.0 / 24 с порядковым номером 10. Затем, чтобы разрешить перераспределение всего остального трафика, мы создаем инструкцию route-map с порядковым номером 20. Обратите внимание, что в отличие от предыдущего оператора route-map (который содержал ключевое слово deny), этот оператор route-map содержит ключевое слово permit. В результате, без необходимости указывать условие соответствия, мы сопоставляем (и разрешаем) все остальные маршруты. Далее, давайте применим нашу карту маршрута к команде redistribute в нашем процессе маршрутизации OSPF на роутере CENTR. В настоящее время команда redistribute для процесса маршрутизации OSPF выглядит следующим образом: edistribute eigrp 1 metric-type 1 subnets То, что мы хотим сделать - это переписать эту команду, добавив ссылку на нашу недавно созданную карту маршрутов. CENTR (config)# router ospf 1 CENTR (config-router)# redistribute eigrp 1 metric-type 1 subnets route-map LAB CENTR (config-router)#end CENTR# Теперь давайте вернемся к роутеру OFF1 и посмотрим, исчезла ли сеть 192.168.2.0/24 из таблицы IP-маршрутизации. Все отлично! Маршрут 192.168.2.0/24 был успешно отфильтрован. В следующей статье мы рассмотрим, как можно устранить неполадки с перераспределением маршрутов.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59