Первоначальная установка системы с резервированием, в кластере из двух серверов

Исходные данные

Вариант с резервом,  используется на проектах чаще , поэтому его мы рассмотрим первым. Пример установки на одном сервере

Конфигурация системы  в кластере из двух серверов

В данном разделе использованы специфичные для данного продукта термины, ознакомиться с ними можно здесь.

Техническое задание:

Требуется интеграция программного коммутатора 5 класса ECSS-10 (SSW) на 2-х физических серверах с поддержкой SIP со следующими параметрами на нагрузку группы серверов:

  • Максимальное количество абонентов 15000 (MUL — Max user limit);
  • Максимальное количество одновременных соединений 2000 (MCL — Max call limit);
  • Требуется полный резерв системы ecss (все node резервируется на втором сервере);
  • Количество сетевых интерфейсов ethernet — 3/5.

По техническому заданию требуется определить аппаратную платформу.


Требуемая полоса пропускания СПД  не менее 1000Mb/s

Пример составления аппаратных требований:



Пример разнесения составляющих по адресному пространству 

Имя сервера (хоста)

Роль

Интерфейс

Адрес/Маска

Порт

Статические адреса программного коммутатора

ecss1

Интерфейс управления сервером (порт 2000 ssh)

eth0

192.168.56.41/24

2000

ecss2

Интерфейс управления сервером (порт 2000 ssh)

eth0

192.168.56.42/24

2000

ecss1

Адрес ядра (ecss-core)

net.20

10.0.20.41/245000
ecss2Адрес ядра (ecss-core)net.2010.0.20.42/245000
ecss1Адрес OAM net.1010.0.10.41/24-

ecss2

Адрес OAM 

net.10

10.0.10.42/24-

ecss1, ecss2

Адрес шлюза

eth0

192.168.56.1-

ecss1, ecss2

Адреса DNS-серверов

eth0

8.8.8.8-
ecss1, ecss2Адреса NTP-серверовeth010.136.16.211, 10.136.16.212123

Виртуальные адреса программного коммутатора

ecss1Виртуальный адрес программного адаптера хоста ecss1net.20:SIP110.0.20.31/24-
ecss2Виртуальный адрес программного адаптера хоста ecss2net.20:SIP210.0.20.32/24-
ecss1Запасной виртуальный адрес программного адаптера хоста ecss2 на хосте ecss1net.20:SIP210.0.20.32/24-
ecss2Запасной виртуальный адрес программного адаптера хоста ecss1 на хосте ecss2net.20:SIP110.0.20.31/24-


Заполнить данные параметры для SSW  из проектного технического задания

Имя сервера (хоста)

Роль

Интерфейс

Адрес/Маска

Порт

Статические адреса программного коммутатора

ecss1

Интерфейс управления сервером (порт 2000 ssh)



2000

ecss2

Интерфейс управления сервером (порт 2000 ssh)



2000

ecss1

Адрес ядра (ecss-core)



5000
ecss2Адрес ядра (ecss-core)

5000
ecss1Адрес OAM 

-

ecss2

Адрес OAM 



-

ecss1, ecss2

Адрес шлюза

-

ecss1, ecss2

Адреса DNS-серверов

-
ecss1, ecss2Адреса NTP-серверов

123

Виртуальные адреса программного коммутатора

ecss1Виртуальный адрес программного адаптера хоста ecss1

-
ecss2Виртуальный адрес программного адаптера хоста ecss2

-
ecss1Запасной виртуальный адрес программного адаптера хоста ecss2 на хосте ecss1

-
ecss2Запасной виртуальный адрес программного адаптера хоста ecss1 на хосте ecss2

-



Включение в сеть

Топологию включения сервера в сеть для обеспечения резервирования рекомендуется делать с использованием 2-х коммутаторов. Пример на рисунке ниже.

Рисунок 1 — Схема организации связи


Последовательность установки SSW ECSS10 в кластере из двух серверов

Установка SSW ECSS10 состоит из 2-х основных частей :

Подготовительный этап

В этом разделе приведено описание инсталляции операционной системы, а также необходимых и дополнительных пакетов. Система ECSS-10 версии 3.14 работает под управлением ОС  Astra Linux 1.8.

Предварительные требования

Установка ОС

Для установки ОС необходимо выполнить следующее:

Таблица 1 — Вариант размещения информации в файловой системе на физических носителях для серверов

1Загрузочный раздел операционной системы (создается автоматически)bootraid 1:hdd1,hdd2boot/bootext41 GbПервичный
2Корневой раздел операционной системыrootraid 1:hdd1,hdd2root/ext430 GbЛогический
3Информация локальных баз данныхmnesiaraid 1:hdd1, hdd2mnesia/var/lib/ecssext430 GbЛогический
4Распределенная БД для хранения медиаресурсовglusterfsraid 1:hdd1, hdd2 или hdd3glusterfs/var/lib/ecss/glusterfs*ext4Max GbЛогический
5Журналы функционирования подсистем ОСlograid 1:hdd1,hdd2 или hdd3log/var/logext420 GbЛогический
6Журналы функционирования подсистем ECSSecss_lograid 1:hdd1,hdd2 или hdd3ecss_log/var/log/ecssext420 GbЛогический
7Базы данныхecss_dbraid 1:hdd1,hdd2 или hdd3ecss_db/srv/ecss/ecss-postgres-bdr-ssw/ext4100–400 Gb**Логический
8Файлы пользователяhomeraid 1:hdd1,hdd2 или hdd3home/homeext410 GbЛогический


* Если сервер не будет работать в кластере, то вместо glusterfs создается раздел /var/lib/ecss/restfs.

** Рекомендуемое значение для серий Light, Light+, Midi — 100 Gb. Рекомендуемое значение для серии Heavy — 200 Gb,  Super Heavy — 400 Gb.

Для работы системы необходимо как минимум 256 Gb свободного пространства.

На серверах системы необходимо настроить параметр "hostname".

На всех серверах системы желательно указать одинаковое имя пользователя (любое, кроме ssw). Лицензия ECSS-10 привязывается к ключу eToken/ruToken и к имени компьютера (hostname). Системный пользователь ssw создается при инсталляции пакета ecss-user.

При установке системы в кластере, рекомендуемое значение hostname для первого сервера — ecss1, для второго — ecss2.

Проверка установки ОС


Проверка в основном сводится к правильности создания разделов диска и наличия доступа по ssh.

Для вывода информации о состоянии дискового пространства введите команду df -h. Она покажет общее и занятое место в разделах. Размеры разделов должны соответствовать проекту и введенным значениям при установке.

Для проверки доступа по ssh с машины, находящейся в одной подсети со вновь установленным сервером, нужно выполнить команду:

ssh <user>@<IP_ecss>

где:

Настройка /etc/hosts

Доменному имени хоста ecss1 должен соответствовать адрес 127.0.1.1. Также нужно прописать адрес хоста ecss2. Для этого в файле /etc/hosts необходимо прописать IP-адреса хостов ecss.

Например, для кластера: ecss1 имеет адрес 10.0.10.41, ecss2 — 10.0.10.42. Данные адреса нужно прописать в /etc/hosts:
посмотреть можно командой cat /etc/hosts
изменить/добавить командой sudo nano /etc/hosts
после модификации должен проходить пинг с сервера ecss1 ping ecss2 и наоборот с сервера ecss2 ping ecss1

sudo nano /etc/hosts


127.0.0.1 localhost
10.0.10.41 ecss1
10.0.10.42 ecss2
127.0.0.1 localhost
10.0.10.42 ecss2
10.0.10.41 ecss1

Конфигурация репозиториев


После установки для обновления будет использоваться только образ DVD диска, загрузка с репозитория отключена. Давайте разрешим обновление пакетов с репозитория Astra Linux.

sudo nano /etc/apt/sources.list

привести информацию в файле к следующему виду:

ddeb https://download.astralinux.ru/astra/frozen/1.8_x86-64/1.8.3/uu/1/extended-repository/ 1.8_x86-64 main non-free non-free-firmware contrib
deb https://download.astralinux.ru/astra/frozen/1.8_x86-64/1.8.3/uu/1/main-repository/ 1.8_x86-64 main contrib non-free non-free-firmware
#deb cdrom:[OS Astra Linux 1.8.1.12  DVD]/ 1.8_x86-64 contrib main non-free non-free-firmware

Добавить репозиторий Eltex:

sudo sh -c "echo 'deb [arch=amd64] http://archive.eltex.org/ssw/1.8_x86-64/3.17 stable main extras external' >> /etc/apt/sources.list.d/eltex-ecss10-stable.list"

Далее необходимо выполнить импорт ключа командой:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 33CB2B750F8BB6A5

Изменение приоритета репозиториев

Для установки Erlang, Nodejs и Elixir из репозитория Eltex, необходимо изменить приоритет репозиториев для данных пакетов.

Добавить в файл /etc/apt/preferences.d/erlang строки:

sudo sh -c "echo -e 'Package: erlang*\nPin: version 2:24.3*\nPin-Priority: 1000' >> /etc/apt/preferences.d/erlang"
Package: erlang*
Pin: version 2:24.3*
Pin-Priority: 1000

Добавить в файл /etc/apt/preferences.d/nodejs строки:

sudo sh -c "echo -e 'Package: nodejs*\nPin: version 14.20.0-1nodesource1*\nPin-Priority: 1000' >> /etc/apt/preferences.d/nodejs"
Package: nodejs*
Pin: version 14.20.0-1nodesource1*
Pin-Priority: 1000

Добавить в файл /etc/apt/preferences.d/elixir строки:

sudo sh -c "echo -e 'Package: elixir*\nPin: version 1.14*\nPin-Priority: 1000' >> /etc/apt/preferences.d/elixir"
Package: elixir*
Pin: version 1.14*
Pin-Priority: 1000


Выполнить обновление:

sudo apt update

Установить пакет ntp следующей командой:

sudo apt install ntp

"Оптимизация" Операционной Системы 

Выставить параметры ОС в режим производительности

Используем  утилиту cpufrequtils.

sudo apt install cpufrequtils

по умолчанию после инсталляции ОС использует режим "ondemand" - "по запросу" (производительность CPU по запросу приложений, экономит электроэнергию , но ниже производительность):

cat /etc/init.d/cpufrequtils | grep GOVERNOR=

в выходном сообщении системы , режим работы по умолчанию после инсталляции - "ondemand" :

GOVERNOR="ondemand"

Установить режим - результативность/производительность  -  в файле /etc/init.d/cpufrequtils значение "ondemand" заменить на "performance"

sudo sed -i 's/GOVERNOR="ondemand"/GOVERNOR="performance"/g' /etc/init.d/cpufrequtils

Перезапустить утилиту:

sudo /etc/init.d/cpufrequtils restart 

Затем выполнить команду:

sudo systemctl daemon-reload

Отключить SWAP

Ubuntu сервер SSW работает в реальном масштабе времени , поэтому все необходимые данные должны находится в оперативной памяти, использование  файла подкачки (swap-файл - /swap. img) может привести к увеличению времени обработки вызовов приложения SSW ECSS10 , что недопустимо. Swap - отключаем. 
Выполнить последовательно три команды:

Отключение Swap:

sudo swapoff -a

Удалить файл swap.img.

sudo rm /swapfile

