Руководства, Инструкции, Бланки

Asterisk Extensions инструкция img-1

Asterisk Extensions инструкция

Категория: Инструкции

Описание

Установка asterisk

Установка asterisk

Добрый день, в этой статье я расскажу как установить самый популярный сервер VoIP телефонии Asterisk. С помощью данного сервера Вы сможете организовать телефонию в офисе, дома, или реализовать автоматическое оповещение, но об этом я расскажу в других статьях. И так приступим к установки asterisk на ubuntu server.

Установить Asterisk на Ubuntu Server крайне просто, понадобится всего одна команда:

Настройка sip.conf

Первым делом после установки Asterisk, необходимо отключить возможность принимать звонки анонимно. Для этого открываем файл sip.conf и снимаем комментарий со строки allowguest=no, так как по умолчанию там стоит Yes. Кстати для поиска данной строки в nano можно нажать Ctrl+W и ввести искомую часть строки и нажать на Enter, если таких слов несколько в тексте то, для продолжения поиска нажать Ctrl+W и Enter.


sudo nano /etc/asterisk/sip.conf

В этом же файле можем указать провайдеров VoIP и своих внутренних абонентов. Я использую оператора it-sekret, так как у него дешевые звонки it-sekret.ru. Для этого в конце файла добавляем

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

Где userID это имя пользователя выданное оператором и PASSWORD это пароль, xxx.it-sekret.ru адрес сервера выданный оператором.

Создаем внутреннего абонента:

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


sudo asterisk -r
reload

Настройка телефона или софтфона

Теперь настроим телефон или софтфон. Я использую X-lite, программных телефонов достаточно много, можете использовать на Ваш вкус. Настройки X-lite выполните как на скриншоте.

Для проверки правильности выполненных настроек в CLI Asterisk (далее просто CLI) выполните команду sip show peers

Настройка правил набора Asterisk.(Диал план)

Первым делом сделаем копию оригинального файла extension.conf


sudo mv /etc/asterisk/extensions.conf
/etc/asterisk/extensions.conf.bak

Теперь в extension.conf пропишем правило для исходящего звонка.


sudo nano /etc/asterisk/extensions.conf

В CLI выполним команду reload, для применения настроек. И теперь попробуем совершить звонок.

Звонок прошел, теперь надо настроить входящий звонок. Для этого нужно прописать правило набора.

На этом простая настройка заканчивается, в следующих статьях я расскажу как сделать запись разговоров, настроить IVR, сделать CallBack(обратный звонок) с сайта и многое другое.

Напоследок полезные статьи:

Другие статьи

Asterisk 04 User Device Configuration

Asterisk 04 User Device Configuration

Данный материал описывает процесс подключения User Device к Asterisk.
Чаще всего это VoIP telephone, и подключение User Device включает в себя два основных шага:

  • Настройка Asterisk на работу с User Device.
  • Настройка самого User Device на работу с Asterisk.
SIP и телефоны

Asterisk и VoIP telephone взаимодействуют с использованием протокола SIP.
Session Initiation Protocol (SIP) является протоколом peer-to-peer. который воспринимает и Asterisk и телефон как равнозначные участники сессии.
В принципе два телефона могут звонить и непосредственно друг другу, без участия Asterisk.
Но, поскольку диалплан "живет" на Asterisk, то он чаще используется in the middle и проксирует все запросы клиентов.

Большинство телефонов имеют Web-интерфейс через который можно выполнить все настройки, с другой стороны, при большом количестве телефонов рекомендуется настроить Server-based configuration process. Его настройка отличается в зависимости от производителя.

Telephone Naming Concepts

Вообще в Asterisk для всех систем значение имеет только channel name .
Строго говоря User или extension являются не более чем триггерами, которые запускают последовательность инструкций.
Например можно написать диалплан, при котором при наборе номера 100 происходит соединение с конкретным телефонным аппаратом; но совершенно аналогично можно настроить на соединение с voicemail box, play back a prompt, подключение к conference room и множество других действий.
Таким образом в Asterisk extension это есть лишь имя группы инструкций в диалплане.
Такая концепция безусловно максимально расширяет функционал, и важна для таких важных сервисов как например hot-desking.