Удалить эту строчку (//swapfile swap swap defaults 0 0)

sudo nano /etc/fstab


# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during curtin installation
UUID=4c88cb4a-42c9-4b52-98c2-78da7e23b621 /                       ext4    defaults        1 1

Для проверки выполните команду  free -h:

free -h

Размер Swap равен 0 - то есть он выключен

free -h
              total        used        free      shared  buff/cache   available
Mem:           3,9G        110M        3,2G        820K        535M        3,5G
Swap:            0B          0B          0B

Установка часового пояса

При инсталляции astara linux не предлагается установить часовой пояс(по умолчанию устанавливается время UTC). Его нужно установить вручную (для корректной работы системы тарификации , работ по расписанию и т.д. ), например:

sudo timedatectl set-timezone Asia/Novosibirsk

В случае выноса компонентов системы на разные серверы/ВМ (ecss-node/ecss-msr) необходимо указывать единый часовой пояс, для всех компонентов системы.

Улучшение работы высоконагруженных серверов

Улучшить работу высоконагруженных серверов можно увеличив лимит открытых файлов.

Для установки лимита открытых файлов необходимо:

Проверить текущий лимит командой:

ulimit -a

результат :

eltex@ecss1:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15515
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 15515
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Данного лимита ( open files  1024 ) недостаточно для нормальной работы высоконагруженных серверов.

Установить лимит открытых файл для каждого пользователя:

sudo sed -i  '55i\*                soft    nproc           65536\n*                hard    nproc           131072\n*                soft    nofile          65536\n*                hard    nofile          131072\nroot             -       memlock         unlimited' /etc/security/limits.conf

# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - a user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#        - NOTE: group and wildcard limits are not applied to root.
#          To apply a limit to the root user, <domain> must be
#          the literal username root.
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#        - chroot - change root to directory (Debian-specific)
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4
*                soft    nproc           65536
*                hard    nproc           131072
*                soft    nofile          65536
*                hard    nofile          131072
root             -       memlock         unlimited

# End of file

 Настройка сетевых интерфейсов

Получение адресов на сетевых интерфейсах по DHCP недопустимо на серверах ECSS.

Сетевые настройки необходимо выполнять с помощью Netplan.

По умолчанию в Astra Linux пакет netplan не установлен.

Установить пакеты для обслуживание функции netplan:

sudo apt install -y dialog libssl1.0.0 netplan.io

Сейчас можно выполнить конфигурацию netplan:

sudo nano /etc/netplan/ecss.yaml
Пример netplan 
Netplan для интерфейсов сервера ecss1 (/etc/netplan/ecss.yaml)Netplan для интерфейсов сервера ecss2 (/etc/netplan/ecss.yaml)
# Netplan для хоста ecss1 программного коммутатора
# Обратите внимание на обязательное наличие минимум двух пробелов в каждой строке и секции (кроме строки секции network)

network:
  version: 2 # Версия netplan
  renderer: networkd # Исполнитель конфигураций netplan
  ethernets: # Раздел описания интерфейсов ethernet
    enp0s3: # Название внутреннего интерфейса ВМ 
      dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
      addresses: [192.168.56.41/24] # Интерфейс управления ОАМ
      gateway4: 192.168.56.1
    enp0s8: # Название внешнего интерфейса ВМ 
      dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
  vlans:
    net.10: # Интерфейс управления/Postgres
        id: 10
        link: enp0s8
        addresses: [10.0.10.41/24]# Адрес для Postgres
    net.20: # Интерфейс для VoIP
      id: 20
      link: enp0s8
      addresses: [10.0.20.41/24]# Адрес для VoIP / SIP
      routes:
        - to: 10.0.20.0/24
          via: 10.0.20.1
# Netplan для хоста ecss2 программного коммутатора
# Обратите внимание на обязательное наличие минимум двух пробелов в каждой строке и секции (кроме строки секции network)

network:
  version: 2 # Версия netplan
  renderer: networkd # Исполнитель конфигураций netplan
  ethernets: # Раздел описания интерфейсов ethernet
    enp0s3: # Название внутреннего интерфейса ВМ 
      dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
      addresses: [192.168.56.42/24] # Интерфейс управления ОАМ
      gateway4: 192.168.56.1
    enp0s8: # Название внешнего интерфейса ВМ 
      dhcp4: no # Отключаем на интерфейсах динамическое распределение IP-адреса
  vlans:
    net.10: # Интерфейс управления/Postgres
        id: 10
        link: enp0s8
        addresses: [10.0.10.42/24]# Адрес для Postgres
    net.20: # Интерфейс для VoIP
      id: 20
      link: enp0s8
      addresses: [10.0.20.42/24]# Адрес для VoIP / SIP
      routes:
        - to: 10.0.20.0/24
          via: 10.0.20.1


Так же  проверить отсутствие в каталоге /etc/netplan/ других файлов, если  другие файлы присутствуют , то их нужно переместить в другой каталог или удалить, в противном случае возможна некорректная настройка сетевых интерфейсов и некорректная работа SSW. 

ls -la /etc/netplan/ 


Применить, установленные параметры командой:

sudo netplan apply

Просмотреть получившиеся настройки можно при помощи команд ifconfig или ip a:

Для применения новых сетевых настроек необходимо выполнить команду netplan apply. Перезапуск сети или системы не требуется. Подробнее про настройки netplan см. в Приложении Е. Netplan.


Обновление ОС и инсталляция необходимого ПО

Обновление системы

Перед началом установки ecss необходимо обновить ОС:

sudo apt update
sudo apt upgrade --enable-upgrade

Доступ между серверами без использования пароля

Далее следует разрешить доступ между серверами с через ssh по rsa-ключам  - без использования пароля.

На хосте ecss1 (затем на ecss2) сгенерировать rsa-ключ следующий командой (выполнить  без sudo, чтобы ключ был создан для текущего пользователя), на вопросы,  использовать значение по умолчанию, нажав три раза Enter:

ssh-keygen

Скопировать rsa-ключ на сервер партнера ecss2 командой  - ssh-copy-id ecss2.

ssh-copy-id ecss2

Скопировать rsa-ключ на сервер партнера ecss1 командой  - ssh-copy-id ecss1.

ssh-copy-id ecss1

Проверить подключение между серверами,  со стороны сервера ecss1 - ssh ecss2 соединение должно быть установлено без запроса пароля . По окончанию теста вернутся  обратно на сервер ecss1 , командой exit.

ssh ecss2

Аналогичным образом со стороны сервера ecss2 - ssh ecss1 соединение должно быть установлено без запроса пароля . По окончанию теста вернутся обратно на сервер ecss2 , командой exit.

ssh ecss1

Инсталляция необходимого ПО

Установка дополнительных пакетов программ

Для работы SSW,  потребуются дополнительные пакеты ПО не установленные в Astra Linux по умолчанию, но доступные в репозитории.

sudo apt install ntp iptables tcpdump vlan dnsmasq aptitude atop ethtool htop mc minicom mtr-tiny nmap pptpd  screen ssh tftpd-hpa sngrep tshark  gnuplot debconf-utils keepalived attr bridge-utils ncdu wget


Список обязательного сервисного программного обеспечения:

sudo apt install ntp tcpdump vlan dnsmasq


ntpNTP-сервер
tcpdumpсниффер пакетов
vlanуправление VLAN
dnsmasqлегковесный DNS/DHCP-сервер

Список рекомендуемого диагностического и вспомогательного программного обеспечения:

sudo apt install aptitude atop ethtool htop mc screen ssh tftpd sngrep tshark gnuplot debconf-utils iotop ncdu


aptitudeустановка программ из репозиториев, рекомендуется использовать вместо программы apt/apt-get
atopмониторинг загрузки хоста с функцией периодического сохранения информации в файлы
ethtoolпросмотр статистики сетевых интерфейсов
htopмониторинг процессов
mcфайловый менеджер
screenмультиплексор терминалов
sshсервер и клиент SSH
tftpdTFTP-сервер
sngrepтрассировка sip
tsharkконсольный аналог wireshark
gnuplotвывод графиков статистики
debconf-utilsнабор утилит для работы с базой debconf
iotopинструмент для мониторинга использования ввода-вывода (IO) на диске в реальном времени в Linux
ncduутилита для поиска больших директорий в системе Linux


Данное программное обеспечение не требуется для работы системы ECSS-10, однако может упростить сервисное обслуживание системы и её отдельных компонентов со стороны инженеров эксплуатации и техподдержки.

Список обязательных пакетов для схем с резервированием:

sudo apt install ifenslave-2.6 keepalived attr


ifenslave-2.6управление BOND-интерфейсами
keepalivedсервис мониторинга серверов/служб в кластере
attrсервис управления атрибутами файловых систем

Список дополнительных пакетов для схем с резервированием:

sudo apt install bridge-utils ethtool


bridge-utilsуправление bridge-интерфейсами
ethtoolуправление и мониторинг сетевых интерфейсов



Для просмотра установленных пакетов выполнить следующую команду (данный пункт является необязательным: его можно выполнить, если  не уверены, что какие-то пакеты установлены):

sudo dpkg --get-selections


Перед началом установки пакетов ecss , нужно убедится в соответствии полосы пропускания СПД необходимым требованиям.
Для этого выполнить команду  sudo ethtool  <имя интерфейса> для всех физических интерфейсов.

sudo ethtool net.20
Settings for net.20:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Supported pause frame use: No
    Supports auto-negotiation: Yes
    Supported FEC modes: Not reported
    Advertised link modes:  10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Advertised pause frame use: No
    Advertised auto-negotiation: Yes
    Advertised FEC modes: Not reported
    Speed: 1000Mb/s
    Duplex: Full
    Auto-negotiation: on
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    MDI-X: off (auto)
    Link detected: yes

Проверить значение  следующих параметров:
Advertised auto-negotiation: Yes
Speed: 1000Mb/s  (не менее)
Duplex: Full

Инсталляция пакетов ECSS

Предварительные требования

  ┌ версия ПО ECSS. Сейчас в заявке на сертификацию она заявлена как 3. 
  | Мы её менять не будем до следующей сертификации или
  │ выпуска принципиально новой версии системы.
  │
  │     ┌ версия System Release. Общая версия для всех компонент входящих в конкретный релиз. 
  |     | Меняем её централизовано, когда
  │     │ принимаем решение о выпуске нового релиза. Релизы между собой обычно не совместимы.
┌─┴┐ ┌──┴─┐
ECSS.SysRel.SubMaj.SubMin
            └──┬─┘ └──┬─┘
               │      └ версия Subsystem minor. Минорную версию подсистемы устанавливает разработчик подсистемы. 
               |        Минорную версию
               │        меняем при добавлении патча. Как правило, минорные версии в рамках одной мажорной версии 
               │        совместимы между собой и отличаются в рамках конкретных патчей.
               │
               └ версия Subsystem major. Мажорная версия устанавливается разработчиком подсистемы. 
                 Мажорную версию подсистемы необходимо менять при внесении в подсистему существенных изменений.


Утилита установки пакетов APT анализирует версию пакета слева направо, для примера, мы имеем пакет 14.14.7.7 , 
в репозитории находятся пакеты
14.14.7.8
14.14.7.9
14.14.8.1
14.14.20 -14.14.28
то при выполнении команды sudo apt install имя пакета → будет автоматически проверен и установлен пакет 14.14.28 , так как он самый последний, анализ будет выполнен по 3-й позиции  (major), анализ по 4-й (minor) выполнен не будет (аналогичным образом будет выполнятся команда sudo apt upgrade --enable-upgrade).

В случае если для конкретной ситуации требуется перейти с версии 14.14.7.7 на версию 14.14.7.9 , стандартная команда → sudo apt upgrade --enable-upgrade , нам не поможет, так как будет выбран самый новый пакет, в данной ситуации нам необходимо в явном виде указать какую версию пакета мы хотим установить, в данном примере мы должны выбрать команду → sudo apt install имя пакета=14.14.7.9 . Обычно это необходимо для тестирования определенного патча, для стандартных обновлений достаточно выбора привычной команды установки/обновления пакета


В ходе установки пакетов ECSS нужно будет ответить на ряд вопросов для формирования необходимой конфигурации. Для автоматической загрузки требуемых настроек можно воспользоваться командами из пакета debconf-utils.

Описание и примеры использования при работе с debconf приведены в Приложении В. Debconf.

Для инсталляции системы ECSS-10 необходимо устанавливать пакеты в порядке, в котором они описаны ниже в документации.

Инсталляция обязательных пакетов ECSS

Установка пакета ecss-dns-env

Выполнить следующую команду:

sudo apt install -y ecss-dns-env

Настройщик предложит выбрать разделы для настройки по вопросам ниже. Нужно выбрать broker. (для примера 10.0.10.51 и 10.0.10.52 )

Вопрос ecss-dns-envОтветы для ecss1Ответы для ecss2Пример
[Primary broker] Введите адрес ([Primary broker] Enter ip)10.0.10.41 (необходимо ввести)10.0.10.41 (необходимо ввести)


[Secondary broker] Введите адрес ([Secondary broker] Enter ip)10.0.10.42 (необходимо ввести)10.0.10.42 (необходимо ввести)



В случае последующей коррекции IP-адресов следует использовать команду: 

sudo dpkg-reconfigure ecss-dns-env


Настройка преобразование DNS имени в IP адрес

Для корректной работы системы, после установки пакета ecss-node требуется скорректировать дефолтные установки . Для этого:

В файле /etc/resolv.conf изменить параметр nameserver установленный системой по умолчанию на 127.0.0.1 (если строк nameserver несколько - остальные удалить/закомментировать):

sudo nano /etc/resolv.conf


domain eltex.loc
search eltex.loc
nameserver 127.0.0.1

В Astra Linux после перезагрузки файл /etc/resolv.conf приводится к исходному виду, поэтому его нужно сделать неизменяемым:

sudo chattr +i /etc/resolv.conf

Для доступа к репозиториям AstraLinux и Элтекс нужно указать локальный DNS или глобальный (для примера 8.8.8.8 или 77.88.8.8) 

Добавить в файл /etc/dnsmasq.d/ecss строки server=<Ipadd DNS сервера> (в примере 77.88.8.8) :

sudo sh -c "echo 'server=77.88.8.8' >> /etc/dnsmasq.d/ecss"

Перезапустить сервис:

sudo systemctl restart dnsmasq.service



Установка  Postgres

Перед установкой ecss-postgres-bdr-ssw в системе, в apt sources, должен быть добавлен docker для этого выполнить следующие команды:

sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo sh -c "echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu   jammy stable' >> /etc/apt/sources.list.d/docker.list"
sudo apt update && sudo apt upgrade --enable-upgrade

Установка пакета ecss-postgres-bdr-ssw

Выполняется последовательно, первым устанавливается на сервере который работает в режиме "Master"

sudo apt install -y ecss-postgres-bdr-ssw

При конфигурации пакета ecss-postgres-bdr-ssw будут заданы вопросы:

Вопросы ecss-postgres-bdr-sswОтветы для ecss1 (Master)Пример
Текущий IP-адрес сетевого интерфейса.Выбрать из списка IP-адрес для работы с Postgres


Установка в кластере?Yes (значение по умолчанию)

Является ли этот узел мастером?Yes  (необходимо выбрать)



sudo apt install -y ecss-postgres-bdr-ssw

При конфигурации пакета ecss-postgres-bdr-ssw будут заданы вопросы:

Вопросы ecss-postgres-bdr-sswОтветы для ecss2 (Slave)Пример
Текущий IP-адрес сетевого интерфейса.Выбрать из списка IP-адрес для работы с Postgres


Установка в кластере?Yes (значение по умолчанию)

Является ли этот узел мастером?No (значение по умолчанию)

IP-адрес, используемый для подключения к кластеру:Указать IP-адрес Master (ecss1)



Проверить корректность настройки репликации 

Во время установки в директорию /srv/ecss/ecss-postgres-bdr-ssw устанавливаются скрипт postgresbdr_ssw.sh

Для проверки репликации выполнить следующие команды:

cd /srv/ecss/ecss-postgres-bdr-ssw
sudo ./postgresbdr_ssw.sh check


Вывод на хостах должен быль одинаковый:



sudo ./postgresbdr_ssw.sh check
Enter master ip please
Like 10.150.150.15
10.0.10.41
Enter slave ip please
10.0.10.42
Press enter with empty password
Просто щелкайте Enter не вводя пароль
q - выход из просмотра таблицы (если необходимо)
таблица нод на мастере по ecss_storekeeper_db
таблица нод на слейве по ecss_storekeeper_db
таблица коннекций на мастер по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7577617967861174292 | host=10.0.10.41 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
 7577618825220177940 | host=10.0.10.42 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(2 строки)

таблица коннекций на слейве по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7577617967861174292 | host=10.0.10.41 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
 7577618825220177940 | host=10.0.10.42 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(2 строки)


sudo ./postgresbdr_ssw.sh check
Enter master ip please
Like 10.150.150.15
10.0.10.41
Enter slave ip please
10.0.10.42
Press enter with empty password
Просто щелкайте Enter не вводя пароль
q - выход из просмотра таблицы (если необходимо)
таблица нод на мастере по ecss_storekeeper_db
таблица нод на слейве по ecss_storekeeper_db
таблица коннекций на мастер по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7577617967861174292 | host=10.0.10.41 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
 7577618825220177940 | host=10.0.10.42 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(2 строки)

таблица коннекций на слейве по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7577617967861174292 | host=10.0.10.41 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
 7577618825220177940 | host=10.0.10.42 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(2 строки)

sudo ./postgresbdr_ssw.sh check
[sudo] password for abf: 
Sorry, try again.
[sudo] password for abf: 
Enter master ip please
Like 10.150.150.15
10.0.10.51
Enter slave ip please
10.0.10.52
Press enter with empty password
Просто щелкайте Enter не вводя пароль
q - выход из просмотра таблицы (если необходимо)
таблица нод на мастере по ecss_storekeeper_db
     node_sysid      |                                    node_local_dsn                                     | node_init_from_dsn 
---------------------+---------------------------------------------------------------------------------------+--------------------
 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 | 
(1 row)

таблица нод на слейве по ecss_storekeeper_db
psql: error: connection to server at "10.0.10.52", port 5439 failed: Connection refused
    Is the server running on that host and accepting TCP/IP connections?
таблица коннекций на мастер по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(1 row)

таблица коннекций на слейве по ecss_storekeeper_db
psql: error: connection to server at "10.0.10.52", port 5439 failed: Connection refused
    Is the server running on that host and accepting TCP/IP connections?

sudo ./postgresbdr_ssw.sh check
Enter master ip please
Like 10.150.150.15
10.0.10.51
Enter slave ip please
10.0.10.52
Press enter with empty password
Просто щелкайте Enter не вводя пароль
q - выход из просмотра таблицы (если необходимо)
таблица нод на мастере по ecss_storekeeper_db
     node_sysid      |                                    node_local_dsn                                     | node_init_from_dsn 
---------------------+---------------------------------------------------------------------------------------+--------------------
 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1 | 
(1 row)

таблица нод на слейве по ecss_storekeeper_db
таблица коннекций на мастер по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(1 row)

таблица коннекций на слейве по ecss_storekeeper_db
     conn_sysid      |                                       conn_dsn                                        
---------------------+---------------------------------------------------------------------------------------
 7569499877813944343 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
 7569514001040228374 | host=10.0.10.52 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
 7569871659329171478 | host=10.0.10.51 port=5439 dbname=ecss_storekeeper_db user=postgres password=postgres1
(3 rows)



Установка ecss-node

Установка обязательного пакета ecss-node включает в себя установку и первоначальную настройку основных подсистем.

В системе уже должен быть установлен пакет ecss-postgres-bdr-ssw

Для установки пакета ecss-node выполните команду:

sudo apt install -y ecss-node

Во время установки пакета создается пользователь ssw, от имени которого запускаются все сервисы ecss*. Создаются необходимые каталоги, выполняется настройка DNS, идет настройка SSL-сертификатов.

При установке также будет установлен пакет ecss-user

Установка на сервере ecss1

Во время установки будет предложено настроить параметры, необходимые для формирования конфигурационных файлов, примеры ответов следует ниже.

Вопросы ecss-userОтветы для ecss1Пример
Хотите ли вы использовать стандартные настройки?Yes (значение по умолчанию)

 
Вопросы ecss-nodeОтветы для ecss1Пример
Идентификатор ECSS-узла в формате DNS (Настройка имени кластера): (в примере abf.test)abf.test (необходимо ввести)

Хотите ли вы использовать стандартные настройки?Yes (значение по умолчанию)

 
Вопросы ecss-userОтветы для ecss1Пример
Максимальный размер несжатого дампа в байтах.8G (значение по умолчанию)

Максимальный размер сжатого дампа в байтах.2G (значение по умолчанию)

Максимальный размер, который может занять каталог /var/lib/systemd/coredump:

default (значение по умолчанию)

Минимальный объем свободного дискового пространства в байтах. 30G (значение по умолчанию)

Сохраните в безопасное место и удалите файл /etc/ecss/ssl/ecss10root.key!

Ok (значение по умолчанию)


После установки пакета ecss-node на хосте ecss1, выполните команду "sudo usermod -a -G ssw <Имя_пользователя>" на хосте ecss1.

sudo usermod -a -G ssw eltex


Затем выполите установку на хосте ecss2. 
Используйте режим "Скопировать существующие сертификаты (copy) по ssh" с сервера ecss1

Установка на сервере ecss2

sudo apt install -y ecss-node

Во время установки будет предложено настроить параметры, необходимые для формирования конфигурационных файлов, примеры ответов следует ниже.


Вопросы ecss-userОтветы для ecss2Пример
Хотите ли вы использовать стандартные настройки?No (значение по умолчанию)

Хотите ли вы выключить ежедневное обновление apt-пакетов?Yes (значение по умолчанию)

Как вы хотите сконфигурировать сертификаты?copy (необходимо выбрать)

Вы хотите установить сертификаты в систему?Yes (значение по умолчанию)

Каким методом вы хотите скопировать сертификаты?ssh (необходимо выбрать)

Введите имя хоста для подключения:ecss1 (необходимо ввести)

Введите порт хоста для подключения:22 (значение по умолчанию)

Введите логин для подключения: (для примера eltex)eltex (необходимо ввести)

Какой метод авторизации использовать?password (необходимо выбрать)

Введите пароль для подключения:  

Введите путь до сертификатов:/etc/ecss/ssl (значение по умолчанию)

 
Вопросы ecss-nodeОтветы для ecss2Пример
Идентификатор ECSS-узла в формате DNS (Настройка имени кластера): (в примере abf.test)abf.test (необходимо ввести)

Хотите ли вы использовать стандартные настройки?Yes (значение по умолчанию)

 
Вопросы ecss-userОтветы для ecss2Пример
Максимальный размер несжатого дампа в байтах.8G (значение по умолчанию)

Максимальный размер сжатого дампа в байтах.2G (значение по умолчанию)

Максимальный размер, который может занять каталог /var/lib/systemd/coredump:

default (значение по умолчанию)

Минимальный объем свободного дискового пространства в байтах. 30G (значение по умолчанию)

Сохраните в безопасное место и удалите файл /etc/ecss/ssl/ecss10root.key!

Ok (значение по умолчанию)

Проверить статус сервисов следующей командой:

systemctl is-active ecss-core ecss-pa-sip ecss-ds ecss-mediator ecss-mycelium

В случае статуса "active" продолжаем дальше, в случае статуса "inactive" выполнить команду "sudo systemctl restart ecss-<имя пакета>"

systemctl is-active ecss-core ecss-pa-sip ecss-ds ecss-mediator ecss-mycelium
active
active
active
active
active


Установка паспорта и лицензий

ECSS10 поддерживает два варианта лицензирования: default и distributed. В зависимости от варианта лицензирования последовательность действий отличается. Выберете нужный вам вариант:


Под паспортом системы ECSS-10 понимается связь определенной инсталляции (SSW_ID) с USB-ключом. Паспорт гарантирует, что заказчик не сможет запустить больше подсистем DS с заданным SSW_ID, чем количество USB-ключей. Система без паспорта не работает.

Лицензионный ключ содержит в себе информацию о лицензионных ограничениях. Информация привязана к определенному SSW_ID. Позволяет добавлять лицензионные ограничения к определенной инсталляции системы ECSS-10. Если не добавлено ни одной лицензии, то действуют ограничения по умолчанию. Например, по умолчанию разрешено не более двух одновременных вызовов. Добавляя лицензию, можно расширить это количество до произвольных значений.


<licence> — последовательность цифр, букв и других символов без кавычек, следующая за строкой Licence: в файле лицензии.
<passport> — последовательность цифр, букв и других символов без кавычек, следующая за строкой Passport: в файле лицензии.

Если данные лицензии и паспорта будут введены корректно, то система выдаст подтверждение: ОК.


Перед началом работы проверьте наличие Token в системе.

Для проверки работы токена можно использовать приложение pkcs11-tool. Возможно проверить следующее:

Вывести общую информацию для ключа:

  • для eToken:
pkcs11-tool --module /usr/lib/libeToken.so -I

Cryptoki version 2.1
Manufacturer     SafeNet, Inc.
Library          eToken PKCS#11 (ver 8.1)
Using slot 0 with a present token (0x0)
  • для Рутокен:


pkcs11-tool --module /usr/lib/ecss/ecss-ds/lib/lpm_storage-<VERSION>/priv/x64/librtpkcs11ecp.so -I

Cryptoki version 2.20
Manufacturer     Aktiv Co.
Library          Rutoken ECP PKCS #11 library (ver 1.5)
Using slot 0 with a present token (0x0)


Расположение модуля для Рутокен может отличаться в зависимости от версии подсистемы DS. В общем случае файл располагается в /usr/lib/ecss/ecss-ds/lib/lpm_storage-<ВЕРСИЯ ПОДСИСТЕМЫ>/priv/x64/librtpkcs11ecp.so

Для проверки можно использовать общую команду pkcs11-tool --module $(find /usr/lib/ecss/ecss-ds/lib/ -name librtpkcs11ecp.so | head -n1) -L


Остановите пакеты ecss-mycelium и ecss-ds на втором хосте. Если этого не сделать, то паспорт и лицензия могут быть не добавлены с первого раза.

sudo systemctl stop ecss-mycelium


sudo systemctl stop ecss-ds

Перейдите в CLI - CoCon:

ssh admin@localhost -p 8023


ssh admin@localhost -p 8023
The authenticity of host '[localhost]:8023 ([127.0.0.1]:8023)' can't be established.
RSA key fingerprint is SHA256:/reVfo2jbltLDwNpZbiLvibXBwaWJbfSChd1M7wm1nc.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:8023' (RSA) to the list of known hosts.
admin@localhost's password: password


Проверьте состояние системы:

/system-status    
Checking...
┌─┬───────────────┬───────────────────────────┬───────────────┬────────────┬───────┐
│ │     Node      │          Release          │ Erlang nodes  │Mnesia nodes│Uptime │
├─┼───────────────┼───────────────────────────┼───────────────┼────────────┼───────┤
│ │ds1@ecss1      │ecss-ds-3.17.1.0.1656      │ds1@ecss1      │ds1@ecss1   │27m 28s│
│ │mycelium1@ecss1│ecss-mycelium-3.17.1.0.1656│mycelium1@ecss1│not running │27m 29s│
└─┴───────────────┴───────────────────────────┴───────────────┴────────────┴───────┘

Чтобы узлы системы смогли встать в работу, надо сконфигурировать систему указав имена хостов на которых развёрнуты ecss-сервисы.
Команда в коконе: /system/clusters/set [<host1>, <host2>, ... <hostN>].
В примере кластера из 2-х хостов (имя хоста  ecss1 и ecss2) выполнить команду :

/system/clusters/set [ecss1, ecss2]

Выйти из CoCon ("exit"),
Перезапустить ecss сервисы командой:

sudo systemctl restart ecss-core ecss-pa-sip ecss-ds ecss-mediator ecss-mycelium


Далее необходимо загрузить паспорт и лицензии в систему:

/cluster/storage/ds1/licence/set-passport <ssw passport>

/cluster/storage/ds1/licence/set-passport bc3ae6e95822c6896446fb0055fcbd08f16a166f63b47f559ab699325d994f3f90085b88e5073fbc73d3ca6fa45b816b01994f168239bf6e57fbfe5d111dbebc4c494f9fff238e0969ca00b0d13f06c2a70f0e3ff24bb14af8e56d2f4d2b5232dfe24ebefda92013a2b7c1f257a07727d5783c80a55bc4ac4b3876bb5edb134e-433ed1b19a8eff234c325041b58a80131828d586e0624653731216f9aae6eaa2e15b15f71695cd9181c3820fbd261c084bed2c6b303a707ee2bcf45efd33ff4cc1f233bc1fe6ac24ba79b40dc8f99470f2493aba14976def7ceea8c4d83419afabf3b4a526fdc7d148c2cec589355745f32044cff15c6f1b7fdda9488c58fb8a-89c215aed50cfb8e911231887612ada29d5e22b0e7ab536341f76468d88203b1e26bec42db067470f7c7b34fb5b5dfa600abe453059485d80bef4fe722c0857512fe44a9b71544c97e6a3d16557cb7ab498cd17cc9e708da73d2d3346db14bbe190d99b3bd8dc84f39f87af23ad5f99936d1da9c034a0586bb84d142f015494c
[set-passport] You are trying to set ECSS-10 passport with SSW ID ECSS 010070
               (created in 2024/12/27 07:07:09), but passport
               SSW ID is ECSS-3.16-TEST-3
               (created in 2023/08/24 09:51:40) already has been set. 
               All non-compliant licenses will be removed.
Are you sure?: [yes]/no ?> yes
OK


/cluster/storage/ds1/licence/add <ssw licence>

/cluster/storage/ds1/licence/add 27624a5bc87894b9а9053cbac8389d6bb46851148b3c3032689d628afcdd30f58db83bb802f99dc086bca081bf34841501ad64bb0e6b882e7f80d891e06c2173cba1545e801757d61b36cacbb72d68e8bdda91a2ad8625d67db4869a1b24fb351f45bb031f31d6aeb10d18808bf3e1f0891d2d3afb9525f5f276584282d1342e-8e158cb7300179aaa9e3e8b5e781e20eb2b061f083b0680cbdd80e72761f78ab8f0731f13f44f7aff6412f2a1261ddb6bdfb1384dd3a72945f7b30e79441941a1ce5d8095cd498dd6e90134ec1d464c4f11ea351c2d7e24e3042d2b30b3014665a96fc03678ff70b6d775c1f78320f16a170f818538565585fbe306f36a5eab2-f60d370d8599a7c718aca542dc9354c5d1ee8f2d87d6305d56bf305a57ac54ed13891ca0a738ceaeff9а4979d2651249c37a1724fb6725ce9c72006502b4779f534e120689bc60e9e16d22340095ca28df5906а78d0ca27143f1fda6a91e076f440646c4b93b4a0afa5018787ef7b056829b77e0f01a43e1d03deb9c40e8eda5-f7fed4a0ab3dbb5b16eff497afe3da98f2280f56182a0aa2f2ec72f58426f5a2b1db707773f0969e59bf678120847c380530fffc831d8228aed28f1f8487e3a3fb30737c03b89b32d80577e86d055bb0a9acb72685ac97651af1921648f6e40ad913c29902350c8212f15c9fda84882cac607b84024b1f3eb9111f95f4d348b8-643c93fe669eddfc2713df2dbba5eb36c3cf2321a76cf3560856f28b7130892c08da34a2c5bd9d3ea3e6c7445f175d6e41256d226993418660c2693cdd9d845ba95d12ba4f87febce23b55bcd6d75592dd4971186b956f0651717e5c32e31a8846fd313e551a62af9ee39a0c1168feceb9aec18d6923ac8d430e7fa885434578-f425f70b540a21c28d62ecc6e50182ed398b178fb86a86eb2682182c89a8aa15bd95ffd0fbаc73302bcd55238ba752b0073a841c7ff7e5d22fa966677921cb58429ed05efd7b2fefdf53fdb9a6314ef704b43e912806d825ed73eed78b96e2d500a47f0b3e67b95e0276076f7eda020f3427a98449a259d9a628e85cf2725c48-8e051d2ec4959506bb1a90ab2573e1f5d892a26a3525064c7cf754c0bf5ed8f30b890f74f05c6093c34c441cb72650a5c529273b9ca5a19cd1ba530556cd3bf422cec7a93947c3a5207874f034bf388d57a69b9eeaf7e07a489e007d7cc2dd24e349d1f32c41c25b4557b8c041598db632282ab056f7f826cf62a7fb3bdada4f-bd7e2ffe8fbfc3e8fd2b0d3c6ce4961b5d59874bce6783e164c224758d1bc2a459fd5d19719555b2b557111d7aaea5cfdf52fd0b3f473b418cd292f3dc66fd0bec185ad39d1cd2f42dd3а446723ad4a658b2fc6f922290b66a81d9e412ec7372e6920dccbc14a1b8eb1b283edf5de9f99aa86e3502c89257a1eac02f60e09613-627e19ee9a821f7288bd49afe97e9db33b58f7d65dad52d75790664acf59fce89d4e7cf3d242219df02e4f7499bd9ab98620801d294b4818287838ac4ee48440dd2aeb0a11b34baf2def46e42b6cd846e03c4a208b2463328174ae3f7efe5570bab9895fa7aa1eb024d98535da2612aa62dd39a208f7240a6c7d2acb748543be-a6baca7aabe885125b494d736d16b99bf4c89f4b309ca07f188bfc483473e1a0e7d3d6890ef9df921e09270fe107fdfа7ed8fd043ebc5d5ab32ffb9b7994897f4b019fd68c5191d2ba9bce9ac43384abe5325e502c6bdfe57ae13abb9e9b2527b533375330ae981a02b19103e00c24f30deb4f0baf406316adf047e6cbeb4647-397dcaa7d2aef37f17e9аf0d92f1e10f3f90f0bff22082b806039b78286b4f9b13528a1efb32c3e4c79c033cb8b24ef038863d2f5e1adba2885a3dbaee431edc3d0dc7529f0fc0a0e87492a90b95a1e29070e01e43404bfcb2cf7a5100cdaacb1325f5a67f282fc7a8937b1c402111717f2a18d241e38da22e8516e5fd8ef24d-717730cc35c98ee6f397b59b69b67a708b6cd49c88cf0c24af00d55d85461e01455f647588893bb14f529f0ebd761a47b14df2234d28efe00c941b9ebа9f403d0988867be7c8c18b3682dd7d29534bbаf11413aa1fdc9472484e6a56125ae4c046a4e5375cefe309efd987a40b20843a67ebea91d141df8b854acd6e21c2ee87-4fc79e679e9e59ded4c8b65c48f84fc2a653ca306b3052866b27d3ee1c10467aab6aab20a053f18bf594a9824efa03f076f821b0c2fe69f0dfaf7bdead745351082ad28383451a40c7fcf67b93f55e7d966a979444147388d105f70bfb7d837a7ee3d58a15d52c71e73c48278db4086b8b52c0ddb7915de27ad21bb17f9493b1-cf76879572a2112483c29de9436e9c12ceff6171e104cf23658а65ba4ebc6c94790f5039453cbdc6cff3b205870d13d483918c884992542dа86a584469ba7ace7da91b883c54ecb3f36aca0847d5915fdd518539aadc48e5d9c30e2be4ba3b020689c72500f4b0c05380a7a59fe27827e472cf3f4e94d9be13e2fd0bfaf22475-5b05e03a53b6587009e61f238ead152b8d04ac996ca7b736dca10d389f95b5f219d78035b3302ce542bace36c599c7de7bc6c3c6de112da4861d097c5acd3b7b6b7bf318a6bacf4d395dbbbf84b65a85fd41f06a18488835e9a5edcf5664c23d02a15647d1b9a2466b01c6a5a8d39888dee5de3ea1929607191f93eb0221c697
┌─┬───────────────────────────────────────────────┬──────────────────┬────────────────────────────┐
│A│                  Description                  │    Old Value     │         New Value          │
├─┼───────────────────────────────────────────────┼──────────────────┼────────────────────────────┤
│^│Support for reservation of call-processes      │false             │true                        │
│^│Maximum call duration (in seconds)             │3600              │2678400                     │
│^│Maximum number of simultaneous calls           │500000            │10000                       │
│^│Subscribers limit                              │6000000           │500000                      │
│^│Virtual subscribers limit                      │1000000           │1000                        │
│^│Add-on conferences                             │                  │                            │
│^│ total count                                   │50                │1000                        │
│^│Add-on conferences                             │                  │                            │
│^│ members of the one add-on conference          │50                │300                         │
│^│Chat rooms                                     │                  │                            │
│^│ total count                                   │50                │100                         │
│^│Chat rooms                                     │                  │                            │
│^│ members of the one chatroom                   │50                │300                         │
│^│Meet Me                                        │                  │                            │
│^│ total count                                   │50                │100                         │
│^│Meet Me                                        │                  │                            │
│^│ members of the one Meet Me conference         │50                │300                         │
│^│SORM                                           │                  │                            │
│^│ enabled                                       │false             │true                        │
│+│ channels on SORM mediator                     │                  │64                          │
│^│Sorm extractor                                 │none              │mfi                         │
│^│Support antifraud system                       │none              │custom                      │
│^│Call center                                    │                  │                            │
│^│ active supervisors                            │1000              │100                         │
│^│Teleconference                                 │                  │                            │
│^│ channels                                      │5000              │2000                        │
│^│Teleconference                                 │                  │                            │
│^│ max members of one teleconference             │100               │200                         │
│^│Teleconference                                 │                  │                            │
│^│ active count                                  │50                │32                          │
│^│TSMN system                                    │                  │                            │
│^│ concurrent calls (backup)                     │0                 │50                          │
│^│Total count of simultaneous records voice calls│100000            │200                         │
│^│Channels on dialer outgoing calls              │100               │5                           │
│^│Supplementary Services licence package(s)      │                  │                            │
│^│ name                                          │'ECSS-FULL+'      │'ECSS-ADV'                  │
│^│ limit                                         │600000            │10000                       │
│^│ description                                   │"Весь пакет услуг"│"Дополнительные услуги"     │
│^│ SS list                                       │[1,2,3,4,5]       │[4]                         │
│^│ name                                          │                  │'ECSS-ADV+'                 │
│^│ limit                                         │                  │10000                       │
│^│ description                                   │                  │"Дополнительные услуги"     │
│^│ SS list                                       │                  │[5]                         │
│^│ name                                          │                  │'ECSS-BAS'                  │
│^│ limit                                         │                  │10000                       │
│^│ description                                   │                  │"Базовые услуги (РД 45)"    │
│^│ SS list                                       │                  │[2]                         │
│^│ name                                          │                  │'ECSS-BAS+'                 │
│^│ limit                                         │                  │10000                       │
│^│ description                                   │                  │"Расширение базовых услуг"  │
│^│ SS list                                       │                  │[3]                         │
│^│ name                                          │                  │'ECSS-FULL+'                │
│^│ limit                                         │                  │50000                       │
│^│ description                                   │                  │"Дополнительные услуги"     │
│^│ SS list                                       │                  │[1,2,3,4,5]                 │
│^│ name                                          │                  │'ECSS-GEN'                  │
│^│ limit                                         │                  │10000                       │
│^│ description                                   │                  │"Стандартные услуги (РД 45)"│
│^│ SS list                                       │                  │[1]                         │
└─┴───────────────────────────────────────────────┴──────────────────┴────────────────────────────┘
Legend:
    '^' - Changed;
    '-' - Deleted;
    '+' - New.

[add] You are trying to add a license that is different from the current one by the pa
      rameters in the table (other values will remain unchanged).
Are you sure?: [yes]/no ?> yes
ok


Выйдите из CoCon ("exit")

И перезапустите сервисы ecss-ds и ecss-mycelium на первом и запустите остальные сервисы  втором хосте:

sudo systemctl restart ecss-mycelium


sudo systemctl restart ecss-ds


sudo systemctl start ecss-core ecss-pa-sip ecss-mediator 


sudo systemctl start ecss-mycelium ecss-ds ecss-core ecss-pa-sip ecss-mediator 

Выполнить проверку лицензий, для этого зайти в CoCon :

ssh admin@localhost -p8023

Проверить наличие лицензией:

/cluster/storage/ds1/licence/list-licence

Видим активную лицензию №1 (не ECSS DEFAULT)

/cluster/storage/ds1/licence/list-licence
┌──┬───────────────────┬────────────────┬──────┬────────────────────────────────────────────┬────────────────────┬────────────┐
│Id│Creation date(UTC) │     SSW ID     │Active│                Description                 │Expiration date(UTC)│ Time left  │
├──┼───────────────────┼────────────────┼──────┼────────────────────────────────────────────┼────────────────────┼────────────┤
│1 │31.10.2024 14:16:00│ECSS 010070     │*     │Eltex SC softswitch                         │31.12.2025 23:59:59 │112d 21h 31m│
│0 │                   │ECSS DEFAULT    │      │Default licence                             │                    │            │
└──┴───────────────────┴────────────────┴──────┴────────────────────────────────────────────┴────────────────────┴────────────┘

в случае если  получили такую ошибку :

проверить имя хоста, командой cat /etc/hostname

в случае имени хоста отличного от ecss1  заменить на ecss1, выполнив команду sudo nano /etc/hostname

Выйдите из CoCon ("exit").

Установка distributed лицензирования

В случае использования distributed метода лицензирования вместо паспорта / лицензии (как в default методе) используется Product-Id  / License-key которые генерируются Элтекс и передаются заказчику.

Причины перехода следующие:

  • Надо отслеживать "бестокенные локации". В основном это тестовые лицензии (либо для разработчиков).
  • Надо обслуживать хосты с нестандартными (ecss1 / ecss2) именами, и уходить от перечисления хостов на которых будет развёрнут SSW.

Также, чтобы устанавливать SSW на хосты с именами отличными от ecss1 / ecss2 приходилось использовать утилиту ds_db_preparator.

Установить пакет ecss-elm-adapter следующей командой:

sudo apt install -y ecss-elm-adapter

В процессе установки будут заданы вопросы конфигурации , параметры Elm сервиса будут сохранены в конфигурационном файле /etc/ecss/ecss-elm-adapter/config.exs.

вопросыответы для ecss1ответы для ecss2пример
ELM сервис адрес:Укажите IP адрес или
имя сервера в сети
для примера:
192.168.83.222
или
https://elm.eltex.ru

Укажите IP адрес или
имя сервера в сети
для примера:
192.168.83.222
или
https://elm.eltex.ru

ELM HTTPS порт:80998099

Product ID:для примера:
ECSS2000000
для примера:
ECSS2000001

License key:для примера:
ssw987654
для примера:
ssw987654

Log level:возможные варианты:
debug
error
info - по умолчанию
возможные варианты:
debug
error
info - по умолчанию

После установки проверить конфигурацию можно в файле (информация в файлах различается для хостов), для примера :

ELM_HOST=192.168.83.222
ELM_PORT=8099
ECSS_PRODUCT_ID=ECSS2000000
ECSS_LICENSE_KEY=ssw987654
LOG_LEVEL=info
LICENCE_FAIL_TIMER_SECONDS=10
LICENCE_PULL_TIMER_SECONDS=360

Чтобы узлы системы смогли встать в работу, надо сконфигурировать систему указав имена хостов на которых развёрнуты ecss-сервисы.

Перейдите в CLI - CoCon:

ssh admin@localhost -p 8023

Команда в CoCon: /system/clusters/set [<host1>, <host2>, ... <hostN>]. 
В примере кластера из 2-х хостов (имя хоста  ecss1 и ecss2) выполнить команду :

/system/clusters/set [ecss1, ecss2]

Выйти из CoCon ("exit"),
Перезапустить ecss сервисы командой:

sudo systemctl restart ecss-core ecss-pa-sip ecss-ds ecss-mediator ecss-mycelium

Перейдите в CoCon опять и проверьте лицензии:

/cluster/storage/ds1/licence/list-licence 
┌──┬───────────────────┬────────────┬──────┬───────────────┬────────────────────┬─────────┐
│Id│Creation date(UTC) │   SSW ID   │Active│  Description  │Expiration date(UTC)│Time left│
├──┼───────────────────┼────────────┼──────┼───────────────┼────────────────────┼─────────┤
│0 │01.01.1990 00:00:00│ECSS DEFAULT│*     │Default licence│                    │         │
└──┴───────────────────┴────────────┴──────┴───────────────┴────────────────────┴─────────┘

Активировать distributed режим командой:

/cluster/storage/ds1/licence/distributed/apply
/cluster/storage/ds1/licence/distributed/apply
Waiting for licence...
[**************                                                        ] 12s 2ms  
┌─┬─────────────────────────────────────────────────────┬─────────┬────────────────────────────────────────┐
│A│                     Description                     │Old Value│               New Value                │
├─┼─────────────────────────────────────────────────────┼─────────┼────────────────────────────────────────┤
│^│Maximum call duration (in seconds)                   │60       │3600                                    │
│^│Maximum number of simultaneous calls                 │5        │50                                      │
│^│System alive time without LPM token (min)            │1440     │5                                       │
│^│Elph                                                 │         │                                        │
│^│ total count of Elph group                           │1        │50                                      │
│^│Elph                                                 │         │                                        │
│^│ total count of members of the one Elph group        │10       │100                                     │
│^│Subscribers limit                                    │10       │100                                     │
│^│Virtual subscribers limit                            │infinity │100                                     │
│^│Add-on conferences                                   │         │                                        │
│^│ total count                                         │30       │5                                       │
│^│Add-on conferences                                   │         │                                        │
│^│ members of the one add-on conference                │16       │50                                      │
│^│Chat rooms                                           │         │                                        │
│^│ total count                                         │30       │5                                       │
│^│Chat rooms                                           │         │                                        │
│^│ members of the one chatroom                         │16       │50                                      │
│^│Meet Me                                              │         │                                        │
│^│ total count                                         │0        │5                                       │
│^│Meet Me                                              │         │                                        │
│^│ members of the one Meet Me conference               │0        │50                                      │
│^│SORM                                                 │         │                                        │
│^│ enabled                                             │false    │true                                    │
│+│ channels on SORM mediator                           │         │5                                       │
│^│CDR generation mode(s)                               │basic    │basic, sorm3                            │
│^│Sorm extractor                                       │none     │mfi                                     │
│^│Support antifraud system                             │none     │custom                                  │
│+│Call center                                          │         │                                        │
│+│ operator's capability for look at calls in queue    │         │true                                    │
│+│ operator's capability for use Intervension SS       │         │true                                    │
│^│Call center                                          │         │                                        │
│^│ active agents                                       │0        │100                                     │
│^│Call center                                          │         │                                        │
│^│ active supervisors                                  │0        │10                                      │
│^│Teleconference                                       │         │                                        │
│^│ channels                                            │3        │100                                     │
│^│Teleconference                                       │         │                                        │
│^│ max members of one teleconference                   │0        │30                                      │
│^│Teleconference                                       │         │                                        │
│^│ active count                                        │0        │5                                       │
│^│TSMN system                                          │         │                                        │
│^│ concurrent calls (active)                           │0        │100                                     │
│^│TSMN system                                          │         │                                        │
│^│ concurrent calls (backup)                           │0        │100                                     │
│^│Total count of simultaneous records voice calls      │0        │50                                      │
│+│IVR                                                  │         │                                        │
│+│ customization enabled                               │         │true                                    │
│+│ Automatic Speech Recognition (ASR) subsystem enabled│         │true                                    │
│^│Channels on dialer outgoing calls                    │2        │5                                       │
│+│Supplementary Services licence package(s)            │         │                                        │
│+│ name                                                │         │'ECSS-ADV'                              │
│+│ limit                                               │         │100                                     │
│+│ description                                         │         │"Additional services of 4 and 5 levels" │
│+│ SS list                                             │         │[1,2,3,4,5]                             │
│+│ name                                                │         │'ECSS-BAS'                              │
│+│ limit                                               │         │100                                     │
│+│ description                                         │         │"Basic services of 1 and 2 levels"      │
│+│ SS list                                             │         │[1,2]                                   │
│+│ name                                                │         │'ECSS-BAS+'                             │
│+│ limit                                               │         │100                                     │
│+│ description                                         │         │"Expansion of basic services of 3 level"│
│+│ SS list                                             │         │[1,2,3]                                 │
│^│GEO backup                                           │         │                                        │
│^│ enabled                                             │false    │true                                    │
└─┴─────────────────────────────────────────────────────┴─────────┴────────────────────────────────────────┘
Legend:
    '^' - Changed;
    '-' - Deleted;
    '+' - New.


[apply] You are trying to add a license that is different from the current one by the pa
        rameters in the table (other values will remain unchanged).
Licence received      o ?> 
[**************                                                        ] 25s 315ms
Success: Licence parameters applied

   
/cluster/storage/ds1/licence/list-licence     
┌──┬───────────────────┬────────────┬──────┬────────────────┬────────────────────┬─────────┐
│Id│Creation date(UTC) │   SSW ID   │Active│  Description   │Expiration date(UTC)│Time left│
├──┼───────────────────┼────────────┼──────┼────────────────┼────────────────────┼─────────┤
│1 │06.11.2025 11:00:00│ECSS2000000 │*     │ECSS ELM License│06.12.2025 11:00:00 │9d 4h 57m│
│0 │01.01.1990 00:00:00│ECSS DEFAULT│      │Default licence │                    │         │
└──┴───────────────────┴────────────┴──────┴────────────────┴────────────────────┴─────────┘




Добавление услуг

Добавление всех услуг указных в лицензии:

/cluster/storage/ds1/ss/install ds1@ecss1 ss_*
Successfully installed: /var/lib/ecss/ss/ss_dnd.xml
Successfully installed: /var/lib/ecss/ss/ss_clir.xml
...
Successfully installed: /var/lib/ecss/ss/ss_chunt.xml

Выйти из CoCon ("exit").

Так же требуется выполнить конфигурацию для Sip адаптера , выполнив следующую команду:

sudo systemctl edit ecss-pa-sip.service

Добавить в конфигурационный файл следующие данные:

[Service]
LimitNOFILE=65536

Перезагрузите конфигурацию

sudo systemctl daemon-reload

Актуализировать конфигурационный файл, выполнив перезагрузку сервера:

sudo reboot


Установка остальных пакетов ecss и их настройка

Для корректной работы кластерной конфигурации необходимо настроить работу RestFS на базе GlusterFS-сервера.

Следует проверить в файле /etc/dnsmasq.d/ecss-broker, что адреса primary и secondary broker соответствуют указанным при инсталляции пакета ecss-node.

cat /etc/dnsmasq.d/ecss-broker

Пример содержания файла на ecss1 и ecss2 (содержимое файлов должно быть одинаковым на обоих серверах):

address=/primary.broker.ecss/10.0.10.41
address=/secondary.broker.ecss/10.0.10.42

glusterfs

Выполните настройку glusterfs для ecss-restfs на первом хосте (ecss1),
для этого установите пакеты glusterfs-server и attr на обоих хостах:

sudo apt install -y glusterfs-server attr

Запустите glasterd на обоих хостах кластера:

sudo systemctl start glusterd

После запуска выполните создание связи с удаленным виртуальным хостом, выполните команду на ecss1:

sudo gluster peer probe 10.0.10.42

Проверьте наличие созданной связи, выполните команду на ecss2:

sudo gluster peer status

Должна появиться информация о первом хосте — ecss1:

sudo gluster peer status
Number of Peers: 1

Hostname: ecss1
Uuid: d7319720-ea3a-43a4-a7d5-e97bf9d205b9
State: Peer in Cluster (Connected)

Выполните аналогичную проверку на другом хосте — ecss1. Вы также должны увидеть информацию о партнере ecss2 (или его IP-адрес).

sudo gluster peer status
Number of Peers: 1

Hostname: 10.0.10.42
Uuid: f405dbb1-4f6d-4f2f-a116-f56197d18788
State: Peer in Cluster (Connected)


Создайте кластер для репликации, запустите репликацию и посмотрите ее статус, выполните следующие команды на ecss1:

sudo gluster volume create ecss_volume replica 2 transport tcp 10.0.10.41:/var/lib/ecss/glusterfs 10.0.10.42:/var/lib/ecss/glusterfs force 


sudo gluster volume start ecss_volume


sudo gluster volume info

Таким образом, статус репликации будет выглядеть следующим образом, необходимо обратить внимание на поля "Status" и "Bricks" — они должны иметь следующий вид:

Volume Name: ecss_volume
Type: Replicate
Volume ID: 3bfc7587-0f85-48ed-9612-21f0d79c6e52
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 10.0.10.41:/var/lib/ecss/glusterfs
Brick2: 10.0.10.42:/var/lib/ecss/glusterfs
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

Чтобы смонтировать glusterfs раздел, выполните на обоих хостах ecss1 и ecss2 следующие действия:

sudo nano /etc/systemd/system/ecss-glusterfs-mount.service
[Unit]
Description=mount glusterfs
After=network.target
Requires=network.target

[Service]
RemainAfterExit=no
Type=forking
RestartSec=10s
Restart=always
ExecStart=/sbin/mount.glusterfs localhost:/ecss_volume /var/lib/ecss/restfs -o fetch-attempts=10
ExecStop=/bin/umount /var/lib/ecss/restfs

[Install]
WantedBy=multi-user.target
sudo systemctl enable glusterd.service


sudo systemctl enable ecss-glusterfs-mount.service
sudo mkdir /var/lib/ecss/restfs
sudo systemctl daemon-reload


sudo systemctl restart ecss-glusterfs-mount.service

Проверьте, что раздел подмонтировался, для этого на обоих хостах выполните команду - df -h

df -h


df -h

/dev/sda8                     4,5G  213M  4,1G   5% /var/log
/dev/sda5                      37G   48M   35G   1% /var/lib/ecss/ecss-media-server/records
/dev/sda6                      19G   44M   18G   1% /var/lib/ecss/cdr
/dev/sda7                      19G   44M   18G   1% /var/lib/ecss/statistics
/dev/sda9                      19G  7,6G  9,7G  44% /var/log/ecss
localhost:/ecss_volume   	   46G   59M   44G   1% /var/lib/ecss/restfs

При просмотре информации должен появиться подмонтированный раздел — 
localhost:/ecss_volume     46G  59M   44G   1%     /var/lib/ecss/restfs

Установка пакета ecss-restfs и его настройка

sudo apt install -y ecss-restfs

Установка ecss-restfs. В ходе установки нужно будет ответить на ряд вопросов для создания необходимых конфигурационных файлов. Также инсталлятор предложит установить и настроить пакет Text2speech от Yandex.

Вопросы ecss-restfsОтветы для ecss1/ecss2Пример
Хотите ли вы использование функции Text To Speeh (Use TTS service)No (значение по умолчанию)

Хотите настроить сервис телефонной книги (Configure phone book)No (значение по умолчанию)

Хотите настроить  сервис распознавания речи (Configure speech recognition service)No (значение по умолчанию)

Ничего не выбиратьOk (необходимо выбрать)

после установки пакета ecss-restfs проверьте наличие wav файлов авто-информатора в директории /var/lib/ecss/restfs/system/sounds/ командой:

ls -la /var/lib/ecss/restfs/system/sounds/

наличие  wav файлов в указной выше директории говорит о корректности установки пакета ecss-restfs.

Проверить доступность этих файлов извне, для этой проверки выполним поочередно команду на ecss1 и ecss2:

wget http://ecss1:9990/system/sounds/ai_you.wav
wget http://ecss2:9990/system/sounds/ai_you.wav

 

wget http://ecss1:9990/system/sounds/ai_you.wav
--2025-09-16 08:27:36--  http://ecss1:9990/system/sounds/ai_you.wav
Распознаётся ecss1 (ecss1)… 10.0.10.41
Подключение к ecss1 (ecss1)|10.0.10.41|:9990... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 11670 (11K) [audio/x-wav]
Сохранение в: «ai_you.wav»

ai_you.wav.1                                100%[========================================================================================>]  11,40K  --.-KB/s    за 0s      

2025-09-16 08:27:36 (81,5 MB/s) - «ai_you.wav» сохранён [11670/11670]

wget http://ecss2:9990/system/sounds/ai_you.wav
--2025-09-16 08:27:44--  http://ecss2:9990/system/sounds/ai_you.wav
Распознаётся ecss2 (ecss2)… 10.0.10.42
Подключение к ecss2 (ecss2)|10.0.10.42|:9990... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 11670 (11K) [audio/x-wav]
Сохранение в: «ai_you.wav.1»

ai_you.wav.2                                100%[========================================================================================>]  11,40K  --.-KB/s    за 0s      

2025-09-16 08:27:44 (272 MB/s) - «ai_you.wav.1» сохранён [11670/11670]

проверочные файлы можно удалить

rm ai_you.wav
rm ai_you.wav.1

В случае кластерной конфигурации, для предотвращения одновременной обработки/конвертации/удаления одного файла (.pcm/.wav/.mp3) на разных серверах ecss1/ecss2 → сервис ecss-restfs-crawler должен быть запущен только на одном из серверов кластера. Для этого на сервере ecss2 выполнить следующие команды:

sudo systemctl disable ecss-restfs-crawler.timer
sudo systemctl stop ecss-restfs-crawler.timer


Установка media и  web пакетов ecss и их настройка

sudo apt install -y ecss-media-server ecss-web-conf

Для медиасервера (ecss-media-server/MSR) возможно начальное конфигурирование с записью параметров в файл конфигурации,
для этого нужно провести конфигурацию transport bind-addr,mcc bind-addres:

Вопросы ecss-media-serverОтветы для ecss1Ответы для ecss2Пример
[ MSR SIP ] Введите bind-ip адрес (Enter)10.0.20.41 (необходимо ввести)10.0.20.42 (необходимо ввести)


[MSR Control-Channel] Введите bind-ip-адрес10.0.20.41 (необходимо ввести)10.0.20.42 (необходимо ввести)


Web-конфигуратор позволяет сделать управление системой более наглядным и комфортным. Установка web-конфигуратора не является обязательной, но рекомендуется.
Также при установке пакета ecss-web-conf автоматически устанавливается пакет ecss-subsriber-portal-ui. Приложение "Портал абонента" системы ECSS-10 позволяет абонентам системы самостоятельно управлять услугами, просматривать информацию по совершенным вызовам, активным конференциям, а также настраивать собственные IVR-скрипты для входящих вызовов. Описание работы веб-конфигуратора приведено в разделе "Портал абонента".

Вопросы ecss-web-confОтветы для ecss1/ecss2Пример
 Хотите ли вы использовать стандартные настройки?Yes (значение по умолчанию)

После формирования конфигураций по умолчанию переходим в директорию, в которой находятся файлы конфигурации и производим их проверку:

cd /etc/ecss/ecss-media-server/
cat /etc/ecss/ecss-media-server/config.xml

Конфигурация для msr: файл -  config.xml, в директории conf.d  файл default.xml.
По своей сути default.xml — это дополнение config.xml, которое определяет секцию аккаунтов. Это сделано для того, чтобы после обновлений пакета данная конфигурация оставалась неизменной. Вид config.xml представлен здесь: файл конфигурации.

<?xml version="1.0" encoding="utf-8"?>
<config date="02:30:33 07.12.2023">
  <general log-level="3" log-rotate="yes" max-calls="8192" max-in-group="512" load-sensor="media" load-delta="10" calls-delta="100" spool-dir-size="100M" log-name="msr.log" log-path="/var/log/ecss/media-server" use-srtp="disabled" enable-ice-transport="no" ice-update="no" aggressive-ice="yes" stun-server="" suspicious-mode="no"/>
  <transport bind-addr="10.0.20.41" port="5040" transport="udp+tcp"/>
  <!-- By default configured public TURN-server -->
  <turn-server use-turn="no" host="numb.viagenie.ca" user="webrtc@live.com" password="muazkh"/>
  <media mixer-clock-rate="8000" use-vad="no" cng-level="0" jb-size="60" rtcp-timeout="0" rtp-timeout="350" udp-src-check="no" cn-multiplier="3" port-start="12000" port-range="2048" tias-in-sdp="no" thread-cnt="2" vid-enc-threads="2" vid-dec-threads="2" video-conf-layout="evenly" keyframe-interval="1000" vid-decode-delay="100" silence-threshold="-30" dtmf-flash-disable="no" video-dscp="0" other-dscp="0" dummy-video-src="/usr/share/ecss-media-server/video/dummy_video.yuv" video-enc-width="640" video-enc-height="360" finalsilence="1000" rtcp-stat-dump="yes" silent-codec-switch="yes"/>
  <codec pcma="1" pcmu="2" ilbc="0" gsm="0" g722="3" g726="0" g729="0" speex="0" l16="0" g7221="0" opus="0" h264="1" h263-1998="2" t38="1" tel-event-pt="0"/>
  <accounts>
    <!-- <dynamic msr_name="msr.name"
            realm="sip:127.0.0.1:5000"
            dtmf_mode="rfc+inband+info"
            auth_name="user"
            auth_password="password" /> -->
  </accounts>
  <pbyte>
    <mcc bind-addr="10.0.20.41" port="5700"/>
  </pbyte>
  <conf_dir path="/etc/ecss/ecss-media-server/conf.d"/>
  <rtp>
    <auto addr-v4=""/>
  </rtp>
</config>

По умолчанию после инсталляции ECSS-10 активизирует только кодеки — pcma, pcmu, g722, h264, h263-1998, t38. Остальные имеют статус =0 = выкл. Если требуется активировать остальные кодеки, в редакторе nano измените приоритет с 0 на цифру приоритета (уровень приоритета не должен повторятся для сервиса audio/video/fax)
sudo nano /etc/ecss/ecss-media-server/config.xml

чтобы активизировать все кодеки 
строчку  - 
<codec pcma="1" pcmu="2" ilbc="0" gsm="0" g722="3"  g726="0" g729="0" speex="0" l16="0" g7221="0" opus="0" h264="1" h263-1998="2" t38="1" tel-event-pt="0"/>
привести к виду - 
<codec pcma="1" pcmu="2" ilbc="6" gsm="4" g722="3"  g726="11" g729="5" speex="7" l16="8" g7221="9" opus="10" h264="1" h263-1998="2" t38="1" tel-event-pt="0"/>


Недопустимо указывать у разных кодеков одинаковый приоритет, для примера g722="5" g729="5". В этом случае media-server не сможет работать корректно. 
За исключением "0" - выключено.

Рассмотрим секцию аккаунтов (файл default.xml):

После инсталляции пакетов в фале будет указан  ip-add 127.0.0.1 , и только для одного хоста.

cat /etc/ecss/ecss-media-server/conf.d/default.xml
<?xml version="1.0"?>
<config>
      <accounts>
            <dynamic msr_name="msr.ecss1" realm="sip:127.0.0.1:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password"/>
      </accounts>
</config>

Требуется указать в конфигурации для обоих хостов, реальные IP-add.


Необходимо привести содержимое файла к виду указанному снизу (в примере ecss1 имеет IP-add 10.0.20.41/ ecss2 - 10.0.20.42):

sudo nano /etc/ecss/ecss-media-server/conf.d/default.xml


Настройка msr для ecss1 (/etc/ecss/ecss-media-server/conf.d/default.xml)Настройка msr для ecss2 (/etc/ecss/ecss-media-server/conf.d/default.xml)
<?xml version="1.0"?>
<config>
  <accounts>
    <dynamic msr_name="msr.ecss1" realm="sip:10.0.20.41:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password">
      <via dynamic-ifaces="no">
        <iface name="net.20" ip="10.0.20.41"/>
      </via>
    </dynamic>
    <dynamic msr_name="msr.ecss1" realm="sip:10.0.20.42:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password">
      <via dynamic-ifaces="no">
        <iface name="net.20" ip="10.0.20.42"/>
      </via>
    </dynamic>
  </accounts>
</config>
<?xml version="1.0"?>
<config>
  <accounts>
    <dynamic msr_name="msr.ecss2" realm="sip:10.0.20.42:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password">
      <via dynamic-ifaces="no">
        <iface name="net.20" ip="10.0.20.42"/>
      </via>
    </dynamic>
    <dynamic msr_name="msr.ecss2" realm="sip:10.0.20.41:5000" dtmf_mode="rfc+inband+info" auth_name="user" auth_password="password">
      <via dynamic-ifaces="no">
        <iface name="net.20" ip="10.0.20.41"/>
      </via>
    </dynamic>
  </accounts>
</config>

Указываем текущие настройки, согласно которым происходит регистрация msr на core.

Основными параметрами здесь являются: msr_name и realm:

После изменения конфигурации файлов /etc/ecss/ecss-media-server/config.xml и /etc/ecss/ecss-media-server/conf.d/default.xml необходимо выполнить перезапуск сервиса ecss-media-server, чтобы изменения вступили в силу, следующей командой:

sudo systemctl restart ecss-media-server


Настройка VRRP для SIP-адаптера

Если ECSS-10 установлен на Astra Linux, то необходимо изменить скрипт проверки доступности контрольного SIP-порта /usr/bin/ecss_pa_sip_port:

sudo nano /usr/bin/ecss_pa_sip_port


#!/bin/bash
netstat -plane | grep $1
#nc -z 127.0.0.1 $1


Выполните настройку VRRP для SIP-адаптера, для этого на обоих хостах создайте файлы следующего содержания:

Глобального конфигурационного файла keepalived.conf. На обоих хостах содержимое файла одинаковое:

sudo nano /etc/keepalived/keepalived.conf 

скопируйте и вставьте следующий текст в файл /etc/keepalived/keepalived.conf 

global_defs {
    vrrp_version 3          # версия протокола VRRP (2 или 3)
    script_user nobody      # ограниченный в правах системный пользователь, от которого будут запускаться скрипты проверки доступности
    enable_script_security  # не запускать скрипты от root, если часть пути к ним доступна на запись для обычных пользователей
}

include /etc/keepalived/sip.conf

 Конфигурационного файла sip.conf:

sudo nano /etc/keepalived/sip.conf 


etc/keepalived/sip.conf для ecss1 etc/keepalived/sip.conf для ecss2


vrrp_script check_sip {
    script "/usr/bin/ecss_pa_sip_port 65535"
    interval 2
    timeout 2
}

# Конфигурация адреса для первого виртуального адреса SIP-адаптера
vrrp_instance SIP1 {
    state MASTER                  # Исходное состояние при старте
    interface net.20              # Имя сетевого интерфейса, на котором будет работать протокол VRRP
    virtual_router_id 31          # Уникальный идентификатор роутера (0..255)
    priority 100                  # Приоритет (0..255) чем выше - тем больше
    advert_int 1                  # Интервал рассылки уведомлений (с)
    preempt_delay 60              # Интервал ожидания мастера при старте демона (с) при исходном состоянии BACKUP

    unicast_src_ip 10.0.20.41     # Собственный реальный IP-адрес
    unicast_peer {
        10.0.20.42                # Реальный IP-адрес соседа
    }

    virtual_ipaddress {
        # Виртуальный IP-адрес и маска
        # dev - сетевой интерфейс, на котором будет поднят виртуальный адрес
        # label - метка виртуального интерфейса (для удобства идентификации)
        10.0.20.31/24 dev net.20 label net.20:SIP1
    }

    track_script { 
        check_sip
    }
}

# Конфигурация адреса для второго виртуального адреса SIP-адаптера

vrrp_instance SIP2 {
    state BACKUP                      # Исходное состояние при старте
    interface net.20                  # Имя сетевого интерфейса, на котором будет работать протокол VRRP
    virtual_router_id 32              # Уникальный идентификатор роутера (0..255)
    priority 50                       # Приоритет (0..255) чем выше - тем больше
    advert_int 1                      # Интервал рассылки уведомлений (с)
    preempt_delay 60                  # Интервал ожидания мастера при старте демона (с) при исходном состоянии BACKUP

    unicast_src_ip  10.0.20.41        # Собственный реальный IP-адрес
    unicast_peer {
         10.0.20.42                   # Реальный IP-адрес соседа
    }

    virtual_ipaddress {
        # Виртуальный IP-адрес и маска
        # dev - сетевой интерфейс, на котором будет поднят виртуальный адрес
        # label - метка виртуального интерфейса (для удобства идентификации)
        10.0.20.32/24 dev net.20 label net.20:SIP2
    }

}


vrrp_script check_sip {
    script "/usr/bin/ecss_pa_sip_port 65535"
    interval 2
    timeout 2
}

# Конфигурация адреса для первого виртуального адреса SIP-адаптера
vrrp_instance SIP1 {
    state BACKUP                  # Исходное состояние при старте
    interface net.20              # Имя сетевого интерфейса, на котором будет работать протокол VRRP
    virtual_router_id 31          # Уникальный идентификатор роутера (0..255)
    priority 50                   # Приоритет (0..255) чем выше - тем больше
    advert_int 1                  # Интервал рассылки уведомлений (с)
    preempt_delay 60              # Интервал ожидания мастера при старте демона (с) при исходном состоянии BACKUP

    unicast_src_ip 10.0.20.42     # Собственный реальный IP-адрес
    unicast_peer {
        10.0.20.41                # Реальный IP-адрес соседа
    }

    virtual_ipaddress {
        # Виртуальный IP-адрес и маска
        # dev - сетевой интерфейс, на котором будет поднят виртуальный адрес
        # label - метка виртуального интерфейса (для удобства идентификации)
        10.0.20.31/24 dev net.20 label net.20:SIP1
    }

}

# Конфигурация адреса для второго виртуального адреса SIP-адаптера

vrrp_instance SIP2 {
    state MASTER                      # Исходное состояние при старте
    interface net.20                  # Имя сетевого интерфейса, на котором будет работать протокол VRRP
    virtual_router_id 32              # Уникальный идентификатор роутера (0..255)
    priority 100                      # Приоритет (0..255) чем выше - тем больше
    advert_int 1                      # Интервал рассылки уведомлений (с)
    preempt_delay 60                  # Интервал ожидания мастера при старте демона (с) при исходном состоянии BACKUP

    unicast_src_ip  10.0.20.42       # Собственный реальный IP-адрес
    unicast_peer {
         10.0.20.41                  # Реальный IP-адрес соседа
    }

    virtual_ipaddress {
        # Виртуальный IP-адрес и маска
        # dev - сетевой интерфейс, на котором будет поднят виртуальный адрес
        # label - метка виртуального интерфейса (для удобства идентификации)
        10.0.20.32/24 dev net.20 label net.20:SIP2
    }

    track_script {
        check_sip
    }
}


В данном случае была добавлена поддержка виртуальных интерфейсов со связью Master - Backup. Для ecss1 основным будет являться net.20:SIP1, а запасным — net.20:SIP2 соответственно. Важно учесть, что в конфигурации учтено использование адресных переменных. В секции interface требуется указать, на каком интерфейсе будут слушаться VRRP-сообщения, а в секции virtual_ipaddress требуется указать интерфейс, на котором будет восстановлен виртуальный адрес.

Выполните перезапуск keepalived:

sudo systemctl restart keepalived.service

для проверки правильности установки выполните команду ifconfig, в конце выходного сообщения вы должны видеть новый интерфейс - net.20:SIP1/ net.20:SIP2 (ecss1/ecss2) с выбранным IP-адресом

sudo ifconfig


sudo ifconfig 

. . .
net.20:SIP1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.20.31 netmask 255.255.255.0 broadcast 0.0.0.0
ether 08:00:27:6d:4f:02 txqueuelen 1000 (Ethernet)

Дальнейшая настройка

snpmd

Настройка SNMP описана в разделе "Управление и мониторинг по протоколу SNMP".

Настройка безопасности. SSH

Выполните настройку сервера SSH:

sudo nano /etc/ssh/sshd_config

Укажите в конфигурационном файле порт и адрес, по которому можно обратиться к серверу:

Настройка ssh для ecss1 (/etc/ssh/sshd_config)Настройка ssh для ecss2 (/etc/ssh/sshd_config)

# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.

Port 2000
#AddressFamily any
ListenAddress 10.0.10.41
#ListenAddress ::

<...>

# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.

Port 2000
#AddressFamily any
ListenAddress 10.0.10.42
#ListenAddress ::

<...>

Перезапустите ssh:

sudo systemctl restart ssh.service

Перезагрузка обоих хостов

sudo reboot


Первоначальная конфигурация системы с помощью web-конфигуратора

Исходные данные

  • Установка системы завершена;
  • Система готова к дальнейшей настройке;
  • Интерфейсы запущены.

Рекомендуется использовать последние доступные версии браузеров. Рекомендуемые к использованию браузеры: Яндекс, Chrome.

Для начала конфигурации системы необходимо зайти в web-конфигуратор по адресу http://<Ipadd SSW>.

Для определения и регистрации в системе планируются:

  • Абоненты с номерами 42001, 42002 , 42003, 42004 ,42005, 42006, 42007, 42008, 42009, 42010;
  • Транк в сторону шлюза.

Подготовка к работе


Рисунок 3 — Вход в web-конфигуратор (окно авторизации)

В окне авторизации необходимо ввести значения, определенные при установке web-конфигуратора.

Стандартные значения для авторизации:

Логин: admin

Пароль: password

После входа в систему будет видна основная рабочая область с иконками приложений, а также строка состояния с доступными опциями, в частности:

  • 1 — выход из системы;
  • 2 — выбор домена;
  • 3 — выбор языка.

Рисунок 4 — Вид рабочей области web-конфигуратора

Создание учетной записи оператора

После авторизации для повышения безопасности при эксплуатации программного коммутатора рекомендуется создание учетных записей для операторов, а также сменить пароль для пользователя admin.

Для создания новой учетной записи оператора используется приложение "Управление пользователями" ("User manager"):

Рисунок 5 — Вид приложения "Управление пользователями"

Нажмите кнопку "Добавить" . В открывшемся окне требуется определить новую учетную запись, для этого: 

  1. В поле "Имя" введите логин учетной записи, например "test";
  2. В поле "Пароль" и "Подтверждение" введите пароль для пользователя, например "testpassword";
  3. Определите уровень прав доступа для пользователя через выбор текущих разрешений или с помощью ролей, например ecss-user. Описание можно посмотреть в разделе "Управление пользователями".

Рисунок 6 — Диалоговое окно создания учетной записи оператора

Рисунок 7 — Вид приложения с созданной учетной записью оператора

Для смены пароля рядом с названием пользователя нажмите на кнопку редактировать. В появившемся диалоговом окне введите:

1. Старый пароль (для пользователя "admin" по умолчанию паролем является "password");

2. Новый пароль;

3. Подтвердите новый пароль.

Рисунок 8 — Диалоговое окно редактирования учетной записи

Добавление медиа-ресурсов.

Для того чтобы начать работу с медиа-сервером сразу после его регистрации, необходимо активировать  сетевые интерфейсы MSR. Приложение web-конфигуратора "Сетевые окончания MSR" ("MSR registrars") служит для настройки медиа-ресурсов.

Рисунок 9 — Сетевые окончания MSR

Установить ipадрес для приема соединений от медиасервера, изменив значение 0.0.0.0 на реальные адреса MSR:

Рисунок 10 — Установка IP-add регистратора MSR

Создание IP-set (sip-транспорта) и присвоение его к домену

IP-set — совокупность одного или нескольких IP-адресов из одной подсети и списка слушающих UDP/TCP-портов, которые будут открыты SIP-адаптером на данных адресах.

Для настройки интерфейса необходимо открыть приложение  "Кластеры ("Clusters").


Рисунок 11 — Вид приложения "Кластеры"

Для создания новой группы IP-адресов (IP-set) выделите кластер SIP-адаптера "sip1" и нажмите на кнопку "Свойства кластера" (или нажмите на иконку кластера двойным щелчком левой кнопки мыши).

В появившемся диалоговом окне перейдите на вкладку "Транспорт". Далее нажмите кнопку "Добавить". Появится новая группа, для редактирования полей двойным щелчком кнопки мыши нажмите на нужное:

1. Переименуйте группу адресов (IP-set), например "test_set";

2. Задайте порт, по которому будет происходить обращение к домену, например 5060;

3. Разверните вновь созданную группу нажатием на треугольник слева от названия группы;

4. Определите адрес для ноды SIP-адаптера, согласно примеру конфигурации. Для системы без резервирования укажите 10.0.20.31:


Рисунок 12 — Вид приложения "Кластеры/Транспорт"

Для системы с резервированием укажите 10.0.20.31 и 10.0.20.32:


Рисунок 13 — Вид приложения "Кластеры/Транспорт" для кластера

Нажмите кнопку "Сохранить" для применения настроек.

Создание домена

Домен - Виртуальная PBX внутри нашего SSW. Таких виртуальных PBX может быть создано необходимое для проекта кол-во.

Для создания домена необходимо войти в приложение "Домены" ("Domain"). В открывшемся окне требуется создать домен, для этого:

1. Нажмите кнопку "Добавить домен":


Рисунок 14 — Добавление домена в систему

2. В появившемся диалоговом окне доступны следующие настройки:

Введите название домена, например "test_domain";

3. Нажмите кнопку "Ок":

Рисунок 15 — Определение настроек нового домена

4. Нажмите кнопку "Обновить"   в приложении. 

Созданный домен будет отображаться в текущей конфигурации:

Рисунок 16 — Отображение созданного домена

Для редактирования текущего домена его необходимо выбрать в системе. Для перехода в домен воспользуйтесь опцией выбора домена (см. пункт 2 на рисунке "Вид рабочей области web-конфигуратора").

После выбора домена, согласно текущей конфигурации системы, станут доступны все приложения:


Рисунок 17 — Отображение приложений в текущей конфигурации системы


Для того чтобы привязать группу адресов к домену, необходимо вернуться в приложение "Домены" ("Domain"), выделить домен и перейти в настройки нажатием на кнопку "Свойства домена" или двойным нажатием левой кнопки мыши на домен.

В настройках списка откройте ветку "SIP", в ней "SIP транспорт", далее выберите в поле IP set созданную группу адресов. Нажмите кнопку "Сохранить" для применения настроек.


Рисунок 18 — Окно настройки для SIP транспорта

Выбрать требуемые услуги для созданного домена, которые будут использоваться (для примера для абонентского домена транковые услуги не востребованы , и наоборот для транзитного домена не нужно указывать услуги для абонента).

Рисунок 19 — После создания нового домена, услуги отсутствуют.

  1. Выбрать приложение "Управление услугами"
  2. Выбрать колонку "Установленные услуги" (услуги указанные в лицензии для SSW)
  3. Выбрать необходимые для указанного домена услуги
  4. Сохранить конфигурацию

Рисунок 20 — Выбор услуг для абонентов / транков нового домена.

Рисунок 21 — Список услуг теперь доступных для абонентов  нового домена.

Создание абонентов

Для создания и редактирования параметров абонентов в системе используется приложение "Карточка абонента" ("Subscriber card").

Рисунок 22 — Вид приложения "Карточка абонента"

В конфигурации возможно создание SIP-абонентов и виртуальных абонентов.

Для пользователей, имеющих физическое окончание, используется функционал SIP-абонента, в то время как  виртуальный абонент используется тогда, когда нужна функциональность без физических окончаний. Например, номер для обращения к ivr-скрипту.

Для создания новых абонентов нужно нажать на кнопку "Добавить".

В появившемся диалоговом окне укажите следующие параметры:

  • Имя интерфейса — номер или группа номеров, который присваивается абоненту, строка, например {42001-42010} или abcd;
  • Контекст — контекст маршрутизации, выбираем тот, который создали, например "test_name", или по умолчанию - "default_routing";
  • Группа интерфейсов — имя группы объединяющей нескольких абонентов, для примера "sip";
  • Алиас как пользователь — настройка, которая связывает номер сущности, алиас и пользователя одним и тем же названием, в примере настройка активирована;
  • Авторизация — порядок проверки подлинности прав пользователя на доступ к данным, в примере используется"register";
  • Логин — использую настройку номер как логин для простоты;
  • Пароль — можно задать или использовать сгенерированный системой.


Рисунок 23 — Пример создания 10 абонентов в домене "test_domain"


Рисунок 24 — Пример добавления услуг для абонента

Создание и применение контекстов маршрутизации для домена

Маршрутизация отвечает за поиск номера и последующую адресацию вызова. Для корректной работы системы должен быть настроен как минимум один контекст маршрутизации.

Настройка маршрутизации осуществляется в приложении "Менеджер маршрутизации" ("Routing manager") .


Рисунок 25 — Вид приложения "Менеджер маршрутизации"

В качестве примера создадим контекст, а затем несколько правил в нём, для этого:

1. В левой части окна в разделе "Контекст" нажмите на кнопку "Создать контекст"  ;

2. В открывшемся диалоговом окне обозначьте имя контекста:

Рисунок 26 — Вид приложения "Менеджер маршрутизации" добавление нового контекста маршрутизации

3. Нажмите "Сохранить контекст"  ;

Создадим 4 правила в данном контексте:

  • rule1 — правило для выхода на транк TAU-72;
  • rule2 — правило локальной маршрутизации для номеров 42001-42005;
  • rule3 — правило для выхода в ivr;
  • rule4 — правило-исключение.

Для создания нового правила нужно выделить созданный контекст и нажать кнопку "Создать правило". В появившемся окне нужно ввести название правила. Затем сохранить вновь созданные правила.


Рисунок 27 — Создание правила контекста маршрутизации


Рисунок 28 — Определение правил

На данный момент не определен транк, чтобы можно было сослаться на него в правиле, однако можно задать номера, по которым будет производится выборка.

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

Функционально контекст маршрутизации делится на три части:

  • Условия ("Condition") — раздел, определяющий выражения для выборки по предложенным признакам;
  • Действия ("Action") — раздел, выполняющий преобразование признаков номеров к конкретному значению;
  • Результат ("Result") — раздел, завершающий маршрутизацию и определяющий её результат.

rule1: Для выхода на транк нужно правильно отредактировать каждую часть:

  • В разделе условий перейти на вкладку CDPN. Ввести номера телефонов, которые находятся за транком в поле "Номер". Например, чтобы определить номера с 42006 по 42007, нужно ввести условие: 420(6-7);
  • В разделе действий перейти на вкладку CDPN. Ввести маску для изменения номера в поле "Номер". Например, чтобы добавить число 4 перед номером, нужно заполнить поле следующим выражением: 4{1,2,3,4,5};
  • Нажать кнопки "Сохранить правило" и "Сохранить контекст" для применения изменений.

Чтобы настроить поле результата, нужно определить транк в системе, поэтому к настройке данного правила вернемся чуть позже.

Таким же образом нужно настроить оставшиеся правила.

Для rule2:

  • В разделе условий, во вкладке CDPN ввести номера телефонов, которые находятся за транком в поле "Номер". Например, чтобы определить номера со 42001 по 42005, ввести условие 420(1-5);
  • В разделе результата определить результат как локальный (т.е. локальная маршрутизация);
  • Нажать кнопки "Сохранить правило" и "Сохранить контекст" для применения изменений.

Для rule 3 допустим, что абоненты с номерами 108, 109 и 110 попадают в ivr-скрипт–информатор, прежде чем звонить далее.

  • В разделе условий, во вкладке CGPN ввести номера телефонов, по которым будет выборка в поле "Номер", например 420(10,08-09).
  • Нажать кнопки "Сохранить правило" и "Сохранить контекст" для применения изменений.

Чтобы настроить поле результата, нужно определить в системе ivr-скрипт, поэтому к настройке данного правила вернемся чуть позже.

Для rule 4 мы определяем правило-исключение — это правило, которое работает в случае, если любые другие правила не срабатывают.

  • По умолчанию данное правило создается в системе в контексте default_routing. В условиях на вызываемый номер прописывается символ %, а результатом является локальная маршрутизация, однако, если мы назначаем абоненту контекст, отличный от default_routing, в конце рекомендуется создавать это правило.


Рисунок 29 — Пример настроек контекста маршрутизации

Создание транка

Для создания и редактирования параметров транка в системе используется приложение "Менеджер транков" ("Trunk manager") .

Рисунок 30 — Вид приложения "Менеджер транков"

Для определения транка в системе нужно нажать на кнопку "Создать транк"  , в появившемся диалоговом окне определить параметры:

  • Имя — назначить название транка, по которому его можно идентифицировать в системе;
  • Контекст — применить ранее созданный контекст маршрутизации test_name;
  • Группа — выбрать группу интерфейсов, созданную при определении абонентов "test.group";
  • Группа IP-адресов (IP-set) — созданная на домене группа адресов "test_set";
  • Регистрация — если используется транковая, то нужно включить данный параметр, в примере она не используется;
  • Хост [:порт] — IP-адрес назначения транка — 10.0.3.100;
  • Порт для приёма — транспортный порт, на котором будет слушаться трафик с транка, соответствует порту, назначенному на группу IP-адресов.


Рисунок 31 — Создание транка

Создание IVR-скрипта

Для создания IVR используется приложение "IVR-редактор" ("IVR editor").


Рисунок 32 — Вид приложения "IVR-редактор"

Для создания скрипта нужно нажать на кнопку "Добавить" выбрать тип скрипта (в данном случае будет скрипт на входящие вызовы), в диалоговом окне указать название скрипта, например "test_ivr".

После создания скрипта в основном окне редактора появится блок-схема.

В качестве примера составим скрипт, который при срабатывании проигрывает вызывающему абоненту заранее записанную фразу, а затем продолжает вызов.

Пример скрипта приведен на рисунках ниже. Здесь используются блоки Info и Dial. 

  • Блок Info — блок, который проигрывает сообщения до момента ответа пользователя. В качестве записанной фразы используется генератор тонов:


Рисунок 33 — Вид рабочей области IVR с настройками блока "Info"

  • Блок dial — блок, который совершает вызов на заданный номер. Чтобы продолжить вызов, нужно применить предопределенную переменную CDPN:


Рисунок 34 — Вид рабочей области IVR

Завершение настройки маршрутизации

Для завершения настройки маршрутизации нужно войти в приложение "Менеджер маршрутизации" ("Routing manager") и в правилах rule1 и rule3 настроить соответствующие результаты маршрутизации, для этого:

  • rule1: в разделе "Результат" выберите подпункт "внешний". В таблице "Направления" в поле "Значение" добавьте созданный ранее транк, после чего сохраните правило .
  • rule3: В разделе "Результат" выберите подпункт "ivr" и в поле скрипт добавьте созданный ранее ivr-скрипт, после чего сохраните правило и контекст .


Рисунок 35 — Вид контекста маршрутизации 

Первоначальная конфигурация системы через интерфейс командной строки (CLI)

Добавление медиа-ресурсов в интерфейсе командной строки (CLI)

Для возможности использования медиаресурса и установления соединений , необходимо выполнить активизацию  в команде создания медиаресурса -  /system/media/resource/declare (параметр "is active"=true) или  /system/media/resource/set  (параметр "active"=true), если при создании активизация не была выполнена. Так же можно выполнить активизацию через веб интерфейс , приложение -  сетевые окончания MSR (MSR-registrars).


Зайдите в CLI -  CoCon:

ssh admin@localhost -p 8023
password: password


Медиаресурс — это описание параметров медиасервера, необходимых для работы с ним.

declare
Команда для объявления подключения медиасервера к ECSS-10.

Для работы в режиме предварительно настроенной системы можно заранее прописать медиаресурсы, информация о которых известна.

Для этого необходимо создать описание известных медиасерверов с указанием всех параметров, что позволить начать работу с медиасервером сразу после его регистрации.

Команда для создания конфигурации медиасервера:

Путь команды:

/system/media/resource/declare

Синтаксис:

declare <node> by_contact <contact> <zone> <site> <is active>

или

declare <node> by_iface <msr> <acc_id> <iface> <zone> <site> <is active>

Параметры:

<node> — имя ноды core;
<contact> — contact uri декларируемого медиаресурса;
<zone> — логическая зона обслуживания MSR;
<site> — идентификатор сети обслуживания MSR;
<is active> — состояние активности медиаресурса, значения true/false;
<msr> — имя MSR;
<acc_id> — номер идентификатор ресурса;
<iface> — название интерфейса.


Установить связь MSR- и Core-подсистем. Для этого выполнить команды:

/system/media/resource/declare core1@ecss1 contact net.20@msr.ecss1  default local true
/system/media/resource/declare core1@ecss2 contact net.20@msr.ecss2  default local true
/system/media/resource/declare core1@ecss1 contact net.20@msr.ecss2  default local true
/system/media/resource/declare core1@ecss2 contact net.20@msr.ecss1  default local true


/system/media/resource/info core1@ecss1 net.20@msr.ecss1
  Media resource specific for node core1@ecss1:
┌─┬─────────────────┬─────────────────────┐
│F│    Parameter    │        Value        │
├─┼─────────────────┼─────────────────────┤
│r│ Contact         │ net.20@msr.ecss1    │
│r│ Status          │ registered          │
│r│ Cc-status       │ connected           │
│r│ Cc-status uptime│ 00:39:35            │
│r│ Cc-id           │ db21af              │
│r│ Address         │ 10.0.20.51:5700     │
│r│ Register time   │ 2025/12/02 16:43:07 │
│r│ Expired         │ 84                  │
│r│ Iface           │ net.20(10.0.20.51)  │
│ │ Active          │ true                │
│ │ Zone            │ default             │
│ │ Site            │ local               │
│r│ MSR version     │ 3.17.1.0.10         │
│r│ MSR load        │ 0                   │
│r│ MSR perf coef   │ 1.0                 │
└─┴─────────────────┴─────────────────────┘

Legend:
Column F - means Flag, values r - flag for readonly parameter


/system/media/resource/list all
  All media resource selected list specific:
┌─────────────┬───────────┬─────────────┬───────────┬──────┬────────┬───────────┬───────────┬─────────────────┬────────┬────────────┬────────┬─────────┬───────┬──────────────────┬────────────┬─────────┐
│    Node     │    MSR    │     MSR     │    MSR    │ MSR  │ Cc-id  │ Cc-status │ Cc-uptime │   Cc-address    │ Iface  │   Iface    │ Active │  Zone   │ Site  │     Contact      │   Status   │ Expired │
│             │           │   version   │ perf coef │ load │        │           │           │                 │  name  │    addr    │        │         │       │                  │            │         │
├─────────────┼───────────┼─────────────┼───────────┼──────┼────────┼───────────┼───────────┼─────────────────┼────────┼────────────┼────────┼─────────┼───────┼──────────────────┼────────────┼─────────┤
│ core1@ecss1 │ msr.ecss1 │ 3.17.1.0.10 │       1.0 │    0 │ db21af │ connected │ 00:40:22  │ 10.0.20.51:5700 │ net.20 │ 10.0.20.51 │ true   │ default │ local │ net.20@msr.ecss1 │ registered │     156 │
│             │ msr.ecss2 │ 3.17.1.0.10 │       1.0 │    0 │ 263898 │ connected │ 00:40:22  │ 10.0.20.52:5700 │ net.20 │ 10.0.20.52 │ true   │ default │ local │ net.20@msr.ecss2 │ registered │     156 │
│ core1@ecss2 │ msr.ecss1 │ 3.17.1.0.10 │       1.0 │    0 │ db21af │ connected │ 00:41:11  │ 10.0.20.51:5700 │ net.20 │ 10.0.20.51 │ true   │ default │ local │ net.20@msr.ecss1 │ registered │     106 │
│             │ msr.ecss2 │ 3.17.1.0.10 │       1.0 │    0 │ 263898 │ connected │ 00:44:00  │ 10.0.20.52:5700 │ net.20 │ 10.0.20.52 │ true   │ default │ local │ net.20@msr.ecss2 │ registered │     177 │
└─────────────┴───────────┴─────────────┴───────────┴──────┴────────┴───────────┴───────────┴─────────────────┴────────┴────────────┴────────┴─────────┴───────┴──────────────────┴────────────┴─────────┘


Добавление управления регистратором для MSR медиа менеджера в интерфейсе командной строки (CLI)


/system/media/registrar/ - команды управления регистратором для MSR медиа менеджера

set

Команда для изменения общих и индивидуальных параметров.

Путь команды:

/system/media/registrar/set

Синтаксис настройки общих параметров:

set common <FIELD> <VALUE>

Параметры:

<FIELD> - имя настраиваемого параметра;

<VALUE> - значение настраиваемого параметра

Где
  • common - тип выставляемого параметра;
  • <common parameter> - общий параметр медиарегистратора для всех нод: registration-timeout;
  • private - тип выставляемого параметра;
  • <node name> - имя ноды на которой находится медиарегистратор;
  • <private parameter> - параметр медиарегистратора, который выставляется на <node name>: is-active, listen-interface & listen-port.

Cписок параметров доступных для настройки:

  • is-active - позволяет включить или выключить регистратор (false - деактивирует регистратор, регистратор перестает принимать SIP трафик);
  • listen-interface - имя интерфейса, который использует регистратор;
  • listen-port - порт, на котором регистратор принимает запросы на регистрацию (по умолчанию 5000);
  • registration-timeout - таймер перерегистрации, диапазон значений от 60 до 86400.

В общих параметрах доступна настройка времени регистрации, по умолчанию установлено 60 секунд.

Пример:
Установить время регистрации 60 секунд:

/system/media/registrar/set common registration-timeout 60
Common parameter registration-timeout set to 60.

Синтаксис настройки индивидуальных параметров:

system/media/registrar/set private <CORE> <FIELD> <VALUE>

Параметры:

<CORE> - нода ядра, для которой настраивается Registrar-сервер;

<FIELD> - имя настраиваемого параметра;

<VALUE> - значение настраиваемого параметра.

Настраиваемые параметры:

  • is-active - активен ли Registrar-сервер, принимает значения true | false;
  • listen-ip - ip-адрес, на котором Registrar-сервер будет принимать соединения (по умолчанию 0.0.0.0);
  • listen-port - сетевой порт, на котором Registrar-сервер будет принимать соединения (по умолчанию 5000).


Установить ipадрес для приема соединений от медиасервера:

/system/media/registrar/set private core1@ecss1 listen-ip 10.0.20.41  
/system/media/registrar/set private core1@ecss1 listen-ip 10.0.20.41 
Private parameter listen-ip set to 10.0.20.41 at node core1@ecss1.
/system/media/registrar/set private core1@ecss2 listen-ip 10.0.20.42
/system/media/registrar/set private core1@ecss2 listen-ip 10.0.20.42 
Private parameter listen-ip set to 10.0.20.42 at node core1@ecss2.


/system/media/registrar/info
 Common parameters:
┌───────────────────────────┬───────┐
│         Parameter         │ Value │
├───────────────────────────┼───────┤
│ registration-timeout, sec │   180 │
└───────────────────────────┴───────┘
 Private parameters:
┌─────────────┬─────────┬───────────┬────────────┬─────────────┐
│    Node     │ Status  │ Is-active │ Listen-ip  │ Listen-port │
├─────────────┼─────────┼───────────┼────────────┼─────────────┤
│ core1@ecss1 │ active  │ true      │ 10.0.20.41 │        5000 │
│ core1@ecss2 │ active  │ true      │ 10.0.20.42 │        5000 │
└─────────────┴─────────┴───────────┴────────────┴─────────────┘

После того как все сервисы будут запущены, ноды какое-то время будут устанавливать связь. Как только все ноды загрузятся , при выполнении запроса system-status, последует вывод следующей информации:

/system-status 
Checking...
┌─┬───────────────┬───────────────────────────┬───────────────────────────────┬─────────────────────┬───────┐
│ │     Node      │          Release          │         Erlang nodes          │    Mnesia nodes     │Uptime │
├─┼───────────────┼───────────────────────────┼───────────────────────────────┼─────────────────────┼───────┤
│ │core1@ecss1    │ecss-core-3.17.1.0.1656    │core1@ecss1,core1@ecss2        │not running          │43m 43s│
│ │core1@ecss2    │ecss-core-3.17.1.0.1656    │core1@ecss1,core1@ecss2        │not running          │47m 5s │
│ │ds1@ecss1      │ecss-ds-3.17.1.0.1656      │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │43m 43s│
│ │ds1@ecss2      │ecss-ds-3.17.1.0.1656      │ds1@ecss1,ds1@ecss2            │ds1@ecss1,ds1@ecss2  │47m 4s │
│ │md1@ecss1      │ecss-mediator-3.17.1.0.1656│md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │43m 43s│
│ │md1@ecss2      │ecss-mediator-3.17.1.0.1656│md1@ecss1,md1@ecss2            │md1@ecss1,md1@ecss2  │47m 5s │
│ │mycelium1@ecss1│ecss-mycelium-3.17.1.0.1656│mycelium1@ecss1,mycelium1@ecss2│not running          │43m 43s│
│ │mycelium1@ecss2│ecss-mycelium-3.17.1.0.1656│mycelium1@ecss1,mycelium1@ecss2│not running          │47m 4s │
│ │sip1@ecss1     │ecss-pa-sip-3.17.1.0.1656  │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│43m 43s│
│ │sip1@ecss2     │ecss-pa-sip-3.17.1.0.1656  │sip1@ecss1,sip1@ecss2          │sip1@ecss1,sip1@ecss2│47m 5s │
└─┴───────────────┴───────────────────────────┴───────────────────────────────┴─────────────────────┴───────┘

All services are started.

  Active media resource selected list specific:
┌─────────────┬───────────┬─────────────┬───────────┬───────────┐
│    Node     │    MSR    │     MSR     │ Cc-status │ Cc-uptime │
│             │           │   version   │           │           │
├─────────────┼───────────┼─────────────┼───────────┼───────────┤
│ core1@ecss1 │ msr.ecss1 │ 3.17.1.0.10 │ connected │ 00:42:49  │
│             │ msr.ecss2 │ 3.17.1.0.10 │ connected │ 00:42:48  │
│ core1@ecss2 │ msr.ecss1 │ 3.17.1.0.10 │ connected │ 00:43:38  │
│             │ msr.ecss2 │ 3.17.1.0.10 │ connected │ 00:46:27  │
└─────────────┴───────────┴─────────────┴───────────┴───────────┘

Alarms list on md1:
┌──────────────┬───────────────┬───────────────┬────────────────────┬────────────────────┬────────────────────┬────────────────────────────────────────────────────────────┐
│     Date     │   Severity    │   Location    │       Cause        │       Class        │      Instance      │                          Message                           │
├──────────────┼───────────────┼───────────────┼────────────────────┼────────────────────┼────────────────────┼────────────────────────────────────────────────────────────┤
└──────────────┴───────────────┴───────────────┴────────────────────┴────────────────────┴────────────────────┴────────────────────────────────────────────────────────────┘
Selected: 0
Total: 0

В примере выше видно, что ноды вошли в кластер и MSR зарегистрировались на ноде ecss-core.

Создание и настройка группы SIP-IP-адресов (IP-set)

IP-set — совокупность одного или нескольких IP-адресов из одной подсети и списка слушающих UDP/TCP-портов, которые будут открыты SIP-адаптером на данных адресах.

Произведите настройку адаптера SIP согласно ТЗ (команды выполнить в CoCon):

/cluster/adapter/sip1/sip/network/set ip_set test_set node-ip node = sip1@ecss1 ip = 10.0.20.31
/cluster/adapter/sip1/sip/network/set ip_set test_set node-ip node = sip1@ecss1 ip = 10.0.20.31
Property "ip_set" successfully changed from:     

to
test_set: no ports set
test_set: sip1@ecss1 10.0.20.31
test_set: dscp 0.
/cluster/adapter/sip1/sip/network/set ip_set test_set node-ip node = sip1@ecss2 ip = 10.0.20.32
/cluster/adapter/sip1/sip/network/set ip_set test_set node-ip node = sip1@ecss2 ip = 10.0.20.32
Property "ip_set" successfully changed from:    
test_set: no ports set
test_set: sip1@ecss1 10.0.20.31
test_set: dscp 0
to
test_set: no ports set
test_set: sip1@ecss1 10.0.20.31
test_set: sip1@ecss2 10.0.20.32
test_set: dscp 0.
/cluster/adapter/sip1/sip/network/set ip_set test_set listen-ports list = [5060]
/cluster/adapter/sip1/sip/network/set ip_set test_set listen-ports list = [5060]
Property "ip_set" successfully changed from: 
test_set: no ports set
test_set: sip1@ecss1 10.0.20.31
test_set: sip1@ecss2 10.0.20.32
test_set: dscp 0
   to
test_set: 5060
test_set: sip1@ecss1 10.0.20.31
test_set: sip1@ecss2 10.0.20.32
test_set: dscp 0

Создание Домена и подключение IP-set

Создайте Домен (виртуальную АТС) и присвойте ему созданную выше группу (IP-set) настроек SIP-адаптера (команды выполняются в CoCon):

/domain/declare test_domain --add-domain-admin-privileges --add-domain-user-privileges 
/domain/declare test_domain --add-domain-admin-privileges --add-domain-user-privileges 
New domain test_domain is declared
/domain/test_domain/sip/network/set ip_set [test_set]  
/domain/test_domain/sip/network/set ip_set [test_set] 

Property "ip_set" successfully changed from:
          
[] 
    to 
["test_set"].

Добавление услуг

Разрешить оператору Домена (виртуальной АТС) "test_domain" управлять  всеми услугами :

/cluster/storage/ds1/ss/access-list add test_domain *
/cluster/storage/ds1/ss/access-list add test_domain *
Supplementary services successfully added in the domain test_domain.

Для возможности применения пакета услуг у абонентов сразу после создания, необходимо настроить политику применения лицензионных пакетов услуг (детальную информацию вы можете посмотреть здесь )

Создать политику применения лицензии с именем -"new_sub"

/domain/test_domain/ss/licence/politics/declare new_sub "Задаются при создании абонента"

Задать имя пакета услуг дополнительных сервисов, для этого использовать следующие команды :

/cluster/storage/ds1/licence/show-licence 1

нас интересует следующая информация :

/cluster/storage/ds1/licence/show-licence 1
SSW ID                                                < Имя SSW ID >
Description                                           Лицензия для тестирования.

. . .  

Supplementary Services licence package(s)             
 name                                                 'ECSS-FULL+'
 limit                                                600000
 description                                          "Весь пакет услуг"
 SS list                                              [1,2,3,4,5]
                                                      
. . . 

имя пакета услуг в  примере "ECSS-FULL+".
Добавить в созданную политику пакет лицензионных услуг с именем "ECSS-FULL+", именно так он описан в лицензии:

/domain/test_domain/ss/licence/politics/package-add new_sub ECSS-FULL+ 

Пакет  добавлен, но в настоящий момент политика не активна (не может быть применена к абоненту).  Для активации политики new_sub выполнить следующую команду:

/domain/test_domain/ss/licence/politics/activate new_sub

Теперь при создании абонентов можем использовать дополнительные услуги.