Hot-desking - это feature, которая позволяет пользователя залогиниться на девайсе и принимать входящие вызовы с этого девайса. Для Asterisk понятия User и Extension совершенно независимы от физического телефона.

Несмотря на то, что технически физ телефон можно именовать как угодно, рекомендуется, чтобы его имя совпадало с его MAC-адресом (например 0000FFFF0001).

Hardphones, Softphones, and ATAs

User Device бывает трёх типов.

  • hardphone - физическое устройсто, внешне похожее на традиционный телефон. Подключает непосредственно к сети. Hardphone 0 это то что также называют VoIP telephone или SIP telephone .
  • softphone - это программа, запущенная на компьютере или смартфоне.
  • Analog Terminal Adapters (ATAs) - это утсройство, спроектированное для того, чтобы к телефонной сети SIP можно было подключить традиционные телефонные аппараты или факсы.
Configuring Asterisk

Asterisk позволяет подключать между собой устройства, использующие различные протоколы, например SIP, IAX2, Skinny/SCCP, Unistim, H.323, MGCP.
Настройка означает настройку channel configuration files этих протоколов.

Мы рассмотрим настройку на примере наиболее популярных протоколов, а именно SIP и IAX2.
Сhannel configuration files: sip.conf и iax.conf.
Сhannel driver: chan_iax2.so, chan_sip.so.

В системе Asterisk параметры "одеваются" в следующей по иерархии:
1. The specific section for the relevant channel
2. The template for the section
3. The [general] section
4. The hardcoded defaults

Это означает, что если мы не выставили какой-то специфический параметр, он получит дефолтное значение, которое чаще всего будет оптимальным.

Взаимодействие Channel Configuration Files и Dialplan

Channel Configuration File описывает устройство, тогда как Dialplan описывает взаимодействие между устройствами.

Входящий звонок в систему Asterisk идентифицируется через устройство, через которое звонок пришёл. В нашем случае это sip.conf.
Сhannel configuration file определяет в какое место диалплана прибегает звонок. т.е. определяет context .
В рамках этого context производится поиск набранного номера.
Extension в Dialplan также имеет связь с именем физического устройства.
Причём, как видно channel configuration file контролирует не только вход звонка, но и его выход, определяя конечное физическое устройство ассоциированное с этим именем.

Поскольку SIP наиболее популярный протокол, sip.conf изобилует различными функциями и примочками, в этом можно убедиться посмотрев файл ip.conf.sample
К счастью дефолтные опции подходят для большинства случаев и мы можем сделать очень простую рабочую конфигурацию.

Мы создали 4 секции:

  1. general section Это стандартная секция, которая задаёт общие настройки SIP
    context=unauthenticated здесь мы задали дефолтный контекст. тем самым явно определив, куда направлять unauthenticated guest calls, что очень важно для безопасности и не дать подобным звонка выходить наружу.

allowguest=no - также очень важная для безопасности опция, запрещающая все unauthenticated calls. Включать её рекомендуется только когда вы точно понимаете что делаете.

srvlookup - опция нужна при подключении к ITSP для outbound connections, использовать ли DNS при подключении.
udpbindaddr=0.0.0.0 - слушаем запросы UDP/TCP на всех интерфейсах
tcpenable - SIP в качестве транспорта может использовать TCP и UDP, UDP наиболее распространён.

  • template section, здесь (!) как раз и говорит Asterisk что это раздел шаблона. Использование шаблона избавляет нас указывать одни и те же настройки на нескольких однотипных телефонах.

    type=friend - type определяет как Asterisk будет воспринимать incoming SIP requests. При настройке friend channel driver will match on username first, IP second.

    context=LocalSets - определяет context, т.е. раздел диалплана, в который будут прибегать все звонки инициированные данным channel.

    host=dynamic - host определяет IP адрес для данного channel. dynamic означает что принадлежность девайса данному channel будет определяться на основе регистрации. Мы также можем поставить static и указать IP.

    nat=force_rport,comedia - SIP и NAT уживаются не так просто, поскольку SIP включает IP адреса в его внутренних сообщениях. Это тема отдельного материала.

    dtmfmode - DTMF это тоны которыми можно управлять голосовым меню. Чаще всего используют тип DTMF rfc2833. Здесь мы поставили автоматику.

  • channel section - Последние две секции есть настройки девайсов или channel section. Здесь имя девайса указано в квадратных скобках, а принадлежность к шаблону - в круглых.
  • Modifying Channel Configuration Files

    После модификации файла sip.conf, для apply нам нужно выполнить команды:

    Для проверки, что новые channels были загружены:

    Создание диалплана

    Для тестирования мы создадим файл диалплана:
    /etc/asterisk/extensions.conf

    Мы пока не будем комментировать это содержимое, поскольку этому посвящён отдельный материал.

    Настройка нашего телефона на CSipSimple

    CSipSimple мы настроим на работу с channel 64A769FE76F8

    1. Для начала нужно слегка настроить WiFi, нам нужно отключить автоотключение Wifi в режиме ожидания.
      menu > Настройки > Беспроводные сети > Настройки WiFi
      На этой странице выираем menu > Дополнительно
      В разделе Автовыключение WiFi выбираем "Никогда" .
    2. В этом же разделе посмотрим MAC данного телефона (предположим это 64A769FE76F8 и вводим его в sip.conf свойствах channel:

    Также правим в файле /etc/asterisk/extensions.conf строку:

    Применяем и проверяем изменения:

  • В CSipSimple после установки идем:
    menu > Easy Configuration
    На это странице отмечаем опции:
    - Integrate with Android
    - Always Available
  • В CSipSimple добавляем Account:
    Add Account > Advanced
    - Account name - Любое имя, поставим AsteriskPBX
    - Server - IP Asterisk, ставим 192.168.10.114
    - Username - нужно ввести имя телефона: 64A769FE76F8
  • Настройка нашего телефона на X-lite

    Теперь наши телефоны должны успешно зарегистрироваться и звонить друг другу.
    А при наборе 200 мы услышим "Hello, World".

    IT рабочие заметки

    IT рабочие заметки extensions.conf

    extensions.conf - the Asterisk dial plan

    extension (добавочный номер) - обычно обозначает числовой идентификатор, который присвоен линии, идущей к конкретному телефону.

    Синтаксис добавочного номера – это слово exten, за которым следует стрелка, образованная знаками равенства и «больше чем»:

    Далее указывается имя (или номер). В традиционных системах телефонной связи под добавочными номерами мы понимаем цифры, которые надо набрать, чтобы другой телефон зазвонил. В Asterisk это понятие намного шире; например, в качестве имени добавочного номера может использоваться любая комбинация цифр и букв. Полный добавочный номер состоит из трех компонентов:

    Имени (или номера).

    Приоритета (каждый добавочный номер может включать множество шагов; порядковый номер шага называется его приоритетом).

    Приложения (или команды), которое выполняет некоторое действие над вызовом.

    Эти три компонента разделяются запятыми:

    Вот пример того, как может выглядеть настоящий добавочный номер:

    В этом примере имя добавочного номера – 123, приоритет – 1, а приложение – Answer().

    Приоритеты. Начиная с версии 1.2 Asterisk, был введен приоритет n, что означает «следующий». Каждый раз, когда Asterisk встречает приоритет n, она берет номер предыдущего приоритета и добавляет 1. Это упрощает внесение изменений в диалплан, поскольку теперь не надо изменять номера всех шагов. Например, диалплан может быть таким:

    Asterisk будет самостоятельно вычислять номер следующего приоритета при каждой встрече с приоритетом n. Однако следует отметить, что приоритет под номером 1 должен быть задан обязательно. Если случайно для идущего первым приоритета задать n вместо 1, добавочный номер будет недоступен.

    Начиная с версии 1.2 в Asterisk стало общепринятой практикой присваивать приоритетам текстовые метки. Это обеспечивает возможность ссылаться на приоритет не по номеру, который может быть неизвестен, потому что теперь в диалпланах, как правило, используются ненумерованные приоритеты. Чтобы присвоить приоритету текстовую метку, просто добавляем ее в круглых скобках после приоритета:

    Приложения

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

    Для выполнения некоторых приложений, таких как Answer() и Hangup(), не требуется никаких дополнительных инструкций. Некоторым приложениям необходима дополнительная информация. Эти данные, называемые аргументами, могут передаваться в приложения, чтобы оказывать влияние на то, как они выполняют свои действия. Чтобы передать аргументы в приложение, разместите их через запятую в круглых скобках, следующих за именем приложения.

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

    Playback () (Воспроизведение) воспроизводит в канале предварительно записанный звуковой файл. При использовании приложения Playback() ввод, поступающий от пользователя, просто игнорируется. Чтобы использовать Playback(), задайте в качестве аргумента имя файла (без расширения ). Например, Playback(filename) обеспечит воспроизведение звукового файла filename.gsm, предполагая, что он размещен в стандартной папке для звуковых файлов(стандартная папка /var/lib/asterisk/sounds/ или /usr/share/asterisk/sounds). Обратите внимание, что по желанию можно указать полный путь к файлу, как это сделано в данном примере:

    Этот пример обеспечит воспроизведение файла filename.gsm из папки /home/john/sounds/. Также можно использовать относительные пути из папки для звуковых файлов Asterisk:

    Background () (Фон) - как и Playback(), это приложение воспроизводит записанный звуковой файл. Однако, в отличие от Playback(), если пользователь нажимает кнопку (или последовательность кнопок) на клавиатуре телефона, оно прерывает воспроизведение и переходит к добавочному номеру соответственно нажатым цифрам. Например, если абонент нажмет кнопку 5, Asterisk прекратит воспроизводить звуковое сообщение и передаст управление вызовом первому приоритету добавочного номера 5.

    WaitExten () (Ожидание добавочного номера). Приложение WaitExten() ожидает от абонента набора телефонного номера и часто вызывается сразу после приложения Background()

    Hangup () (Разъединить) выполняет именно то, что подразумевается под его именем: оно разъединяет активный канал. Это приложение должно применяться в конце контекста для завершения текущего вызова, что защитит от несанкционированного использования диалплана абонентами. Приложение Hangup() не принимает аргументов.

    Goto () используется для перенаправления вызова в другую часть диалплана. Синтаксис Goto() требует передачи в него в качестве аргументов целевого контекста, добавочного номера и приоритета:

    Dial () (Звонить) Примеры: звонок на демонстрационный сервер Digium, который использует протокол IAX2, по следующему добавочному номеру:

    Третий аргумент Dial() – строка опций. Она может содержать один или более символов, влияющих на поведение приложения Dial(). Список возможных опций слишком велик, чтобы приводить его здесь; рассмотрим лишь самую популярную из них – опцию m. Если указать m в качестве третьего аргумента, вызывающая сторона, пока выполняется дозвон до вызываемого абонента, будет слышать во время ожидания вместо гудков музыку (конечно, если эта музыка сконфигурирована правильно). В случае Ubuntu Server 9.10 нужно установить поддержку mp3 (пакет asterisk-mp3), скопировать музыкальный файл формата mp3 в директорию /var/lib/asterisk/moh и перезапустить Asterisk. Пример, пока вызываемый абонент не отвечает -проигрывать музыку и по истечении 50 секунд (без ответа абонента) перейти к следующей команде диалплана:

    MusicOnHold () Проигрывает музыку ожидания (Music On Hold), неопределенно долго. voip.rus.net: Команда MusicOnHold

    GotoIF () - вычисляет выражение и отправляет абонента в соответствующее место назначения в зависимости от истинности или ложности выражения.

    Ringing () - отправка в канал запроса для индикации вызывающему пользователю "гудков вызова" (ringing). Если на канале уже установлено состояние "ответа на вызов", то команда Ringing сразу закончит свое выполнение и будет выполнена следующая команда в плане набора. Если Вам надо, чтоб вызывающий абонент услышал хотя бы парочку секунд сигнал вызова, перед тем, как попадет в систему голосового меню IVR, то как решение можно использовать команду wait() в комбинации с командой ringing. Источник: Команда Ringing()

    Добавочные номера s,i,t

    s - добавочный номер s: (. Для проверки нажать #. ) Когда в контекст поступают вызовы, для которых не указан конкретный добавочный номер (например, вызов FXO-линии), они передаются на добавочный номер s. (s – сокращение от start (начало), поскольку именно здесь начнется обработка вызова, если с ним не передана информация о добавочном номере.)

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

    t - если абонент слишком долго не нажимает кнопку после запуска приложения WaitExten(), вызовы направляются на добавочный номер t (время ожидания по умолчанию – 10 с).

    extensions.conf Настройка dialplan для выполнения тестовых вызовов Echo

    Давайте подробнее остановимся на тестовом dialplan – он позволит выполнять обратный вызов программного телефона, после того как тот будет настроен, и использовать приложение диалплана Echo() для тестирования двусторонней аудиосвязи.

    После ввода текста в extensions.conf диалплан необходимо перезагрузить, выполнив команду dialplan reload из консоли Asterisk:

    Определение SIP-устройства в Asterisk

    Поскольку мы хотим как направлять вызовы в программный телефон, так и обеспечить клиенту возможность размещать вызовы, параметр type (тип) был определен как friend (друг). Существует еще два параметра: user (пользователь) и peer (равноправный участник сети). С точки зрения Asterisk user задается для входящих вызовов, а peer – для исходящих звонков (через приложение Dial()). friend – это просто краткая запись, определяющая и пользователя, и равноправного участника. Если есть сомнения, задавайте тип friend.

    Опция host (хост) используется для определения местонахождения клиента в сети, когда Asterisk необходимо направить ему вызов. Это значение может быть задано статически, например host=192.168.1.100, или, если клиент имеет динамический IP-адрес, задается host=dynamic.Если для опции host задано значение dynamic и клиент сконфигурирован для автоматической регистрации, Asterisk получит от конечной точки (то есть от телефонного аппарата или программного телефона) пакет REGISTER, из которого Asterisk сможет узнать, какой IP-адрес использует равноправный SIP-участник.

    Добавим строки в extensions.conf, чтобы наши клиенты могли звонить между собой

    Подключение к терминатору SIP

    Задавая тип peer, мы указываем Asterisk, что при получении сообщения INVITE (Приглашение) (когда поставщик присылает вызов) нужно сравнивать не имя [мой поставщик сервисов], а IP-адрес, указанный в этом сообщении. Параметр host – это IP-адрес, на который мы будем направлять наши вызовы, и этот IP-адрес будет сопоставляться при получении вызова от поставщика. Если параметр fromuser не указывать в peer будет пробрасываться Caller ID с VoIP- телефона (softphone).

    Использование шаблонов в конфигурационных файлах

    С конфигурационными файлами Asterisk связан один очень малоизвестный факт, но он настолько замечательный, что заслуживает отдельного небольшого раздела. Скажем, имеется 20 SIP-телефонов, практически идентичных с точки зрения конфигурации. Согласно документации они должны описываться путем задания параметров для каждого телефона в отдельности. Фрагмент подобного файла sip.conf мог бы выглядеть так:

    Слишком много ввода текста, копирования и вставки, правда? А что если требуется изменить имя контекста для телефонов. Не очень удобно, не так ли? Вводим шаблон. Давайте создадим таких же участников сети типа friend, как делали выше, только на этот раз используя шаблон:

    Это одна из самых малоизвестных возможностей создания конфигурационного файла. Очень немногие пользуются этой возможностью, но лишь потому, что мало кто знает о ней. Итак, пришло время перемен.

    extensions.conf.txt · Последние изменения: 2015/07/29 07:25 (внешнее изменение)

    Инструменты страницы

    Начальная настройка Asterisk

    Feanor184.ru Начальная настройка Asterisk

    После удачной установки asterisk — нам нужно настроить его до работоспособного состояния. Конфигурационные файлы asterisk’a находятся в каталоге /etc/asterisk. Настройка осуществляется путем прямого редактирования файлов конфигурации. Изучив и отредактировав эти файлы, мы можем добиться правильной работы сервера.

    Конфигурационные файлы.

    Главный конфигурационный файл:

    asterisk.conf. сервер Asterisk берет из этого файла информацию о том, где какие файлы находятся в системе, включая директорию, где лежат все остальные файлы конфигурации. По умолчанию, Asterisk ищет файл asterisk.conf в директории /etc/asterisk. но мы можем, с помощью параметров запуска Asterisk, задать другое расположение и имя этого файла( ВАЖНО! Если вы не уверены в уровне своей квалификации, имя этого файла трогать не стоит ).

    Файлы конфигурации каналов Asterisk:

    Файлы конфигурации Диалплана (Плана набора):

    Файлы конфигурации специфичные для некоторых команд плана набора:

    Конфигурационные файлы не попадающие в какую-либо категорию:

    Основная прелесть Астериска заключается в том, что во всех файлах конфигурации Asterisk, мы можем включать в эти друг в друга с частями конфигурации, используя директиву #include. Для того, например, чтобы в основном файле конфигурации SIP канала описать все глобальные настройки, а аккаунты SIP пользователей включать из другого файла. Это очень удобно для сложной настройки большого офиса или группы офисов между собой. Т.к. настройки каждого офиса(подразделения\отдела\кабинета) можно хранить в отдельном файле и подключать его к основной конфигурации директивой #include .

    Установка кодека g729 (и g723)

    Кодек G729 обременен патентными ограничениями, что не дает возможность команде разработчиков Asterisk включить его в стандартную сборку Asterisk. Тем не менее, данный кодек является самым популярным кодеком на низкоскоростных каналах связи. Поэтому нам необходимо установить его самостоятельно.

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

    »!» в CLI означает, что команду нужно выполнить в консоли LINUX
    на сайте http://asterisk.hosting.lv/ выбираем версию нашего астериск, платформу (i386 или x86_64) и тип использованного компилятора (IPP или GCC4).
    Например, для Сentos 32 бита, на платформе intel, подойдет:

    затем загружаем модуль в астериск

    если мы ошиблись в выборе нужного кодека, скорее всего астериск «упадет»

    Запускаем астериск и видим на каком этапе он вываливается

    Удаляем модуль и перезапускаем астериск.
    Без удаления можно обойтись так: в файле modules.conf добавить строчку

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

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

    Подключение SIP клиента.

    Теперь необходимо настроить со стороны Asterisk-а SIP-аккаунт для внутреннего абонента.

    Создаем номер для абонента, узказывая для него опции подключения.

    сохраняем и делаем в cli

    Полезные команды CLI Asterisk Простой диалплан. Файл extensions.conf

    Файл Extensions.conf описывает логику работы Asterisk, а именно, обработку входящих вызовов, маршрутизацию исходящих вызовов, обработку звонков и событий по разнообразным правилам. В Asterisk это называется ДиалПланом (DialPlan). Как говорят разработчики, диалплан — это сердце Asterisk.

    За работу диалплана отвечает файл extensions.conf. Файл поделен на контексты, в каждом из которых прописана логика работы. Логика работы формируется с помощью приложений. Приложения — это функции Asterisk, запускаемые с параметрами. Последовательность выполнения приложений — построчная.

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

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

    • звонка на внутренний номер 999, который выполняет какую-либо функцию
    • звонка другому внутреннему абоненту, номер которого начинается с цифры «1» и состоящий из трех цифр
    • звонок на внешние телефонные линии через SIP-оператора
    Другие статьи
    • Установка Asterisk 1.8 на Centos
    • Rsyslog и LogAnalyzer — поднимаем сервер логирования на Linux
    • Установка и настройка OpenVPN на Centos
    • Создание Виртуальной машины на VMware ESXi с помощью vSphere Client.
    • Основные команды Linux
    Навигация по постам