Перейти к публикации

Блоги

Блоги сайта

  1. Для меня остается открытым вопрос использования бесплатного корпоративного чата, не определился с ним. В данной статье хочу рассмотреть установку и настройку бесплатного чат сервера Matrix Synapse и web клиента для него Riot. В целом, проект мне показался интересным и вполне рабочим, но со своими нюансами. Далее постараюсь подробно раскрыть эту тему.

     

    Информация по Matrix Synapse без проблем гуглится, поэтому не буду подробно рассказывать, что это такое. Кратко пройдемся по основному:
    1. Matrix — это открытый протокол для децентрализованной коммуникации. Он может быть реализован в различных серверах и мессенджерах.
    2. Synapse — локальный сервер, который работает на протоколе matrix, обеспечивает возможность подключения и общения клиентов.
    3. Riot — клиент, который может подключаться к любому серверу, работающему по протоколу matrix, в том числе к synapse. Представлен в виде десктропной или web версии, которую можно установить на свой сервер.

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

    Сразу хочу предупредить, что мое описание не подходит под готовое руководство, которое позволит простым копипастом все настроить. Это руководство именно по matrix и riot, вы должны как минимум уметь настраивать web сервер с nginx, устанавливать сертификаты, проксировать запросы, если вам это понадобится.

    Установка Matrix Synapse home server

    Я буду устанавливать чат сервер на CentOS 7.

    Сразу обращаю внимание, что у меня на сервере будет отключен selinux. Как это сделать, смотрите в статье по настройке сервера, ссылка на которую выше.

    Для работы synapse server необходим Python 2.7, который в CentOS 7 установлен по-умолчанию. Убедиться в этом можно введя в консоли:

    # python -V
    Python 2.7.5

    Сервер чата synapse может использовать различные базы данных. По-умолчанию, он работает с SQLite, что подходит только для теста. В продакшене использовать эту базы плохое решение. Но даже для теста у меня не получилось настроить работу с SQLite. По-умолчанию, в CentOS устанавливается очень старая версия базы. При ее использовании возникает ошибка и сервер не работает. Я обновил базу до последней версии, но как оказалось, с ней тоже возникают проблемы. Я почитал на эту тему обсуждения и понял, что проблема распространенная, а не уникальная, поэтому решил в ней не разбираться. Вместо этого сразу буду использовать postgresql, что является самым надежным и разумным выбором.

    С этого и начнем. Установим postgresql на Centos 7. У меня установлена следующая версия системы:

    # cat /etc/redhat-release 
    CentOS Linux release 7.4.1708 (Core)

    Устанавливаю соответствующий моей версии репозиторий:

    # rpm -Uvh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7.4-x86_64/pgdg-centos10-10-2.noarch.rpm

    Ставим самую свежую на момент написания статьи версию postgresql:

    # yum install postgresql10-server postgresql10-contrib

    Инициализируем базу данных:

    # /usr/pgsql-10/bin/postgresql-10-setup initdb

    Редактируем конфигурационный файл для включения MD5 аутентификации.

    # mcedit /var/lib/pgsql/10/data/pg_hba.conf

    Меняем строки в самом конце:

    host all all 127.0.0.1/32 ident
    host all all ::1/128 ident

    на

    host all all 127.0.0.1/32 md5
    host all all ::1/128 md5

    Запускаем PostgreSQL и добавляем в автозагрузку:

    # systemctl start postgresql-10
    # systemctl enable postgresql-10

    Заходим в систему под пользователем postgres:

    # su - postgres

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

    $ createuser synapse

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

    $ psql

    Задаем пароль userpass для только что созданного пользователя:

    # ALTER USER synapse WITH ENCRYPTED password 'userpass';

    Создаем базу данных для чат сервера matrix synapse:

    # CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER synapse;

    Выходим из консоли управления и учетной записи postgres.

    # \q
    # exit

    Установим еще несколько пакетов, необходимых для взаимодействия synapse с postgresql.

    # yum install postgresql-devel libpqxx-devel.x86_64

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

    # yum install libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel redhat-rpm-config python-virtualenv libffi-devel openssl-devel
    # yum groupinstall "Development tools"

    Устанавливаем менеджер пакетов Python — pip.

    # wget https://bootstrap.pypa.io/get-pip.py
    # python get-pip.py

    Создаем виртуальную среду для приложения synapse. Она используется для изоляции отдельного python проекта. Проект будет использовать свои собственные директории и библиотеки, без взаимодействия с глобальным окружением.

    # virtualenv -p python2.7 ~/.synapse
    # source ~/.synapse/bin/activate

    Устанавливаем необходимые пакеты питона.

    # pip install --upgrade pip virtualenv six packaging appdirs psycopg2

    Обновляем setuptools:

    # pip install --upgrade setuptools

    Устанавливаем сам сервер matrix synapse.

    # pip install https://github.com/matrix-org/synapse/tarball/master

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

    # cd ~/.synapse
    # python -m synapse.app.homeserver --server-name chat.serveradmin.ru --config-path homeserver.yaml --generate-config --report-stats=yes

    Я использую доменное имя для своего чат сервера chat.serveradmin.ru. Обращаю внимание на этот параметр. Он важен, если вы захотите использовать полноценный ssl сертификат и https подключения. Используйте реальное доменное имя, на которое потом будете получать сертификат. После выполнения команды вы получите примерно такой вывод:

    Создание конфигурации для synapse сервера

    A config file has been generated in 'homeserver.yaml' for server name 'chat.serveradmin.ru' with corresponding SSL keys and self-signed certificates. Please review this file and customise it to your needs.
    If this server name is incorrect, you will need to regenerate the SSL certificates

    По умолчанию, в файле конфигурации homeserver.yaml будет указано использовать базу данных SQLite. Комментируем строки, отвечающие за эту настройку и добавляем параметры для подключения созданной ранее postgresql базы.

    #database:
     # The database engine name
     #name: "sqlite3"
     # Arguments to pass to the engine
     #args:
     # Path to the database
     #database: "/root/.synapse/homeserver.db" 
    database:
     name: psycopg2
     args:
       user: synapse
       password: userpass
       database: synapse
       host: localhost
       cp_min: 5
       cp_max: 10
    Обращаю внимание на отступы в файле конфигурации. Они принципиально важны. Должно быть именно так, как показано — database без отступа, name, args один пробел с начала строки. Все остальное — два пробела.

    На этом установка сервера закончена, двигаемся дальше.

    Использование ssl сертификата Let’s Encrypt

    Прежде чем начать настройку сервера, установим на него полноценный ssl сертификат. Если вам это не нужно, можно пропустить данный пункт. Просто посмотреть на чат можно и с самописным сертификатом, который мы получили ранее. Но есть один нюанс. Клиент Riot, который я буду использовать для подключения к серверу, не будет работать с самописным сертификатом. Он будет ругаться на него во время подключения. Так что если вы хотите полноценно протестировать работу мессенджера Riot в связке с matrix synapse, придется установить нормальный сертификат.

    Мой сервер с чатом напрямую не смотрит в интернет. Я буду проксировать все подключения к нему через web сервер, на котором установлен nginx. Поэтому получение сертификата нужно выполнять именно на нем. Если у вас matrix сервер будет смотреть напрямую в интернет, то настраивать получение ssl сертификата надо именно на нем.

    Прежде чем получить сертификат, нарисовал примерно такой конфиг виртуального домена для nginx.

    server {
     listen 80;
     server_name chat.serveradmin.ru;
    
    location /.well-known {
     root /web/sites/chat.serveradmin.ru/www/;
     }
    }

    Подробно про получение сертификатов Let’s Encrypt я рассказывал в статье по настройке веб сервера. За всеми подробностями можете заглянуть туда. Здесь же без подробных пояснений выполняем необходимые действия.

    Устанавливаем certbot.

    # yum install certbot

    Запускаем запрос сертификата.

    # certbot certonly

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

    2: Place files in webroot directory (webroot)

    Далее указываю имя домена:

    Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): chat.serveradmin.ru

    Указываю директорию веб сервера:

    Input the webroot for chat.serveradmin.ru: (Enter 'c' to cancel): /web/sites/chat.serveradmin.ru/www

    Сертификат получил. Дальше рисую следующий конфиг для виртуального хоста nginx уже для работы по https.

    upstream matrix {
     server 77.37.225.129:22991;
    }
    
    server {
     listen 80;
     server_name chat.serveradmin.ru;
     return 301 https://$server_name$request_uri;
    }
    
    server {
     listen 443 ssl http2;
     server_name chat.serveradmin.ru;
     ssl on;
     ssl_certificate /etc/letsencrypt/live/chat.serveradmin.ru/fullchain.pem;
     ssl_certificate_key /etc/letsencrypt/live/chat.serveradmin.ru/privkey.pem;
     ssl_session_timeout 5m;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_dhparam /etc/ssl/certs/dhparam.pem;
     ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
     ssl_prefer_server_ciphers on;
     ssl_session_cache shared:SSL:10m;
    
    location /.well-known {
     root /web/sites/chat.serveradmin.ru/www/;
    }
    
     location / {
     client_max_body_size 50M;
     proxy_set_header Connection "";
     proxy_set_header Host $http_host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header X-Forwarded-Proto $scheme;
     proxy_set_header X-Frame-Options SAMEORIGIN;
     proxy_pass http://matrix;
     }
    }

    На сервере 77.37.225.129 сделан проброс внешнего порта 22991 на локальный 8008. На этом порту работает synapse по незащищенному соединению. Редиректить надо именно на этот порт, так как если сделать переадресацию на защищенный порт, который работает со своим сертификатом, будут проблемы при совместной работе этого локального сертификата и внешнего от Let’s Encrypt.

    С сертификатом и самим сервером synapse разобрались. Дальше я предлагаю сначала установить и настроить бесплатный web клиент для чата — Riot. Если он вам не нужен, можно сразу переходить к настройке самого сервера.

    Установка клиента Riot

    Вам не обязательно устанавливать собственную версию веб клиента riot. Вы можете использовать публичный web клиент https://riot.im/app/, и с его помощью подключаться к своему серверу. Для этого надо указать адрес своего сервера во время подключения.

    Установка web клиента Riot

    Чтобы подключиться через riot, у вас обязательно должно быть настроено подключение по https. По обычному протоколу подключиться не получится, будет ошибка.

    Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.

    или вот такая:

    Can't connect; check your SSL settings and trust the server

    Я и так и сяк пробовал, но оказалось проще и быстрее сделать ssl сертификат от Let’s Encrypt, чем разбираться с ошибками. В общем, получайте сертификат любым удобным для вас способом.

    Для того, чтобы установить собственный web клиент riot достаточно скачать его исходники и разместить их на веб сервере. Последнюю версию можно скачать отсюда — https://github.com/vector-im/riot-web/releases. Далее я использую свежую версию на момент написания статьи.

    # wget https://github.com/vector-im/riot-web/releases/download/v0.13.3/riot-v0.13.3.tar.gz
    # tar -xzvf riot-v0.13.3.tar.gz

    Дальше копируем содержимое распакованной директории в корневую папку веб сервера для домена, который вы назначили. В моем примере это /web/sites/riot.serveradmin.ru/www/.

    Рисуем примерно такой конфиг для публикации riot в web.

    # cat /etc/nginx/conf.d/riot.conf
    server {
     listen 80;
     server_name riot.serveradmin.ru;
     return 301 https://$server_name$request_uri;
    }
    
    server {
     listen 443 ssl http2;
     server_name riot.serveradmin.ru;
     root /web/sites/riot.serveradmin.ru/www/;
     index index.php index.html index.htm;
     access_log /web/sites/riot.serveradmin.ru/log/access.log main;
     error_log /web/sites/riot.serveradmin.ru/log/error.log;
    
     ssl on;
     ssl_certificate /etc/letsencrypt/live/riot.serveradmin.ru/fullchain.pem;
     ssl_certificate_key /etc/letsencrypt/live/riot.serveradmin.ru/privkey.pem;
     ssl_session_timeout 5m;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_dhparam /etc/ssl/certs/dhparam.pem;
     ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
     ssl_prefer_server_ciphers on;
     ssl_session_cache shared:SSL:10m;
    
    location /.well-known {
     root /web/sites/riot.serveradmin.ru/www/;
     }
    
    }

    Перечитываем конфиг nginx и можно заходить по указанному веб адресу для использования своего клиента riot. В директории с клиентом есть конфигурационный файл config.sample.json. Переименуйте его в config.json и измените параметр сервера подключения по-умолчанию. Укажите свой.

    "default_hs_url": "https://chat.serveradmin.ru",

    Этого достаточно для использования своего собственного веб клиента riot по настроенному адресу.

    Настройка matrix synapse сервера

    Запускаем установленный сервер.

    # source ~/.synapse/bin/activate
    # synctl start

    Если увидели такой же вывод, значит все в порядке.

    Запуск matrix synapse сервера

    Проверим, на каких портах запустилась служба чата.

    # netstat -tulnp | grep python
    tcp        0      0 0.0.0.0:8448            0.0.0.0:*               LISTEN      26827/python2.7     
    tcp        0      0 0.0.0.0:8008            0.0.0.0:*               LISTEN      26827/python2.7     
    

    Порт 8448 для шифрованных соединений, 8008 для обычных.

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

    Создадим первую учетную запись администратора.

    # register_new_matrix_user -c homeserver.yaml http://localhost:8008
    New user localpart [root]: admin
    Password: 
    Confirm password: 
    Make admin [no]: yes
    Sending registration request...
    Success.

    Теперь можно пройти по адресу https://chat.serveradmin.ru и залогиниться в систему под созданным пользователем администратора.

    Вход в чат matrix

    Если вы не настраивали проксирование через nginx, то можно зайти напрямую на сервер с чатом по его ip адресу — http://192.168.13.31:8008 В моем случае я вижу ту же самую страницу.

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

    Включение свободной регистрации

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

    enable_registration: True

    Я разрешил свободную регистрацию в своем примере. По-умолчанию она запрещена. Если у вас будет публичный чат-сервер, то обязательно надо настроить каптчу. В synapse уже интегрирована гугловская reCAPTCHA. Чтобы она заработала, вам надо зарегистрировать свой сайт в гугле — https://developers.google.com/recaptcha/, затем указать следующие параметры в конфиге:

    recaptcha_public_key: PUBLIC_KEY
    recaptcha_private_key: PRIVATE_KEY
    enable_registration_captcha: true

    Public и Private ключи вы получаете после регистрации каптчи для вашего доменного имени в гугле.

    reCAPTCHA для регистрации в matrix

    Настройка почтовых уведомлений

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

    email:
     enable_notifs: true
     smtp_host: "localhost"
     smtp_port: 25
     notif_from: "Your Friendly %(app)s Home Server <chat@serveradmin.ru>"
     app_name: Matrix
     template_dir: res/templates
     notif_template_html: notif_mail.html
     notif_template_text: notif_mail.txt
     notif_for_new_users: True
     riot_base_url: "https://riot.serveradmin.ru"

    Перезапускаем сервер и проверяем.

    # source ~/.synapse/bin/activate
    # synctl restart

    Я сразу же получил ошибку на тему того, что файл notif_mail.html не найден. Долго разбирался, в чем может быть проблема. Потом все-таки понял, когда скачал вручную полные исходники сервера из github, что у меня не хватает директории res/templates. Похоже, их просто забыли положить в сборку, которая качается через pip. Так что вам нужно будет сделать то же самое, если этот баг не пофиксят к тому моменту, как вы будете пробовать настраивать свой сервер чата. Я поступил вот так:

    # cd /usr/src
    # git clone https://github.com/matrix-org/synapse
    # mv /usr/src/synapse/res ~/.synapse

    После этого еще раз перезапускайте сервер и проверяйте.

    Я очень много времени потратил на отладку оповещений. Так и не понял, как их внятно настроить и когда они будут срабатывать. Вроде в профиле все включаю, ухожу юзером в офлайн, шлю ему в чат письмо. Иногда оповещение приходит через 10 минут, иногда нет. Где настраивается этот интервал в 10 минут — не понял. Вроде в основном конфиге есть некоторые намеки на этот интервал, но явно не указано, что он влияет на время, через которое будет отправлено оповещение на почту. По логике, его бы надо сразу отправлять, если пользователя нет, а не ждать 10 минут.

    Наверно есть какой-то механизм аккумулирования оповещений, возможно у него какая то своя логика, которую я не понял, поэтому мне не до конца ясно, как работают оповещения. Шаблон самих сообщений по-умолчанию очень корявый, по нему толком не понятно, где и в каком чате произошло событие. Вот пример:

    Почтовое уведомление от чата matrix syanpse

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

    Так же у меня не получилось настроить оповещения через внешние почтовые сервисы. В частности, пробовал через ящик на Яндексе, но мне ничего не приходило. То ли проблема с почтовыми настройками, то ли с самими оповещениями, не разобрался. Дебажить эти моменты неудобно. Лог самого сервера завален спамовыми запросами от web клиентов. В общем, тема неоднозначная и неочевидная. Документации по ней нету. Разобраться, в принципе, можно, по идее то работает, но надо тратить время.

    Автозагрузка чат сервера со стартом системы

    Из коробки никакое решение для автостарта сервиса после загрузки системы не предлагается, если вы используете систему centos. Для debian есть готовый пакет, который можно просто установить в систему через apt. В комплекте будет конфиг для systemd. У нас же сервер запускается из домашней директории root в virtualenv, что не очень удобно для настройки автозагрузки. Но все решаемо. Рисуем такой конфиг для systemd по следующему пути — /etc/systemd/system/synapse.service.

    [Unit]
    Description=Synapse Matrix homeserver
    
    [Service]
    Type=simple
    User=root
    Group=root
    WorkingDirectory=/root/.synapse
    ExecStart=/root/.synapse/bin/python -B -u -m synapse.app.homeserver -c /root/.synapse/homeserver.yaml
    ExecStop=/root/.synapse/bin/synctl stop /root/.synapse/homeserver.yaml
    
    [Install]
    WantedBy=multi-user.target

    Вообще, не очень правильно, что у нас сервер работает от root. Но так как у меня это тест, я не стал заморачиваться и создавать отдельного юзера и делать все под ним. Да и вспомнил об этом только в самом конце, когда этот конфиг рисовал. Добавляем сервер в автозагрузку и запускаем:

    # systemctl enable synapse
    # systemctl start synapse

    Проверим, все ли в порядке.

    # systemctl status synapse

    Запуск сервера чата как службы через systemd

    Не очень удобно, что сервер будет дублировать свои логи в системный лог /var/log/messages, но это уже мелочи. Если реально будет мешать, можно это дело поправить.

    Заключение

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

    Я на первое место всегда ставлю стабильность и надежность работы, даже в ущерб функционалу. Я не люблю решения, которые требуют много сил на свою поддержку. В итоге они могут оказаться дороже коммерческих продуктов. Уже сейчас могу представить, сколько вылезет ошибок при очередном обновлении. Вот мое краткое резюме по плюсам и минусам synapse matrix на основе того, что я успел попробовать и проверить.

    Плюсы:

    • Обширный бесплатный функционал.
    • Свой локальный сервер
    • Гибкие настройки email оповещений. Хоть и не очень понятные настройки, но думаю, если разобраться, будет в итоге работать.
    • Контроль набора текста и прочтения сообщения. Вы видите, когда пользователь прочтет отправленное ему сообщение. Это важный и удобный функционал. Тот же mattermost или rocket.chat не предлагают этого в бесплатной версии.
    • Хороший выбор клиентов. Тот же riot есть как приложение для десктопа, для смартфона и web версия через браузер.
    • Звонки между клиентами. Никаких настроек не надо, работают сразу.

    Минусы:

    • Много багов, с которыми сталкиваешься сразу же во время установки. Забыть положить файлы с шаблонами в дистрибутив и не исправить это. Мне не понятен такой подход.
    • Нету документации, кроме небольшой справки на github.
    • Очень много вопросов на гитхабе, в основном с ошибками. Пропадают сообщения, комнаты, юзеры, кого-то куда-то не пускает и т.д. Думаю со всем этим придется столкнутся после масштабного внедрения.
    • Мало информации в интернете. В русскоязычном интернете вообще ничего, кроме нескольких упоминаний, все только в англоязычном сегменте, да и то в основном краткие руководства по установке. Даже по настройке ничего не нашел, разбирался во всем сам.

    Для себя сделал такой вывод — буду наблюдать за развитием. Сам нигде внедрять и пробовать не буду. Подожду какое-то время. Если взлетит, хорошо, буду пользоваться. Если будет в таком же состоянии, как сейчас, то увы, не считаю его готовым для внедрения в реально рабочие коллективы. Пока еще сыро.

     

    Статья позаимствована с ресурса serveradmin.ru

     

     

  2. Лучшие партнерки для заработка на сайте

    Push-заработок: CLICKSTAR, REALBIGMEDIA, REDPUSH, PUSHPROFIT
    Биржи ссылок: GOGETLINKS, MAINLINK, ROTAPOST, SAPE
    CPA-сети: LEADS, ACTIONPAY, ADMITAD, EPN
    Тизеры на сайт: BODYCLICK, TEASERNET, DIRECTADVERT
    Биржи статей: MIRALINKS, WEBARTEX
    Всплывающая реклама: ADVMAKER, RTB.SAPE, ADVERTUR,
    Разное: XMLSTOCK, TRAFFIC.SAPE, BESEED, CONTEMA

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

    • Продажа ссылок (статей);
    • Размещение рекламы (баннеры, тизеры, контекстная, оплата за действия);

    При монетизации блога могут применяться эти же принципы заработка.

    Советую прочитать статьи:

    1. Заработать сайтом на продаже ссылок (статей)

    Любой сайт находящийся в индексе Яндекса может зарабатывать деньги на продаже ссылок и статей.

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

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

    Чтобы ссылки активно покупали необходимо наличие страниц сайта в индексе Яндекса или наличие PageRank на страницах сайта. Так же с 2015 года очень сильным фактором стала посещаемость. Чем она выше, тем дороже можно поставить цены.

    В интернете есть множество бирж ссылок. Я советую Вам работать с самыми крупными и проверенными:

    В крупных биржах ссылки всегда будут быстро раскупаться по средним ценам из-за большого количества оптимизаторов в них. В связи с проблемами на ссылочном рынке (спрос сильно просел с 2014 года) я рекомендую регистрироваться сразу в нескольких биржах с целью охватить как можно больше рынок.

    Сколько можно заработать на сайте в биржах ссылок?
    Очень много. Вот конкретные цифры заработка некоторых веб-мастеров на продаже ссылок в Sape:

    Доходы в sape за один день доходят до 25000 рублей

    Доход 8000-25000 рублей в день и это только на продаже ссылок в SAPE. Рекомендую почитать:

    Примечание:
    → В биржах MAINLINK, SAPE - ежедневная оплата за размещение ссылок.
    → В биржах GOGETLINKS, ROTAPOST - оплата за вечные ссылки.

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

    Я советую Вам зарабатывать в трех биржах статей:

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

    Сколько можно заработать на сайте, размещая статьи?
    Примерно столько же, сколько на продаже ссылок, то есть лучшие вебмастеры получают десятки тысяч рублей.

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

    Примечание
    Полный список бирж ссылок и смотрите на странице: рейтинг бирж ссылок


    2. Заработать на своих сайтах с помощью рекламы

    Как было сказано выше, чтобы зарабатывать сайтом с помощью рекламы необходима, чтобы ресурс имел посещаемость. Чем больше посетителей будет, тем больше потенциальная прибыль.

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

    2.1. Заработать сайтом на контекстной рекламе

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

    Заработок на контекстной рекламе очень сильно зависит от аудитории. Например, для сайта развлекательной тематики такая реклама не пойдет, т.к. молодая аудитория больше всего обращает внимание на яркие картинки (тизеры, баннеры), чем на скучные объявления. В рунете есть 2 гиганта контекстной рекламы: Яндекс Директ, Google Adsense. В Яндекс Директе довольно строгие требование к сайтам: от 500 уникальных посетителей, хороший дизайн и контент, поэтому далеко не все сайты проходят модерацию. Google Adsense также имеет множество ограничений наложенных прежде всего на содержание сайта.

    Есть и альтернативные варианты партнерок, которые подойдут для всех сайтов:


    2.2. Заработать сайтом на CPA (продажах товаров, услуг)

    CPA-сеть представляет из себя сервис, где представлено множество офферов. Каждый оффер представляет из себя какую-то цель: продажа товара, регистрация на сайте, отправка заявки и прочее. За каждое такое целенаправленное действие вебмастер получает вознаграждение. При чем есть предложения с очень существенными суммами. Например, за заявку на кредит можно получить сразу 1000 рублей. Неудивительно, что с такими суммами вознаграждения некоторые топовые вебмастера получают за один день несколько миллионов рублей дохода.

    CPA позволяют даже не имея в наличии своего интернет-магазина получать комиссию с продаж лишь "сливая" трафик на партнерку. Лучше всего монетизируется платежеспособный трафик.

    Но не все так просто. Для заработка на CPA-сетях потребуется не мало знаний маркетинга. Ведь успех большого заработка кроется в грамотном умение преподать своей аудитории товар/услугу.

    CPA-сетей очень много. Вот список самых крупных:

    Советую прочитать следующие статьи


    2.3. Заработок на Push-уведомления

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

    Помимо заработка Вы еще наберете и базу подписок, которую можно потом продать (хотя это не хорошо по отношению к пользователям). Также можно будет оповещать свою аудиторию через рассылку о всех новостях на сайте.

    С недавнего времени открылась новая партнерская программа offergate.proOFFERGATE, которая относится к классу CPA-сетей, но здесь есть специальный оффер, который позволяет зарабатывать на push уведомлениях.

    Более подробно про этот способ заработка читайте здесь:


    2.4. Заработать сайтом на баннерной рекламе

    Размещение баннеров на сайте относится к безопасным методам заработка на сайте. Однако сложность заключается в том, что сложно найти рекламодателей. Существуют биржи баннерной рекламы, которые позволят Вам сэкономить время поиска рекламодателя и позволят получать стабильный доход. Однако этих бирж крайне мало.

    Биржи баннерной рекламы для заработка на сайтах:


    2.5. Заработать сайтом на тизерной рекламе

    Тизерная реклама — это вид рекламы, которая состоит из картинки и текста. Заработок на тизерах лучше подойдет для динамичных сайтов и сайтов развлекательной тематики. Лучшие вебмастеры зарабатывают на тизерах довольно большие деньги — около 6000 рублей в день (данные взяты с топ10 лучших вебмастеров TEASERNET).

    Биржи тизерной рекламы для заработка на сайтах:

    Примечание
    Бирж тизерной рекламы очень много. Советую ознакомиться с рейтингом тизерок.


    2.6. Заработать сайтом на файлообменниках

    В чем смысл заработка на файлообменнике? Вы закачиваете какой-то файл на файлообменник. Потом когда кто-то этот файл захочет скачать, то ему будет предложено два варианта скачивания: платный и бесплатный. Если он выберет платный, то ему придется заплатить денежку за более быструю скорость и Вам капнет от этой денежки приличный процент. А за каждую тысячу бесплатных скачиваний так же платят от 5 до 15 баксов. Советую прочитать: как заработать на файлообменниках.

    Партнерки файлообменников для заработка на сайтах:


    2.7. Заработать сайтом на мобильных партнерках

    Заработок на sms-партнерках развивается довольно стабильно, поэтому есть смысл зарабатывать на этом. Бирж sms-партнерок много и каждая из них специфична, но всех их объединяет одно, что Вы получаете прибыль от привлеченных пользователей, которые что-то купили, на что-то подписался и тому подобное.

    Биржи sms-партнерок для заработка на сайтах:

    Примечание
    Советую ознакомиться с рейтингом sms-партнерок.


    2.8. Заработать сайтом на попандерах, кликандерах

    Как показывает практика, попандеры и кликандеры приносят гораздо больше денег, чем тизеры. Размещение попандера и кликандера имеет 1 важный недостаток, о котором Вы сами, наверное, догадываетесь. Попандеры и кликандеры — раздражают посетителей. Подавляющее большинство опрошенных (около 70% - 80%) ответили, что их раздражает попандеры и кликандеры. Но зато размещая попандер и кликандер, Вы будете получать большой заработок с сайта.

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

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

    Биржи попандеров и кликандеров для заработка на сайтах:

    Примечание
    Отличной альтернативной для попандеров является новые форматы рекламы: SlideBanner и TopRich. Они почти не вызывают раздражения у пользователей, а поисковые системы лояльно относятся к ним. Такие форматы есть у следующих крупных партнерок: TEASERNET.


    2.9. Заработать сайтом на кинопартнерках

    У Вас есть сайт про кино? Тогда Вы можете зарабатывать большие деньги на своем сайте в биржах кинопартнерок. Для этого необходимо привлекать пользователей, которые хотят купить диск с кино или скачать его. Конечно, чтобы монетизировать сайт кинопартнеркой не обязательно иметь сайт именно про кино. Вы можете привлекать пользователей с сайтов любой тематики.

    Биржи кинопартнерок для заработка на сайтах:

    Примечание
    Сейчас это почти умирающий подвид для рекламы.


    2.10. Прочий заработок для сайта

    Способов монетизации сайта так много, что охватить их все очень трудно. Перечислю кратко ещё способы как можно заработать сайтом с помощью рекламы:

    1. XMLSTOCK — это продажа XML лимитов в Яндексе. Это легальный пассивный заработок, который вообще ничем не грозит сайту и репутации. Более подробно читайте в специальной статье: как заработать на продаже xml лимитов.

    2. Оплата за просмотры видео из YouTube от BUZZOOLA и BESEED. Вы можете размещать определенные ролики у себя на сайте и за просмотры получать деньги (750 руб за 1000 просмотров). В систему принимаются сайты от 1000 уникальных посетителей в сутки и сообщества в ВК и FaceBook от 10 тыс. подписчиков.

    Полный список партнерских программ для заработка на сайте.

  3. Сегодня хочу поподробнее раскрыть тему защиты роутеров популярной латвийской марки. Речь пойдет о базовой настройке Firewall в Mikrotik для обеспечения безопасности и удобства. Статья на эту тему была написана уже давно, но я решил ее полностью переделать и актуализировать.

     

     

    Введение

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

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

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

    192.168.88.1 локальный адрес микротика
    bridge название бриджа, в который объединены все интерфейсы для локальной сети
    ether1 интерфейс для внешнего подключения WAN
    192.168.88.0/24 локальная сеть, которую обслуживает микротик

     

    Default firewall в Mikrotik

    Если вы используете дефолтную конфигурацию роутера, то она по-умолчанию имеет стандартные правила firewall. Привожу список стандартных правил (rules) с комментариями. Напоминаю, что экспорт правил firewall в mikrotik можно выполнить следующей командой:

    >> ip firewall export file=rules

    Вот список стандартных правил:

    /ip firewall filter
    add action=accept chain=input comment="defconf: accept established,related,untracked" connection-state=established,related,untracked
    add action=drop chain=input comment="defconf: drop invalid" connection-state=invalid
    add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp
    add action=drop chain=input comment="defconf: drop all not coming from LAN" in-interface-list=!LAN
    add action=accept chain=forward comment="defconf: accept in ipsec policy" ipsec-policy=in,ipsec
    add action=accept chain=forward comment="defconf: accept out ipsec policy" ipsec-policy=out,ipsec
    add action=fasttrack-connection chain=forward comment="defconf: fasttrack" connection-state=established,related
    add action=accept chain=forward comment="defconf: accept established,related, untracked" connection-state=established,related,untracked
    add action=drop chain=forward comment="defconf: drop invalid" connection-state=invalid
    add action=drop chain=forward comment="defconf:  drop all from WAN not DSTNATed" connection-nat-state=!dstnat connection-state=new in-interface-list=WAN
    /ip firewall nat
    add action=masquerade chain=srcnat comment="defconf: masquerade" ipsec-policy=out,none out-interface-list=WAN
    

    В принципе, по приведенным комментариям примерно понятно, что тут происходит. Дропаются все входящие и транзитные соединения не из локальной сети, разрешен пинг — icmp, разрешен ipsec, разрешены установленные соединения. Все. Ну и настроен NAT через WAN интерфейс.

    Во многих случаях данных правил по-умолчанию может быть достаточно обычному пользователю, который просто настроил маршрутизатор дома для выхода в интернет. Берите на вооружение, если вам от маршрутизатора больше ничего не надо.

     

    Firewall и базовая настройка безопасности

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

    Сетевой экран позволяет настраивать доступ как к самому шлюзу, так и к ресурсам за ним. Допустим, у вас не запущено никаких сервисов на роутере, и нет никакого доступа извне в локальную сеть. У вас есть какая-то служба на шлюзе, с помощью которой к нему подключаются и управляют (ssh, winbox, http и т.д.), причем ограничение доступа к этой службе настраивать не планируется. Вопрос — зачем вам в таком случае настраивать фаервол? Что он будет ограничивать и какие правила туда писать? В таком случае вам будет достаточно отключить все сервисы на роутере, которые слушают подключения из вне и все.

    На самом деле такой кейс очень популярный дома или в мелких организациях, где нет постоянного админа. Просто настроен какой-то роутер, поднят NAT и все. Я понимаю, что не правильно не настраивать ограничения на доступ к управлению, но я рассказываю, как часто бывает. То есть firewall должен решать конкретную задачу по ограничению доступа к ресурсам, а не существовать просто так, чтобы был.

    Еще популярны случаи, когда настроена куча правил, а в конце все равно стоит accept для всех подключений. Такие ляпы я сам иногда делал, когда отлаживал где-то работу сервиса и забывал потом вернуть обратно ограничения. Фаервол вроде настроен, но реально его нет. Если отключить — ничего не изменится.

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

    Я рекомендую первым правилом при любой настройке firewall ставить разрешение на подключение к управлению устройством. Этим вы подстрахуете себя, если где-то дальше ошибетесь и заблокируете доступ к устройству в одном из правил.

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

    Идем в раздел IP -> Firewall. Первая вкладка Filter Rules то, что нам надо. Если делаете настройку firewall с нуля, то там должно быть пусто. Добавляем новое правило.

    Настройка firewall на mikrotik

    По идее, надо еще заглянуть во вкладку action, но в данном случае не обязательно, так как там по-умолчанию и так выставляется нужное нам значение accept.

    Дальше разрешаем уже установленные и связанные входящие соединения. Для этого создаем следующее правило.

    Разрешаем установленные и связанные подключения

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

    Теперь сделаем запрещающее правило, которое будет блокировать все входящие соединения через WAN интерфейс. В моем случае ether1.

    Правило блокировки всех входящих подключений

    Action Drop

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

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

    Возьмем примеры этих правил из дефолтной конфигурации файрвола. Добавляем 2 новых правил для цепочки forward. В первом action выбираем fasttrack connection, во втором accept для established и related подключений.

    Включение fasttrack connectionНастройка fasttrack connectionПравило для транзитного трафикаПравило разрешения forward трафика

    Дальше по примеру дефолтной конфигурации, запретим и все invalid подключения.

    Запрет invalid подключенийAction drop

    В завершении запретим все подключения из WAN в LAN.

    Запрет доступа из WAN в LANAction Drop

    Подведем краткий итог того, что получилось. Вот самый простой, минимальный набор правил firewall в mikrotik для базового случая:

    Базовый список правил файрвола

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

    Но если firewall оставить как есть в таком виде, то раздачи интернета для локальной сети не будет. Для этого надо настроить NAT. Это сделать не сложно, рассказываю как.

     

    Настройка NAT в микротик

    Для того, чтобы пользователи локальной сети, которую обслуживает роутер на микротике, смогли получить доступ в интернет, настроим на mikrotik NAT. Для этого идем в раздел IP -> Firewall, вкладка NAT и добавляем простое правило.

    Включение NAT в mikrotik

    Действие указываем masquerade.

    Action masquerade

    Все, NAT настроен, пользователи могут выходить в интернет.

     

    Проброс портов

    Покажу на простом примере, как при настроенном NAT и включенном фаерволе выполнить проброс порта в mikrotik для доступа к службе в локальной сети. Пробросить порт можно в той же вкладке NAT в настройках Firewall.

    Для примера выполним проброс порта rdp из интернета через микротик. Извне будет открыт порт 41221, а проброс будет идти на локальный адрес 192.168.88.10 и порт 3389.

    Проброс порта в микротикПроброс rdp порта на mikrotik

    Я настоятельно не рекомендую открывать доступ к rdp порту для всего интернета. Лично имел печальный опыт в такой ситуации. Обязательно настройте ограничение доступа по ip к этому порту, если такое возможно. Если невозможно, то не пробрасывайте порт, а сделайте доступ по vpn. Ограничение по ip делается просто. Добавляем еще один параметр в правило проброса порта.

    Ограничение доступа по ip к проброшенному порту

    Если используется список ip адресов, который будет меняться, проще сразу в правиле проброса указать на список, а потом править уже сам список. Для этого его надо создать. Создать список ip можно на вкладке Address List. Добавим список:

    Создание списка ip в микротик

    Возвращаемся в правило проброса порта, переходим на вкладку Advanced и добавляем указанный список в Src. Adress List

    Ограничение доступа по списку ip

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

     

    Защита подключения через winbox

    Расскажу отдельно о том, как защитить подключение по winbox с помощью firewall. В микротиках время от времени находят критические уязвимости. Единственным способом надежно от них защититься — ограничить доступ к winbox с помощью фаервола.

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

    Для начала создадим список IP, которым будет разрешено подключаться удаленно к winbox.

    Защита winbox

    Добавляем правило в Firewall. Оно должно быть выше правила, где блокируются все входящие соединения.

    Ограничение доступа через winbox

    В вкладке Advanced указываем список:

    Список ip для подключения по winbox

    В разделе action ставим accept. Итоговый список правил должен быть таким.

    Список правил фаервола микротика

    Так мы обезопасили удаленный доступ через winbox. Считаю это самым простым и безопасным способом защиты микротика. Если есть возможность органичений по ip, всегда используйте. Это универсальный способ, годный для любого случая и системы, не только в отношении микротика.

    В современном мире ИТ постоянно находят уязвимости. Невозможно всегда оперативно ставить обновления. Зачастую, эти обновления могут либо нарушить работу системы, либо содержать другие уязвимости. Только ограничение доступа к службам и системам позволяет более ли менее надежно защититься и спать спокойно, не торопясь обновляться со всех ног при обнаружении очередной критической уязвмости.

     

    Как на микротике отключить файрвол

    Для того, чтобы полностью отключить Firewall на микротике, достаточно просто отключить или удалить все правила в списке. По-умолчанию, в mikrotik используются разрешающие правила. Все, что не запрещено — разрешено. То есть если у вас нет ни одного активного правила, можно считать, что файрвол отключен, так как он пропускает все соединения без ограничений.

    Вот пример отключенного фаервола на микротике 🙂

    Отключение firewall на mikrotik

    Итоговый список правил, настроенный по этой статье, получился вот такой:

    /ip firewall address-list
    add address=77.88.0.81 list=rdp_access
    add address=77.88.8.8 list=rdp_access
    add address=8.8.8.8 list=rdp_access
    add address=1.1.1.1 list=winbox_remote
    add address=2.2.2.2 list=winbox_remote
    /ip firewall filter
    add action=accept chain=input comment="local accept" in-interface=bridge
    add action=accept chain=input comment="established and related accept" connection-state=established,related
    add action=accept chain=input comment=winbox_accept dst-port=8291 in-interface=ether1 protocol=tcp src-address-list=winbox_remote
    add action=drop chain=input comment="all input block" in-interface=ether1
    add action=fasttrack-connection chain=forward comment=fasttrack connection-state=established,related
    add action=accept chain=forward comment="established and related accept" connection-state=established,related
    add action=drop chain=forward comment="drop invalid" connection-state=invalid
    add action=drop chain=forward comment="drop WAN -> LAN" in-interface=ether1 out-interface=bridge
    /ip firewall nat
    add action=masquerade chain=srcnat out-interface=ether1
    add action=dst-nat chain=dstnat dst-port=41221 in-interface=ether1 protocol=tcp src-address-list=rdp_access to-addresses=192.168.88.10 to-ports=3389

     

    Статья позаимствована с ресурса serveradmin.ru

     

     

     

  4. Многие современные методы борьбы со спамом активно используют службу DNS для выявления нежелательных сообщений электронной почты. Поэтому правильная настройка DNS-зоны для собственного сервера корпоративной почты позволит администратору избежать множества проблем с приёмом электронной почты от удалённых почтовых серверов и с отправкой электронной почты со своего почтового сервера.

    Рассмотрим настройку DNS-зоны на примере наиболее распространённого DNS-сервера BIND для правильной работы почтового хостинга корпоративной почты. Итак, в доменной зоне должны в обязательном порядке быть указаны следующие записи:

    requ2.png

    Запись типа NS— Name Server, сервер имён

    В записях типа NS указываются имена DNS-серверов, которые будут поддерживать доменную зону. По требованиям регистраторов доменных имён в целях доступности и отказоустойчивости их должно быть не менее двух и они должны быть расположены в различных подсетях класса C. Имя должно заканчиваться точкой иначе DNS-сервер интерпретирует имя как поддомен текущей зоны.

    NS ns1.tendence.ru.
    NS ns2.tendence.ru.
    NS ns3.tendence.ru.

    Запись типа MX — Mail eXcanger, сервер обмена электронной почтой

    Основная запись в доменной зоне, указывающая на имена почтовых серверов этого домена, без которой невозможны приём и отправка (косвенно) почты. Невозможность отправки почты указана как косвенная потому, что подавляющее большинство почтовых серверов перед приёмом сообщения в целях защиты от спама обязательно проверит наличие в DNS-зоне MX-записей и их соответствие IP-адресу отправителя. В случае отсутствия такой записи и/или её несоответствия удалённым почтовым сервером с вероятностью чуть менее 100% в приёме электронной почты будет отказано. Указание MX-записи отличается от синтаксиса рассмотренной ранее A-записи тем, что MX поддерживает приоритеты. Приоритет MX-записи — целое число от нуля включительно, указывающее несколько возможных почтовых серверов для этого домена, и определяющее порядок их перебора почтовым сервером отправителя в случаях недоступности некоторых из них. Обратите внимание, адресом почтового сервера в MX-записи не может быть IP-адрес, только доменное имя.

    MX 0 mx1.tendence.ru.
    MX 5 mx2.tendence.ru.
    MX 10 mx3.tendence.ru.
    MX 100 mx4.tendence.ru.

    В примере выше наибольшим приоритетом (0) в приёме почты обладает хост mx1.tendence.ru Именно к нему в первую очередь будут обращаться для отправки сообщений на ваш корпоративный почтовый сервер все другие почтовые серверЫ. Если по каким-то причинам в соединение с этим почтовым сервером будет отказано, отправитель перейдёт к попытке оправки почты на почтовый сервер с следующим приоритетом — 5, mx2.tendence.ru и так далее. Таким образом, MX-записи дают возможность гибкой настройки балансировки нагрузки (можно указать несколько записей с один и тем же приоритетом) и отказоустойчивости хостинга почты.

    Запись типа A - Address, IP-адрес, соответствующий доменному имени

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

    mail A 192.168.0.1

    Запись типа PTR — PoinTeR, указатель в обратной зоне DNS

    Исключительно важная запись, значение rDNS-записи в работе хостинга почты невозможно переоценить! Удалённые почтовые серверы проверяют наличие и содержимое этой записи при попытке отправить им почту и их системы антиспама придают очень веское значение результатам проверки. Рекомендуется давать им осмысленное имя, которое соответствует имени, данному почтовому серверу к MX и A-записях. Почтовые серверы Mail.Ru, например, вообще не принимают электронную почту от почтовых серверов с неправильными с их точки зрения PRT/rDNS-записями. Так, почта от хоста 4-3-2-1.dsl-pool.prodiver.ru будет отклонена из-за исчезающей вероятности наличия у серьёзного корпоративного почтового сервера такого имени. Как правило запись в эту зону вносится вашим хостером или провайдером, если вы не обладаете собственной автономной системой (AS).

    1 PTR mx1.tendence.ru.

     

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

    requ.png

    Запись типа TXT/SPF — TeXT, текстовая запись/Sender Policy Framework, структура политики отправителя

    Замечательное средство защиты от подделки адреса отправителя, принятое в качестве стандарта RFC с 2006 года. Является эффективным, быстрым и использующим крайне мало ресурсов как со стороны отправителя, так и получателя средством. Остаётся только сожалеть, что за прошедшие годы не все почтовые домены внедрили у себя SPF-записи, если бы это произошло, спама в электронной почте стало бы на порядок меньше. Значительно снижает вероятность ложного определения сообщения с вашего сервера корпоративной электронной почты как спам. Заключается в явном указании списка IP-адресов/серверов, которые имеют право на отправку электронной почты от имени домена.

    TXT «v=spf1 +mx -all»

    Запись такого вида указывает используемую версию SPF — 1 (а другой пока и нет, сделано для совместимости с будущими версиями протокола), разрешает приём почты домена со всех адресов, указанных как MX-записи и запрещает приём почты со всех других почтовых серверов. Такой настройки будет достаточно в подавляющем большинстве случаев настройки корпоративной почты для предотвращения подделки адресов и снижения шансов маркировки ваших сообщений как спама.

    Запись типа TXT/DKIM — TeXT, текстовая запись/Domain Keys Identified Mail, электронная почта, идентифицированная доменными ключами

    Криптографическая технология, принятая в качестве стандарта с 2007 года. Как и SPF призвана предотвратить подделку адресов отправителя, уникальным образом идентифицировать его, а также подтвердить, что в процессе доставки сообщение электронной почты не было изменено. Требует поддержки почтового сервера для подписания каждого сообщения доменным ключом. Для проверки используется открытый ключ, указанный в зоне DNS:

    selector._domainkey TXT "v=DKIM1; p=MIGfMA1CSqGSIb1DQEBAQUAA4GNADCBiQKBgQCnmGN26HP/0oxTdlKSaivGvO0y38tY6RbBbJXHerIE1aHkCk/PTJhnD3hAIEhLobIqWazInJFZMO1W/jqUP2MxH16lU/jzuZvvUH3l8/kq4egAxYiwcya6ksVe0OzTtkF2XHFzhvGxQ/SJD/26PugcDS2NwVIG9PrWL9POXwIDAQAB" 
    _domainkey TXT «o=-»

    Имя selector означает конкретный ключ (их может быть несколько), используемый для подписания сообщения, параметр v — версия DKIM, p — собственно ключ. Политика o=- указывает, что неподписанные/неправильно подписанные сообщения должны отклоняться. Настоятельно рекомендуется для применения — повсеместное внедрение этой технологии позволило бы навсегда решить проблему спама. Подключение DKIM к корпоративной почте позволит сообщениям сотрудников не быть ложно опознанными как спам у получателей. Более подробную информацию по подключению DKIM к вашему почтовому серверу ищите в документации к нему.

  5. В октябре Microsoft без лишней шумихи выпустила в свет новую версию операционной системы Windows Server. Рассказываем о наиболее интересных изменениях и улучшениях обновлённой серверной платформы.

    Впервые о новом поколении серверной операционной системы Microsoft открыто заговорила в марте текущего года. Компания не только раскрыла информацию об основных направлениях работы над продуктом и представила тестовую сборку ОС на канале Windows Insider, но и официально озвучила название платформы — Windows Server 2019 (изначально система позиционировалась как Windows Server 2016 R2). На «обкатку» обновлённой ОС у Microsoft ушло немногим более полгода, и уже 2 октября увидела свет финальная версия серверной платформы, которую можно приобрести как на сайте компании, так и у партнёров редмондского гиганта, в том числе российских. Что же нового появилось в системе?

     
    sm.WinServer2019-1.800.png

    Говоря о нововведениях в Windows Server 2019, прежде всего, стоит отметить новый интерфейс администратора Windows Admin Center (ранее известный как Project Honolulu), основанный на веб-технологиях и позволяющий непосредственно из браузера управлять локальными и удалёнными серверами, в том числе рабочими станциями с Windows 10 на борту. С помощью Windows Admin Center можно конфигурировать серверы и компьютеры в сети организации и за её пределами, получать доступ к файлам, инициализировать терминальные RDP-сессии и подключаться к рабочим столам, запускать PowerShell-скрипты, управлять сервисами, службами, виртуальными машинами, правами пользователей, сертификатами и всевозможными настройками обслуживаемых систем. Поддерживается интеграция с облачными сервисами Azure. Всё это делает Windows Admin Center универсальным инструментом для администрирования серверов, рабочих станций и облачных сервисов.

    Пользовательский интерфейс Windows Admin Center

    Пользовательский интерфейс Windows Admin Center

    Вторая интересная особенность Windows Server 2019 — возможность запуска рабочих столов, бинарных исполняемых файлов и bash-скриптов Linux без использования виртуализированных сред. Реализовано это с помощью специальной прослойки Windows Subsystem for Linux (WSL) в ядре ОС, транслирующей системные вызовы Linux в вызовы Windows. Впервые подсистема WSL появилась в Windows 10 с выпуском обновления Fall Creators Update, теперь же работать с окружением Linux можно и в серверной версии операционной системы. В Microsoft убеждены, что нововведение получит широкое применение в среде разработчиков и администраторов мультиплатформенных IT-систем.

    Как работает подсистема Windows Subsystem for Linux

    Как работает подсистема Windows Subsystem for Linux

    С выпуском Windows Server 2019 компания Microsoft существенно доработала средства обеспечения безопасности программной платформы. Входящий в состав операционной системы Windows Defender получил поддержку технологий Advanced Threat Protection, выявляющих атаки на уровне памяти и ядра и реагирующих на них путём завершения вредоносных процессов и удаления вирусов, механизмов защиты от эксплойтов (Exploit Guard) и сетевых атак, а также функцию «Контролируемый доступ к файлам», блокирующую доступ недоверенных приложений к выбранным папкам и защищающую данные от несанкционированных изменений, в том числе, от программ-шифровальщиков. Упоминания также заслуживают средства шифрования программно-определяемых SDN-сетей (Encrypted Network), позволяющие шифровать трафик виртуальной сети между виртуальными машинами, которые обмениваются между собой данными.

    Windows Server 2019 обеспечивает комплексную защиту от цифровых угроз

    Windows Server 2019 обеспечивает комплексную защиту от цифровых угроз

    Значительно в новой версии серверной платформы эволюционировали экранированные виртуальные машины (Shielded Virtual Machines), впервые появившиеся в Windows Server 2016. Они получили поддержку автономного режима работы, возможность удалённого администрирования посредством VMConnect и PowerShell Direct и — самое главное — поддержку защищённых виртуальных Linux-окружений. Теперь Windows Server 2019 поддерживает выполнение систем Ubuntu, Red Hat Enterprise Linux и SUSE Linux Enterprise Server внутри экранированных виртуальных машин при работе в средах со смешанными ОС.

    Особенностью экранированных ВМ является то, что доступ к ним может получить только их владелец, администратор лишён этих полномочий

    Особенностью экранированных ВМ является то, что доступ к ним может получить только их владелец, администратор лишён этих полномочий

    Ещё одна новинка — служба миграции хранилища (Storage Migration Service), упрощающая перенос серверов под управлением Windows Server 2003/2008/2012 на более свежие версии ОС. Данная система полностью автоматизирует процесс переноса и выполняет его в несколько этапов, включающих предварительную инвентаризацию старых серверов (определение конфигурации, параметров сети и безопасности, сбор сведений об идентификаторах и учётных записей пользователей Active Directory и проч.), перенос данных на новые серверы и применение сохранённых параметров. По заверениям Microsoft, служба Storage Migration Service учитывает все нюансы переноса рабочих сред с одного сервера на другой и делает процесс миграции абсолютно незаметным для пользователей.

    Схема работы Storage Migration Service

    Схема работы Storage Migration Service

    Изменился инструментарий Storage Replica, который позволяет IT-администраторам реплицировать данные между удалёнными серверами, кластерными системами и центрами обработки данных, повышая тем самым их катастрофоустойчивость и предотвращая потери на уровне файловой системы. Теперь реплика хранилища доступна в Windows Server 2019 редакции Standard (ранее этой функцией можно было пользоваться только в версии Datacenter) и дополнительно позволяет проверять подключаемые хранилища на предмет отказоустойчивости. Отдельное внимание разработчиками Microsoft было уделено оптимизации системы журналирования Storage Replica.

    Улучшениям подверглись инструменты для работы с географически распределёнными кластерами серверов. Из наиболее значимых новшеств упомянем возможность объединения вычислительных кластеров в группы (Cluster Sets) и последующей работы с ними как с единой структурой. Это нововведение должно существенно упростить работу тех, кто на базе Windows Server 2019 строит конвергентные и гиперконвергентные среды. Сюда же стоит добавить поддержку кластеров Azure и возможность перемещения отказоустойчивых кластеров между доменами с сохранением доступности всех развёрнутых на них сервисов, будь то базы данных, веб-службы или виртуальные машины. Последняя функция может быть особенно актуальной для крупных организаций, которые в случае использования Windows Server 2019 могут легко переводить вычислительные ресурсы поглощаемых компаний в свой домен.

    Поддержка отказоустойчивой кластеризации серверов — одна из сильных сторон платформы Windows Server

    Поддержка отказоустойчивой кластеризации серверов — одна из сильных сторон платформы Windows Server

    Немало в новой версии Windows Server реализовано других изменений. Из заслуживающих внимания отметим следующие:

    • существенно сокращённый (с 5 до 1,7 Гбайт) размер образа контейнера Server Core, благодаря своей компактности обеспечивающему ещё более высокий уровень плотности размещения экземпляров ОС на одном физическом хосте;
    • встроенные средства системной аналитики, использующие технологии машинного обучения и позволяющие не только находить проблемные места в серверной инфраструктуре, но и прогнозировать возникновение возможных неисправностей;
    • улучшенную совместимость приложений со средой Server Core;
    • поддержку протокола SMB для контейнеров;
    • встроенные средства защиты виртуализованных окружений;
    • поддержку сетевого протокола HTTP/2;
    • функции дедупликации и сжатия томов ReFS;
    • возможности масштабирования файловых хранилищ Scale-Out File Server до 4 Пбайт на кластер и ручного разграничения выделения томов для повышения отказоустойчивости;
    • поддержку Kubernetes;
    • упрощённый механизм проверки подлинности копий Windows в контейнерах;
    • поддержку энергонезависимой памяти для виртуальных машин Hyper-V;
    • наличие средств оценки производительности в Storage Spaces Direct
    • а также прочие нововведения, полный список которых представлен на информационной площадке Windows IT Pro Center и доступен для вдумчивого изучения по этой ссылке.

    Как было отмечено выше, операционная система Windows Server 2019 уже доступна для приобретения и развёртывания в организациях. Как и в случае с предыдущей версией, ОС предлагается в редакциях Datacenter, Standard и Essentials, разнящихся набором поддерживаемых функций и стоимостью. Для оценки функциональных возможностей системы предусмотрена пробная версия программной платформы, имеющая ограничения по времени работы.

  6. Asterisk

    Одним из рабочих инструментов офиса, несмотря на стремительные изменения последних десятилетий, по-прежнему является телефон. Мы займемся пошаговой настройкой с нуля АТС asterisk — современного инструмента для организации телефонии в офисе на основе протокола SIP. Я подробно с примерами и описанием проведу вас по основным параметрам, необходимым для базового функционала.

     

    Не буду останавливаться на описании сервера asterisk, в интернете много информации на эту тему. Да и сам я кратко рассказывал в своих предыдущих статьях про установку. Материал будет объемный, поэтому сразу перейдем к сути.

    Статья планируется учебная, поэтому использовать будем голый asterisk без каких-либо web панелей для управления. Выполнять настройку asterisk будем с нуля, то есть с самой начальной установки самого сервера телефонии и всех зависимостей. Если вы разберетесь и освоите этот материал, то потом без проблем сможете настроить и поддерживать любую конфигурацию на основе астериска.

    Я хочу подробно рассказать о настройке asterisk на конкретном примере, где будет собран в одном месте расширенный функционал, отвечающий практически на все запросы среднестатистического офиса.

    Сразу хочу обратить внимание на очень важный момент. Я не являюсь профессионалом в настройке asterisk. Данный материал является калькуляцией всех моих знаний на текущий момент, которые я методично шаг за шагом собирал из доступных в интернете источников. По этой статье вы получите рабочий, многофункциональный сервер телефонии, работу которого я проверял на практике. Но это не означает, что все, что здесь настроено, сделано наилучшим образом. Я постоянно учусь и совершенствую свои знания. Если вы увидите ошибки, недочеты, варианты более правильной и удобной настройки, прошу об этом сообщить в комментариях, я проверю и обновлю статью.

    Для примера опишем наш воображаемый офис:

    • Работает 30 сотрудников. Номера будут трехзначные, от 100 до 130.
    • У нас будут 3 отдела — менеджеры, техподдержка, руководство и все остальные.
    • Номер секретаря 100, менеджеры 101-110, техподдержка 111-120, руководство 121-130.
    • Мы будем использовать одного SIP провайдера для звонков.

    Кратко получается такая картина. Я не пишу в самом начале о техническом задании, которое буду реализовывать. Каждый момент буду описывать и раскрывать в соответствующем разделе.

    Для настройки я буду использовать учетную запись сервиса zadarma.com. Сразу скажу, что в реальной работе я никогда не использовал этот сервис и его качество мне не известно. Беру его для примера, потому что удобно использовать для тестирования конфигурации. Сразу после регистрации вам дают аккаунт, пример настроек для asterisk. Вы можете позвонить на прямой городской номер, ввести добавочный и совершить звонок на свой аккаунт. Это полностью эмулируер работу sip подключения от какого-нибудь провайдера.

    В качестве операционной системы у меня выступает CentOS 7. Но для данной статьи это не имеет принципиального значения. Конфигурация астериск кроссплатформенная, без проблем переносится между системами.

    Приступаем к нашей работе по настройке сервера телефонии.

    Быстрая установка из репозитория

    У asterisk не существует официального репозитория пакетов, поэтому предпочтительным способом установки свежей версии является сборка из исходников. Но если вы хотите быстро установить и потестить систему, то можно использовать один из сторонних репозиториев asterisk. К примеру — Tuncy. Я не знаю, кто ведет этот репозиторий, как часто он обновляется и насколько там актуальные версии.

    Добавляем репозиторий астериск в систему. Для этого создаем файл /etc/yum.repos.d/tuncy-asterisk-13.repo следующего содержания.

    [asterisk-common]
    name=Asterisk Common Requirement Packages @ tucny.com
    baseurl=https://ast.tucny.com/repo/asterisk-common/el\$releasever/\$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=https://ast.tucny.com/repo/RPM-GPG-KEY-dtucny
    
    [asterisk-13]
    name=Asterisk 13 Packages @ tucny.com 
    baseurl=https://ast.tucny.com/repo/asterisk-13/el\$releasever/\$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=https://ast.tucny.com/repo/RPM-GPG-KEY-dtucny

    Обновляем информацию о репозиториях и устанавливаем астериск.

    # yum install asterisk

    Установка asterisk из репозитория

    Установка из исходников

    Вопроса установки asterisk я уже касался в своей прошлой статье. Но там я использовал связку с панелью управления freepbx. Здесь же мы будем использовать голый астериск, без обвязок. Более того, я не буду использовать никаких дополнительных плат расширения и модемов. Будет только софтовая АТС, которая легко переносится с одного сервера на другой при желании. Считаю, что такой подход наиболее эффективен и к нему стоит стремиться. Настроив виртуальную машину, вы навсегда будете отвязаны от конкретного железа и спокойно можете переносить свой сервер куда угодно, заменив только сетевые настройки.

    Таким образом, нам нужно установить непосредственно asterisk и pjproject с jansson. На первоначальном этапе этого достаточно. Если вы предпочитаете сервер debian, то воспользуйтесь отдельной инструкцией по установке asterisk 13 на debian 8. После этого можете сразу же переходить на следующий этап настройки. Приступим.

    Первым делом обновляем систему и отключаем SELinux, как рассказано в статье про настройку centos.

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

    # yum -y install epel-release
    # yum -y install lynx mariadb-server mariadb php php-mysql php-mbstring tftp-server httpd ncurses-devel sendmail sendmail-cf sox newt-devel libxml2-devel libtiff-devel audiofile-devel gtk2-devel subversion kernel-devel git php-process crontabs cronie cronie-anacron wget vim php-xml uuid-devel sqlite-devel net-tools gnutls-devel php-pear phpmyadmin
    # yum -y groupinstall core base "Development Tools"

    Скачиваем и устанавливаем pjproject:

    # cd /usr/src
    # wget http://www.pjsip.org/release/2.4/pjproject-2.4.tar.bz2
    # tar -xjvf pjproject-2.*
    # cd pjproject-2.*
    # CFLAGS='-DPJ_HAS_IPV6=1' ./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr --libdir=/usr/lib64
    # make dep
    # make
    # make install

    Скачиваем и устанавливаем jansson:

    # cd /usr/src
    # wget -O jansson.tar.gz https://github.com/akheron/jansson/archive/v2.7.tar.gz
    # tar vxfz jansson.tar.gz
    # cd jansson-*
    # autoreconf -i
    # ./configure --libdir=/usr/lib64
    # make
    # make install

    Скачиваем и устанавливаем asterisk 13:

    # cd /usr/src
    # wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
    # tar xvfz asterisk-13-current.tar.gz
    # cd asterisk-*
    # contrib/scripts/install_prereq install
    # contrib/scripts/get_mp3_source.sh
    # ./configure --libdir=/usr/lib64 --with-pjproject-bundled
    # make menuselect

    Выбираем необходимые модули и звуки:

    • Add-ons: format_mp3, res_config_mysql, app_mysql и cdr_mysql.
    • Core Sound Packages: Выбираем русские звуки RU-WAV.
    • Music On Hold File Packages: Выбираем звук WAV.
    • Extras Sound Packages: Выбираем английский EN-WAV, русского к сожалению нет.

    Выбор параметров установки

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

    Продолжаем установку:

    # make
    # make install
    # make samples
    # make config
    # ldconfig

    Устанавливаем русскую core озвучку хорошего качества и английскую для extra, русской к сожалению нету:

    # cd /var/lib/asterisk/sounds
    # wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-ru-wav-current.tar.gz
    # wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-en-wav-current.tar.gz
    # tar xvf asterisk-core-sounds-ru-wav-current.tar.gz
    # tar xvf asterisk-extra-sounds-en-wav-current.tar.gz

    Добавляем астериск в автозагрузку и запускаем:

    # chkconfig asterisk on
    # service asterisk start

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

    # asterisk -r

    Проверка работы asterisk

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

    Настройка iptables, asterisk за NAT, проброс портов

    Сразу же уделим внимание настройке iptables для работы астериск. У нас может быть 2 ситуации, которые требуют двух принципиально различных настроек:

    1. Сервер телефонии имеет свой внешний ip адрес и напрямую смотрит через него в интернет.
    2. Сервер стоит за шлюзом, не имеет своего внешнего адреса, доступ в интернет с помощью NAT.

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

    Я не могу привести универсальные настройки для всех случаев. У каждого будут свои нюансы. Кто-то, к примеру, будет пользоваться phpmyadmin для настройки базы mysql для хранения статистики звонков. Потом эту же статистику будет просматривать через cdr viewer, установленный на веб сервере. Доступ к этому веб серверу можно открыть через внешний IP адрес, а можно только через локальную сеть. Настройки iptables в данном случае будут разные.

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

    С другими провайдерами этого может быть не достаточно. В общем случае для настройки asterisk за nat нужно будет на шлюзе пробросить порт 5060 и диапазон 10000:20000. По-умолчанию астериск использует UDP порты. Если вы не будете менять эти настройки, то пробрасывать нужно именно UDP.

    В моем случае получается следующая картина. На шлюзе сделан проброс необходимых портов:

    iptables -t nat -A PREROUTING -p udp --dst $WAN_IP --dport 5060 -j DNAT --to 192.168.1.25:5060
    iptables -t nat -A PREROUTING -p udp --dst $WAN_IP --dport 10000:20000 -j DNAT --to 192.168.1.25
    $WAN_IP Внешний IP адрес на шлюзе
    192.168.1.25 Локальный адрес сервера астериск

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

    Подключение абонентов и проверка внутренних звонков

    Астериск у нас установлен, firewall настроен. Можно попробовать подключиться и протестировать работу АТС. Я для отладки использую бесплатную софтовую звонилку 3CXPhone 6-й версии. Не знаю, где ее сейчас найти в интернете. У самого производителя давно уже вышли более новые и платные версии, которые работают только с его АТС. А эта версия универсальная. В ней отличный функционал, удобные настройки, есть дебаг режим с подробным логированием. Пользоваться программой удобно и приятно. Скачиваем ее у меня и устанавливаем.

    Теперь нам нужно сделать некоторые общие настройки и добавить пользователей. Работать будем с файлом конфигурации /etc/asterisk/sip.conf. Файлы настроек астера хорошо закомментированы, но мне это мешает с ними работать. Они слишком большие и громоздкие, неудобно прокручивать вверх и вниз, поэтому я их полностью чищу и вношу только те настройки, которые мне нужны. Так удобнее и нагляднее получается. Сохраните на всякий случай куда-нибудь оригинальный файл sip.conf и начинайте новую настройку. Вот мой пример конфига для нашего случая:

    [general]
    ;Внешний ip адрес
    externaddr=212.78.136.18:5060
    ;Указываем использовать русскую озвучку
    language=ru
    context=default
    allowoverlap=no
    udpbindaddr=0.0.0.0
    tcpenable=no
    tcpbindaddr=0.0.0.0
    transport=udp
    srvlookup=yes
    allowguest=no
    limitonpeers=yes
    
    [authentication]
    
    ;Создаем шаблон для телефонов менеджеров
    [managers-phones](!)
    type=friend
    context=call-out
    secret=123
    host=dynamic
    nat=no
    qualify=yes
    canreinvite=no
    callgroup=1
    pickupgroup=1
    call-limit=1
    dtmfmode=auto
    disallow=all
    allow=alaw
    allow=ulaw
    allow=g729
    allow=g723
    allow=g722
    
    ;Создаем пользователей менеджеров
    [100](managers-phones)
    callerid="Number 100" <100>
    [101](managers-phones)
    callerid="Number 101" <101>
    [102](managers-phones)
    callerid="Number 102" <102>
    [103](managers-phones)
    callerid="Number 103" <103>
    [104](managers-phones)
    callerid="Number 104" <104>
    [105](managers-phones)
    callerid="Number 105" <105>
    [106](managers-phones)
    callerid="Number 106" <106>
    [107](managers-phones)
    callerid="Number 107" <107>
    [108](managers-phones)
    callerid="Number 108" <108>
    [109](managers-phones)
    callerid="Number 109" <109>
    [110](managers-phones)
    callerid="Number 110" <110>
    
    ;Создаем шаблон для телефонов поддержки
    [support-phones](!)
    type=friend
    context=call-out
    secret=456
    host=dynamic
    nat=no
    qualify=yes
    canreinvite=no
    callgroup=2
    pickupgroup=2
    call-limit=1
    dtmfmode=auto
    disallow=all
    allow=alaw
    allow=ulaw
    allow=g729
    allow=g723
    allow=g722
    
    ;Создаем пользователей техподдержки
    [111](support-phones)
    callerid="Number 111" <111>
    [112](support-phones)
    callerid="Number 112" <112>
    [113](support-phones)
    callerid="Number 113" <113>
    [114](support-phones)
    callerid="Number 114" <114>
    [115](support-phones)
    callerid="Number 115" <115>
    [116](support-phones)
    callerid="Number 116" <116>
    [117](support-phones)
    callerid="Number 117" <117>
    [118](support-phones)
    callerid="Number 118" <118>
    [119](support-phones)
    callerid="Number 119" <119>
    [120](support-phones)
    callerid="Number 120" <120>
    
    ;Создаем шаблон для телефонов топов
    [top-phones](!)
    type=friend
    context=call-out
    secret=789
    host=dynamic
    nat=no
    qualify=yes
    canreinvite=no
    callgroup=3
    pickupgroup=3
    call-limit=1
    dtmfmode=auto
    disallow=all
    allow=alaw
    allow=ulaw
    allow=g729
    allow=g723
    allow=g722
    
    ;Создаем пользователей топов
    [121](top-phones)
    callerid="Number 111" <121>
    [122](top-phones)
    callerid="Number 122" <122>
    [123](top-phones)
    callerid="Number 123" <123>
    [124](top-phones)
    callerid="Number 124" <124>
    [125](top-phones)
    callerid="Number 125" <125>
    [126](top-phones)
    callerid="Number 126" <126>
    [127](top-phones)
    callerid="Number 127" <127>
    [128](top-phones)
    callerid="Number 128" <128>
    [129](top-phones)
    callerid="Number 129" <129>
    [130](top-phones)
    callerid="Number 130" <130>

    Я немного пояснил комментариями отдельные моменты. Чтобы сократить размер sip.conf, я использую шаблоны групп номеров, где задаю общие настройки для группы. Затем просто создаю пользователей и указываю их принадлежность к группе. Они берут все настройки этой группы. Если вам необходимо будет задать отдельные настройки для какого-то пользователя, как у меня, к примеру, callerid, то вы просто в его разделе указываете эти настройки.

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

    • Параметры callgroup и pickupgroup задают группы перехвата звонков. Люди из одной группы могут перехватывать звонки друг друга. Удобно заводить в одну группу людей, сидящих в одной комнате. Так они видят, что человека нет на месте и перехватывают его звонок. Эти параметры можно индивидуально задать для каждого пользователя в отдельности, если разбивка по шаблонам настроек не соответствует реальной рассадке людей в офисе.
    • Параметр callerid можно задать кириллицей, но могут возникнуть проблемы с некоторыми телефонами и точно возникнут проблемы, когда вы будете вести статистику звонков в mysql. Я не смог победить эту проблему с кодировками, поэтому использую только латиницу в этом параметре. Туда можно писать либо должность, либо ФИО человека.
    • call-limit=1 задает количество одновременных соединений на линию. Если у вас один человек = один телефонный аппарат, то разрешать больше одной линии на пользователя нет смысла. Ему будет идти новый звонок в тот момент, как он разговаривает. Конечно, если есть необходимость переключаться между разговорами и ставить кого-то на удержание, то можно делать и больше линий. Но мне кажется, это неудобно. Если ты разговариваешь, пусть звонящий лучше услышит занято и перезвонит.
    • Я всех добавляю в один context. В данном примере у нас будет только один номер телефона на всех. Если у вас их будет несколько, то контекстами можно будет разводить звонки на разные номера. Эту ситуацию я рассмотрю в отдельной статье.

    Сохраняем sip.conf. Теперь нам нужно добавить план звонков, для того, чтобы можно было совершать вызовы. Для этого как и с предыдущим конфигурационным файлом, очищаем файл extensions.conf и записываем туда следующую информацию:

    [general]
    static=yes
    writeprotect=no
    [globals]
    [default]
    
    ;Вешаем трубку
    [handup-sip]
    exten => _X!,1,HangUp()
    
    ;Исходящие звонки
    [call-out]
    ;Звонок на внутренний номер
    exten => _XXX,1,Dial(SIP/${EXTEN})
    include => handup-sip

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

    У нас все готово для внутренних звонков через asterisk. Заходим в консоль и перезагружаем его:

    # asterisk -r
    CLI> reload

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

    CLI> sip show users

    sip show users

    Видим всех наших пользователей, их пароли и контекст. Список отсортирован не по порядку, не пугайтесь, если не заметите какой-то номер.

    Дальше устанавливайте любую софтовую звонилку на компьютер или можете сразу использовать телефон, если он у вас под рукой. С телефонами удобнее, но не всегда они есть. В 3CXPhone задаем следующие настройки подключения к нашей ip атс:

    Пример подключения телефона к asterisk

    Я сразу открываю дебаг окно для отладки. Корректное подключение к серверу будет выглядеть вот так:

    Подключение 3CXPhone к астериск

    Проверим на сервере список подключенных пиров с помощью команды:

    CLI> sip show peers

    Должна быть строка с подключенным пиром:

    100/100                   192.168.1.100                            D  No         No             59891    OK (104 ms)

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

    После звонка в файле /var/log/asterisk/cdr-csv/Master.csv появится запись о совершенном звонке:

    "","100","121","call-out","""Number 100"" <100>","SIP/100-00000000","SIP/121-00000001","Dial","SIP/121","2016-04-21 12:32:37","2016-04-21 12:32:42","2016-04-21 12:32:46",9,4,"ANSWERED","DOCUMENTATION","1461241957.0",""

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

    Один небольшой шажок по настройке voip атс asterisk мы сделали. Будем двигаться дальше.

    Настройка sip trunk (транка) и добавление номера

    Регистрируемся у какого-нибудь sip провайдера и получаем настройки транков для подключения. Как я говорил выше, я буду использовать провайдера zadarma. После регистрации в личном кабинете я вижу свой логин, пароль для подключения и адрес сервера. Там же можно узнать пример настройки подключения для астериска и номера для тестовых звонков:

    • Номер для эхо-теста: 4444.
    • Информация про остаток на счету: 1111
    • Прямой звонок: Москва +7 (495) 777-66-75 и внутренний номер клиента (логин)

    Нам этого будет достаточно для полноценного тестирования конфигурации астериска. Добавляем необходимые настройки sip транка, чтобы выполнить его регистрацию. Редактируем sip.conf, добавляем в самый конец нового пира в соответствии с инструкцией провайдера:

    [397945]
    host=sip.zadarma.com
    insecure=invite,port
    type=friend
    fromdomain=sip.zadarma.com
    disallow=all
    allow=alaw
    dtmfmode=auto
    secret=password
    defaultuser=397945
    trunkname=397945
    fromuser=397945
    callbackextension=397945
    context=call-in
    qualify=400
    directmedia=no
    nat=force_rport,comedia

    В данном случае 397945 мой внутренний номер в сервисе, password — пароль. Сохраняем файл и даем команду астеру перечиать его:

    CLI> sip reload

    Тут же в консоли, если все в порядке, вы получите сообщение:

    chan_sip.c:24403 handle_response_peerpoke: Peer '397945' is now Reachable. (55ms / 400ms)

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

    CLI> sip show peers
    397945/397945             185.45.152.161                              Auto (No)  No             5060     OK (54 ms)

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

    Dial-plan — пример маршрутизации звонков

    Начало построения диалплана для маршрутизации звонков мы уже положили, когда настраивали внутренние звонки. Теперь нужно дополнить dial-plan для совершения исходящих и приема входящих звонков. Редактируем extensions.conf и приводим его к следующему виду:

    [general]
    static=yes
    writeprotect=no
    [globals]
    [default]
    
    ;Вешаем трубку
    [handup-sip]
    exten => _X!,1,HangUp()
    
    ;Исходящие звонки
    [call-out]
    ;Звонок на внутренний номер
    exten => _XXX,1,Dial(SIP/${EXTEN})
    ;Звонок на внешний номер
    exten => _XXX.,1,Dial(SIP/${EXTEN}@397945)
    
    include => handup-sip
    
    ;Входящие звонки
    [call-in]
    exten => 397945,1,Dial(SIP/100)

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

    В нашем примере в контекст исходящих звонков мы добавили правило набора любого номера длиннее трех символов через транк 397954. Если в локальных звонках маска экстеншена задается тремя любыми символами, то тут мы в конец добавили точку, которая означает любое количество символов.

    С таким диалпланом при наборе трехзначного номера вы позвоните на локальный номер, а при наборе любого городского номера сможете позвонить на него без каких-либо добавочных цифр. Сразу набираете номер с 8 и так далее.

    Контекст [call-in] описывает поведение при входящем звонке. В нашем случае все входящие звонки с транка 397945 будут направляться на номер секретаря 100. К этому контексту мы еще вернемся позже, когда будем настраивать голосовое меню.

    Сохраняем dial-plan и перезагружаем астериск единой командой reload, либо отдельно перезагружаем sip и dialplan командами:

    CLI> sip reload
    CLI> dialplan reload

    Теперь можно попробовать позвонить, к примеру, на тестовый номер zadarma — 4444 для эхотеста. Если все получилось, значит вы правильно настроили исходящие звонки. Для проверки входящего звонка, позвоните в Москве на номер +7 (495) 777-66-75 и введите свой добавочный номер в виде логина. Звонок должен переключиться на номер 100. Чтобы это произошло, необходимо, чтобы peer с номером 100 был подключен к астериску.

    Я проверил, без проблем дозвонился и по исходящему номеру, и по входящему. В файле Master.csv появилась информация о совершенных звонках:

    "","100","4444","call-out","""Number 100"" <100>","SIP/100-00000002","SIP/397945-00000003","Dial","SIP/4444@397945","2016-04-21 14:07:05","2016-04-21 14:07:05","2016-04-21 14:07:34",28,28,"ANSWERED","DOCUMENTATION","1461247625.3",""
    "","79998056609","397945","call-in","""79998056609"" <79998056609>","SIP/397945-00000004","SIP/100-00000005","Dial","SIP/100","2016-04-21 14:09:32","2016-04-21 14:09:40","2016-04-21 14:09:44",12,4,"ANSWERED","DOCUMENTATION","1461247772.6",""

    После звонков в консоли астера и в логе /var/log/asterisk/messages вы увидите множество ошибок:

    res_hep.c: Unable to send packet: Address Family mismatch between source/destination

    Чтобы их не было, вам нужно на сервере отключить протокол ipv6.

    В таком виде АТС уже вполне работоспособна, можно пользоваться, но есть ряд неудобств. Например, если позвонить на трехзначный номер, которого не существует, или на номер, который не зарегистрирован в данный момент на устройстве, вы просто получите сброс звонка и не поймете, в чем проблема. Для этих событий нужна отдельная обработка. Чтобы не загружать сразу файл конфигурации длинными и непонятными конструкциями, я рассмотрю этот момент ниже, когда буду рассказывать про голосовую почту. Это не критичная настройка, в таком виде все будет замечательно работать, но не так удобно, как могло бы.

    Приветствие и голосовое меню (ivr)

    Основной функционал asterisk реализован. Будем его расширять. Практически на всех АТС присутствует голосовое меню, которое встречает звонящего. Я рассмотрю настройку самого простого варианта голосового меню, как его еще называют ivr. Позвонив, человек услышит какое-то приветствие, далее ему будет предложено ввести внутренний номер абонента, если он его знает, либо дождаться ответа секретаря.

    Для простоты настройки и отладки, поделюсь способом, который использую я. У проекта zadarma есть клиент под андроид — Zadarma SIP. Скачиваете его на телефон и регистрируете еще одну учетную запись в проекте. Логинитесь под ней в телефоне и можете звонить на свой астериск, просто набирая 6-ти значный номер аккаунта, который используете на сервере. Таким образом вы быстро, удобно и бесплатно эмулируете входящие звонки с внешних линий на свой сервер.

    Начнем настройку с того, что создадим возможность для записи приветствия. Вы можете записать его где угодно и потом скопировать на сервер astersik. Но можно поступить удобнее — записать прямо с телефонного аппарата приветствие и использовать его в голосовом меню. Чтобы это сделать, необходимо добавить в dialplan в контекст исходящих звонков, в моем примере это [call-out], в самое начало следующую конструкцию:

    ;Номер для записи звуков, окончание записи #
    exten => _35X, 1, NoOp()
    exten => _35X, n, Wait(2)
    exten => _35X, n, Playback(beep)
    exten => _35X, n, Record(/tmp/music${EXTEN:2}:wav)
    exten => _35X, n, Wait(1)
    exten => _35X, n, Playback(/tmp/music${EXTEN:2})
    exten => _35X, n, Wait(2)
    exten => _35X, n, Hangup()

    Перезагружаем dialplan:

    CLI> dialplan reload

    Теперь при звонке на любой из номеров 350-359 вы услышите бип, после которого начнется запись всего, что сказано в трубку. Чтобы завершить запись, нажмите #. После этого вы прослушаете то, что было записано. Файл с записью будет сохранен в папку /temp. Если вы позвоните на номер 351, то файл будет иметь имя music1.wav, если на 355, то music5.wav. Можно записать до 10-ти разных вариантов и потом из них выбирать.

    Сохраните подходящую запись с именем ivr-main.wav и разместите его в какой-нибудь папке. Я положил в папку /etc/asterisk/ivr. Добавим пример голосового меню в нашу конфигурацию asterisk. Для этого снова открываем extensions.conf и добавляем в него новый контекст [ivr-main] следующего содержания:

    [ivr-main]
    exten => s,1,Answer()
    ;Проигрываем приветствие
    exten => s,2,Background(/etc/asterisk/ivr/ivr-main)
    ;Ждем 5 секунд ввода добавочного номера
    exten => s,3,WaitExten(5)
    ;Звоним по введенному добавочному
    exten => _XXX,1,Dial(SIP/${EXTEN})
    ;Если введен не существующий номер, то говорим об этом и отправляем в начало приветствия
    exten => _XXX,2,Playback(privacy-incorrect)
    exten => _XXX,3,Goto(ivr-main,s,1)
    ;Если звонящий ничего не вводит, то звоним секретарю
    exten => t,1,Dial(SIP/100)

    В комментариях я сделал все пояснения. Мы создали контекст для ivr. Теперь его надо добавить в контекст входящих звонков. Для этого изменяем существующий контекст [call-in], заменяя в нем единственную строку на новую:

    exten => 397945,1,Goto(ivr-main,s,1)

    Перезапускаем диал план и звоним снаружи на внешний номер. Вы должны услышать голосовое приветствие ivr, которое мы только что настроили. После этого этапа ваш файл extensions.conf должен выглядеть примерно так (комментарии вырезал):

    [general]
    static=yes
    writeprotect=no
    [globals]
    [default]
    
    [handup-sip]
    exten => _X!,1,HangUp()
    
    [call-out]
    exten => _35X, 1, NoOp()
    exten => _35X, n, Wait(2)
    exten => _35X, n, Playback(beep)
    exten => _35X, n, Record(/tmp/music${EXTEN:2}:wav)
    exten => _35X, n, Wait(1)
    exten => _35X, n, Playback(/tmp/music${EXTEN:2})
    exten => _35X, n, Wait(2)
    exten => _35X, n, Hangup()
    exten => _XXX,1,Dial(SIP/${EXTEN})
    exten => _XXX.,1,Dial(SIP/${EXTEN}@397945)
    include => handup-sip
    
    [call-in]
    exten => 397945,1,Goto(ivr-main,s,1)
    
    [ivr-main]
    exten => s,1,Answer()
    exten => s,2,Background(/etc/asterisk/ivr/ivr-main)
    exten => s,3,WaitExten(5)
    exten => _XXX,1,Dial(SIP/${EXTEN})
    exten => _XXX,2,Playback(privacy-incorrect)
    exten => _XXX,3,Goto(ivr-main,s,1)
    exten => t,1,Dial(SIP/100)

    Включаем голосовую почту

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

    На практике я не видел, чтобы голосовую почту активно использовали. Но для полноты картины расскажу про нее, возможно вам она пригодится. Открываем файл voicemail.conf на редактирование. Я не трогал настройки по-умолчанию, просто добавляем в секцию [default] ящики голосовой почты для нужных нам сотрудников в следующем виде:

    130 => 1234,Number 130,user130@mail.ru
    100 => 1234,Number 100,user100@mail.ru
    130 внутренний номер абонента
    1234 пароль доступа к ящику голосовой почты
    user130@mail.ru почтовый адрес, куда будет отправлено записанное голосовое сообщение

    Для корректной отправки почтовых сообщений сразу на внешние почтовые ящики необходимо правильно настроить локальный почтовый сервер, либо использовать внешний. Я рекомендую использовать отдельный сервер, наверняка он есть в организации, либо на локальном использовать какой-то публичный с авторизацией по smtp.

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

    CLI> voicemail reload
    Reloading voicemail configuration...
    asterisk*CLI> voicemail show users
    Context Mbox User Zone NewMsg
    default 130 Number 121 0
    default 100 Number 100 0
    other 1234 Company2 User 0
    3 voicemail users configured.

    Наши два добавленных пользователя и один тестовый остался из дефолтной конфигурации. Его можно удалить. Их вообще два должно быть. Одного я уже удалил, второго забыл.

    Это пол дела. Теперь нам нужно добавить голосовую почту в dialplan. Причем в 2 разных места. Я буду использовать номер 500 для звонка в панель управления голосовой почтой. Позвонив на этот номер, пользователь введет свой пароль и сможет управлять голосовыми сообщениями (слушать, удалять, менять настройки). Добавим в контекст для исходящих звонков звонок на этот номер. Добавлять следует сразу за номерами для записи, которые мы ранее создали и перед правилом набора трехзначных номеров.

    [call-out]
    ;Номер для записи звуков, окончание записи #
    exten => _35X, 1, NoOp()
    exten => _35X, n, Wait(2)
    exten => _35X, n, Playback(beep)
    exten => _35X, n, Record(/tmp/music${EXTEN:2}:wav)
    exten => _35X, n, Wait(1)
    exten => _35X, n, Playback(/tmp/music${EXTEN:2})
    exten => _35X, n, Wait(2)
    exten => _35X, n, Hangup()
    ;Управление голосовой почтой
    exten => 500,1,VoiceMailMain()
    ;Звонок на внутренний номер
    exten => _XXX,1,Dial(SIP/${EXTEN},15)
    ;Звонок на внешний номер
    exten => _XXX.,1,Dial(SIP/${EXTEN}@397945)

    Добавленные данные выделил цветом. Обращаю внимание на цифру 15. Ранее этой настройки не было, сейчас я добавил. Она будет означать, что звонок будет длиться 15 секунд. Если за это время никто не ответит, он будет сброшен. До использования голосовой почты, можно было не устанавливать этот параметр, оставить его значение по-умолчанию, оно очень большое, не помню точно сколько по времени. Но сейчас нам нужно при неснятии трубки дольше 15-ти секунд, включать запись голосового сообщения.

    Конкретно в контексте внутренних звонков этот параметр не принципиален, так как я не добавляю голосовую почту для звонков внутри организации, хотя можно это сделать. Не вижу в этом смысла. Я добавил сюда этот параметр, чтобы время ожидания ответа было одинаково во всех звонках. В следующих изменениях это уже будет играть принципиальное значение.

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

    1. Номера вообще не существует на сервере. В нашем случае, к примеру, это любой номер не из диапазона 100-130.
    2. Номер существует, но он не зарегистрирован на АТС, то есть аппарат с этим номером не подключен.
    3. Номер существует, зарегистрирован, но при звонке на него никто не отвечает.
    4. Номер существует, зарегистрирован, но в данный момент занят.

    Каждое из этих четырех состояний обрабатывается отдельно. Я считаю, что голосовую почту уместно будет включать по событию номер 3. Но это не обязательно, можно и на занято повесить возможность оставить сообщение. Тут на ваше усмотрение. Я покажу пример, как это делается, а вы сможете настроить так, как вам нужно.

    Обработка этих событий не такая простая, как кажется на первый взгляд. Я сразу же столкнулся с трудностью следующего характера. С параметром call-limit=1 при звонке на номер, который занят в данный момент, астериск возвращает статус CHANUNAVAIL, что может означать, к примеру, что канал недоступен. На статус занято BUSY это совсем не похоже. Для разрешения этой ситуации я воспользуюсь функцией ChanIsAvail, которая проверяет не статус пира, а статус канала и возвращает значение 2 или 3, когда он занят.

    Для различения несуществующих и не подключенных пиров я буду использовать функцию SIPPEER. Если она ничего не возвращает, значит номера не существует, если значение UNKNOWN, значит номер не подключен. С отсутствием ответа какое-то время проще всего. Если пир возвращает статус NOANSWER, включаем голосовую почту. Собираем все статусы в одно место и добавляем голосовую почту.

    Для этого в контекст [ivr-main] добавляем новые параметры и приводим его к следующему виду:

    [ivr-main]
    exten => s,1,Answer()
    exten => s,2,Background(/etc/asterisk/ivr/ivr-main)
    exten => s,3,WaitExten(5)
    exten => _XXX,1,Dial(SIP/${EXTEN},15)
    ;Задаем переменную для передачи в голосовую почту
    exten => _XXX,n,Set(dstNUM=${EXTEN})
    ;Проверяем статус пира, существует или нет
    exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1)
    ;Проверяем статус пира, подключен или нет
    exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1)
    ;Проверяем канал на занятость
    exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s)
    ;Выводим в лог значение функции ChanIsAvail, нужно только для отладки, можно удалить строку
    exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========)
    ;Если функция возвращает 2 или 3, значит абонент занят
    exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1)
    exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1)
    ;Обрабатываем остальные статусы
    exten => _XXX,n,Goto(num-${DIALSTATUS},1)
    ;Если номера не существует говорим "Ошибочный номер, попробуйте еще раз"
    exten => num-not-exist,1,Wait(2)
    exten => num-not-exist,n,Playback(invalid)
    ;Если номер не подключен, говорим "Набранный вами номер отключен, проверьте номер и повторите попытку
    exten => num-not-connected,1,Wait(2)
    exten => num-not-connected,n,Playback(ss-noservice)
    ;Если номер занят, говорим "Занято"
    exten => num-BUSY,1,Wait(2)
    exten => num-BUSY,n,Playback(vm-isonphone)
    ;Если номер не отвечает, включаем голосовую почту
    exten => num-NOANSWER,1,Wait(2)
    exten => num-NOANSWER,n,Voicemail(${dstNUM},u)
    ;Если еще по какой-то причине будет статус CHANUNAVAIL, говорим, что номер не доступен в данный момент
    exten => num-CHANUNAVAIL,1,Wait(2)
    exten => num-CHANUNAVAIL,n,Playback(vm-isunavail)
    ;Если в голосовом меню не выбрали внутренний номер, адресуем звонок секретарю
    exten => t,1,Dial(SIP/100,15)

    Если вам нужна обработка статусов номеров для внутренних звонков, то скопируйте обработку состояний в контекст [call-out], за исключением последней строки, которая отвечает за звонок секретарю. Полностью контекст внутренних звонков будет выглядеть вот так:

    [call-out]
    ;Номер для записи звуков, окончание записи #
    exten => _35X, 1, NoOp()
    exten => _35X, n, Wait(2)
    exten => _35X, n, Playback(beep)
    exten => _35X, n, Record(/tmp/music${EXTEN:2}:wav)
    exten => _35X, n, Wait(1)
    exten => _35X, n, Playback(/tmp/music${EXTEN:2})
    exten => _35X, n, Wait(2)
    exten => _35X, n, Hangup()
    ;Управление голосовой почтой
    exten => 500,1,VoiceMailMain()
    ;Звонок на внутренний номер
    exten => _XXX,1,Dial(SIP/${EXTEN},15)
    exten => _XXX,n,Set(dstNUM=${EXTEN})
    exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1)
    exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1)
    exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s)
    exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========)
    exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1)
    exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1)
    exten => _XXX,n,Goto(num-${DIALSTATUS},1)
    exten => num-not-exist,1,Wait(2)
    exten => num-not-exist,n,Playback(invalid)
    exten => num-not-connected,1,Wait(2)
    exten => num-not-connected,n,Playback(ss-noservice)
    exten => num-BUSY,1,Wait(2)
    exten => num-BUSY,n,Playback(vm-isonphone)
    exten => num-NOANSWER,1,Wait(2)
    exten => num-NOANSWER,n,Voicemail(${dstNUM},u)
    exten => num-CHANUNAVAIL,1,Wait(2)
    exten => num-CHANUNAVAIL,n,Playback(vm-isunavail)
    ;Звонок на внешний номер
    exten => _XXX.,1,Dial(SIP/${EXTEN}@397945)
    include => handup-sip

    Я во всех звонках установил время ожидания ответа 15 секунд. Если вы считаете, что нужно больше, измените этот параметр.

    Обращаю ваше внимание, что в контексте голосового меню я не сделал обработку статусов состояния телефона секретаря, хотя это может быть нужно, если у вас будет один секретарь принимать звонки. Ему и голосовая почта может пригодиться. В следующем пункте я расскажу про случай, когда в офисе работают 2 секретаря и обработкой звонков будет заниматься очередь (queue), поэтому статусы в том виде, как они реализованы здесь будут не нужны. Вы можете использовать любую конфигурацию, которая вам подойдет. Например, использовать очередь, но с одним секретарем в ней. Настраивайте по аналогии, я даю базовый функционал. Все возможные случаи разобрать невозможно.

    Перечитывайте диалплан и тестируйте конфигурацию. При звонке абоненту и его неответе, звонящий услышит в трубке сообщение о том, что номер не отвечает и предложение оставить голосовую почту. Если звонивший оставит сообщение, то получатель получит это сообщение по email и сможет его прослушать там, либо позвонить на номер 500, ввести свой номер и пароль, заданные в voicemail.conf и послушать сообщение по телефону.

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

    На этом настройка голосовой почты окончена. Можно пользоваться, не забывая добавлять новых пользователей в voicemail.conf и перечитывая конфигурацию голосовой почты.

    Очереди (queues) входящих звонков

    С помощью очередей в астериске можно управлять потоком входящих звонков, перераспределяя их по определенным правилам. В нашей конфигурации asterisk мы настроим очередь (queue) для направления звонка двум секретарям одновременно. Кто первый ответит, тот и будет разговаривать со звонящим. Если один секретарь уже разговаривает, новый звонок поступит к другому. Если оба секретаря будут заняты, звонящий будет слушать мелодию и ожидать, пока кто-нибудь не освободится. Как только один из секретарей освободится, звонящего из очереди направит на освободившийся номер.

    Номер первого секретаря — 100, второго — 130. Я настраиваю простейшую конфигурацию очереди в астериск для понимания принципа работы. Более сложный вариант настройки это сделать 3 очереди для каждого отдела и в голосовом меню-приветствии сделать возможность позвонить в конкретный отдел. Эту конфигурацию я рассмотрю в отдельной статье, хотя в нем и нет ничего сложного. Делается по аналогии с приведенным примером.

    Открываем файл queues.conf и добавляем в самый конец:

    [secretary]
    strategy = ringall
    member => SIP/100
    member => SIP/130

    Все остальные настройки оставляю по-умолчанию. Параметр strategy может принимать следующие значения:

    ringall вызываются все доступные участники до тех пор, пока кто-то из них не ответит на вызов (по умолчанию).
    leastrecent Вызывается первый свободный участник, который меньше всего вызывался из этой очереди.
    fewestcalls Вызывается первый свободный участник, который обработал наименьшее количество вызовов из данной очереди.
    random случайным образом вызывается не занятый участник, обрабатывающий очередь.
    rrmemory циклическое распределение с памятью, запоминается последний участник, ответивший на вызов.

    Вы можете выбрать наиболее подходящую вам стратегию распределения звонков в очереди. Дальше нужно добавить в extensions.conf в созданный нами ранее контекст с голосовым меню отправку звонка в очередь с секретарями. Для этого меняем строку в [ivr-main]:

    exten => t,1,Dial(SIP/100,15)

    на новую:

    exten => t,1,Queue(secretary,t)

    Если раньше при звонке на внешний номер, звонящий не набирал внутренний номер абонента, то через 5 секунд он перенаправлялся к секретарю с номером 100. Теперь он будет отправляться в очередь secretary, в которую мы завели 2 номера — 100 и 130. Можно добавить и больше номеров, если есть необходимость.

    Перечитываем полностью конфигурацию asterisk:

    CLI> reload

    Состояние созданной очереди:

    CLI> queue show secretary
    secretary has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s
    Members:
    SIP/100 (ringinuse enabled) (Not in use) has taken no calls yet
    SIP/130 (ringinuse enabled) (Not in use) has taken no calls yet
    No Callers

    Теперь можете позвонить на внешний номер и дождаться перенаправления на секретаря. Зазвонят оба аппарата. Если оба заняты, звонок будет висеть в очереди и ждать освобождения. После звонка статистика очереди изменится:

    CLI> queue show secretary
    secretary has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 2s talktime), W:0, C:1, A:1, SL:0.0% within 0s
    Members:
    SIP/100 (ringinuse enabled) (Not in use) has taken 1 calls (last was 63 secs ago)
    SIP/130 (ringinuse enabled) (Not in use) has taken no calls yet
    No Callers

    Вот так легко организовать простую queue (очередь) в asterisk. Более сложные примеры я буду рассматривать в отдельных статьях.

    Учет и просмотр статистики звонков (cdr viewer)

    Важной и нужной возможностью современной АТС на базе asterisk является сбор и просмотр статистики звонков. По умолчанию, астериск ведет статистику в файле /var/log/asterisk/cdr-csv/Master.csv. Разобрать этот файл и передать куда-то в обработку не очень сложно, если у вас есть что-то или кто-то, кто способен написать на каком-нибудь языке программирования обработку.

    Мы будем использовать готовые бесплатные инструменты для просмотра статистики звонков. Все необходимое для этого мы установили в самом начале. Перенесем сбор статистики в mysql базу. Для этого запускаем mariadb сервер, добавляем в автозагрузку и устанавливаем пароль администратора:

    # systemctl start mariadb
    # systemctl enable mariadb.service
    # /usr/bin/mysql_secure_installation

    Подключаемся к mysql и создаем пользователя и базу данных:

    # mysql -uroot -p
    MariaDB [(none)]> create database asterisk;
    MariaDB [(none)]> use asterisk;
    MariaDB [asterisk]> CREATE TABLE `cdr` (   `id` int(9) unsigned NOT NULL auto_increment,   `calldate` datetime NOT NULL default '0000-00-00 00:00:00',   `clid` varchar(80) NOT NULL default '',   `src` varchar(80) NOT NULL default '',   `dst` varchar(80) NOT NULL default '',   `dcontext` varchar(80) NOT NULL default '',   `channel` varchar(80) NOT NULL default '',   `dstchannel` varchar(80) NOT NULL default '',   `lastapp` varchar(80) NOT NULL default '',   `lastdata` varchar(80) NOT NULL default '',   `duration` int(11) NOT NULL default '0',   `billsec` int(11) NOT NULL default '0',   `disposition` varchar(45) NOT NULL default '',   `amaflags` int(11) NOT NULL default '0',   `accountcode` varchar(20) NOT NULL default '',   `uniqueid` varchar(32) NOT NULL default '',   `userfield` varchar(255) NOT NULL default '',   PRIMARY KEY  (`id`),   KEY `calldate` (`calldate`),   KEY `accountcode` (`accountcode`),   KEY `uniqueid` (`uniqueid`),   KEY `dst` (`dst`),   KEY `src` (`src`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    MariaDB [asterisk]> grant all on asterisk.* to 'asterisk_user'@'localhost' identified by '12345678';
    asterisk имя базы данных
    asterisk_user пользователь базы данных
    12345678 пароль пользователя бд

    Устанавливаем odbc коннекторы:

    # yum install -y mysql-connector-odbc.x86_64 unixODBC-devel.x86_64

    Редактируем файлы конфигурации. Добавляем в самый конец /etc/asterisk/res_odbc.conf:

    [asterisk]
    enabled => yes
    dsn => MySQL-asterisk
    username => asterisk_user
    password => 12345678

    В конец файла /etc/asterisk/cdr_adaptive_odbc.conf:

    [cdr_adaptive_connection]
    connection=asterisk
    table=cdr
    alias start => calldate

    Создаем файл /etc/odbc.ini следующего содержания:

    [MySQL-asterisk]
    Description = MySQL Asterisk database
    Driver = MySQL
    Server = localhost
    User = asterisk_user
    Password = 12345678
    Socket = /var/lib/mysql/mysql.sock
    Database = asterisk

    Редактируем файл /etc/odbcinst.ini. Я его не трогал, оставил по-умолчанию, только в самый конец секции [MySQL] добавил две недостающие строки. Я не разбирался нужны они или нет, просто подсмотрел в другой инструкции. Вот как этот файл выглядит у меня:

    [MySQL]
    Description = ODBC for MySQL
    Driver = /usr/lib/libmyodbc5.so
    Setup = /usr/lib/libodbcmyS.so
    Driver64 = /usr/lib64/libmyodbc5.so
    Setup64 = /usr/lib64/libodbcmyS.so
    FileUsage = 1
    CPTimeout =
    CPReuse =

    Настроим использование нашего часового пояса в записях cdr. По-умолчанию там стоит часовой пояс GTM. Для этого в файле /etc/asterisk/cdr.conf указываем параметр:

    usegmtime=no

    После этого перезапускаем астериск:

    # service asterisk restart

    Совершаем звонок и проверяем таблицу. Для удобства дальнейшей проверки и настройки, я запустил httpd и настроил phpmyadmin. Они должны были установиться в самом начале. Запускаем httpd и добавляем в автозагрузку:

    # systemctl start httpd
    # systemctl enable httpd

    С phpmyadmin сами разберитесь, в интернете море инструкций, либо воспользуйтесь моей по установке и настройке phpmyadmin. Теперь астериск сохраняет статистику звонков в mysql базу asterisk в таблицу cdr. Дальше нам надо настроить какую-нибудь web панель для просмотра этой статистики. Я решил сразу установить панель, которая позволяет не только смотреть статистику, но прослушивать записанные разговоры. Поэтому дальнейшая настройка панели просмотра статистики переходит в следующий раздел, в котором я расскажу, как записывать звонки.

    Запись (record) разговоров

    Запись разговоров в asterisk настраивается относительно не сложно. Буквально нужно добавить несколько строк в dialplan. Но мы сразу сделаем более расширенную настройку. Мы будем не просто записывать все разговоры, но станем хранить информацию о звонках в mysql, чтобы их можно было прослушивать через удобную web панель просмотра статистики.

    Хранить записи будем в mp3, потому нам понадобится утилита lame, для конвертации файлов из формата wav в mp3. Скачаем ее и установим.

    # cd /usr/src
    # wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz
    # tar zxvf lame-3.*
    # cd lame-3.*
    # ./configure
    # make
    # make install

    В качестве web панели я буду использовать Asterisk-CDR-Viewer-Mod. Очень простая и функциональная штука. Настраивается легко, пользоваться удобно. Скачиваем исходники с github:

    # cd /usr/src
    # wget https://github.com/prog-it/Asterisk-CDR-Viewer-Mod/tarball/master 
    # tar xzvf master

    Копируем содержимое папки /usr/src/master в корень web сервера. Если вам нужно, можете в отдельную папку положить. У меня обычно на сервере с астериском больше ничего нет, так что сойдет и корень — /var/www/html

    В папке docs подробная инструкция по настройке. Все дальнейшие действия делаются в соответствии с ней. Исправляются только некоторые особенности данной версии системы. Нам необходимо добавить дополнительное поле в таблицу cdr для хранения имени файла. Для этого либо в консоли mysql, либо через phpmyadmin выполните код:

    alter table  `cdr` add column `filename` varchar(120) DEFAULT 'none' after `userfield`;

    Редактируем файл /etc/asterisk/cdr_mysql.conf, добавляя в самый конец 2 строки:

    alias realdst => realdst
    alias filename => filename

    Дальше редактируем диалплан. Открываем /etc/asterisk/extensions.conf и добавляем в секцию globals переменную, соответствующую папке, где будут храниться записи разговоров.

    [globals]
    DIR_RECORDS=/mnt/calls/

    Добавляем макрос для записи перед контекстами звонков:

    [macro-recording]
    exten => s,1,Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
    exten => s,n,Set(monopt=nice -n 19 /usr/local/bin/lame -b 32 --silent "${DIR_RECORDS}${fname}.wav" "${DIR_RECORDS}${fname}.mp3" && rm -f "${DIR_RECORDS}${fname}.wav" && chmod o+r "${DIR_RECORDS}${fname}.mp3");
    exten => s,n,Set(CDR(filename)=${fname}.mp3);
    exten => s,n,Set(CDR(realdst)=${ARG2});
    exten => s,n,MixMonitor(${DIR_RECORDS}${fname}.wav,b,${monopt});
    exten => s,n(no),Verbose(Exit record);

    И редактируем контексты входящих и исходящих разговоров, добавляя туда макрос на запись. Он идет самым первым, перед набором номера. Вот так у меня выглядит контекст локальных звонков и входящих через ivr меню с учетом всех сделанных ранее настроек:

    [call-out]
    ;Номер для записи звуков, окончание записи #
    exten => _35X, 1, NoOp()
    exten => _35X, n, Wait(2)
    exten => _35X, n, Playback(beep)
    exten => _35X, n, Record(/tmp/music${EXTEN:2}:wav)
    exten => _35X, n, Wait(1)
    exten => _35X, n, Playback(/tmp/music${EXTEN:2})
    exten => _35X, n, Wait(2)
    exten => _35X, n, Hangup()
    ;Управление голосовой почтой
    exten => 500,1,VoiceMailMain()
    ;Звонок на внутренний номер
    exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
    exten => _XXX,n,Dial(SIP/${EXTEN},10)
    exten => _XXX,n,Set(dstNUM=${EXTEN})
    exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1)
    exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1)
    exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s)
    exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========)
    exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1)
    exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1)
    exten => _XXX,n,Goto(num-${DIALSTATUS},1)
    exten => num-not-exist,1,Wait(2)
    exten => num-not-exist,n,Playback(invalid)
    exten => num-not-connected,1,Wait(2)
    exten => num-not-connected,n,Playback(ss-noservice)
    exten => num-BUSY,1,Wait(2)
    exten => num-BUSY,n,Playback(vm-isonphone)
    exten => num-NOANSWER,1,Wait(2)
    exten => num-NOANSWER,n,Voicemail(${dstNUM},u)
    exten => num-CHANUNAVAIL,1,Wait(2)
    exten => num-CHANUNAVAIL,n,Playback(vm-isunavail)
    ;Звонок на внешний номер
    exten => _XXX.,1,Macro(recording,${CALLERID(num)},${EXTEN})
    exten => _XXX.,n,Dial(SIP/${EXTEN}@397945)
    include => handup-sip
    
    [ivr-main]
    exten => s,1,Answer()
    exten => s,2,Background(/etc/asterisk/ivr/ivr-main)
    exten => s,3,WaitExten(5)
    exten => _XXX,1,Macro(recording,${CALLERID(num)},${EXTEN})
    exten => _XXX,n,Dial(SIP/${EXTEN},10)
    exten => _XXX,n,Set(dstNUM=${EXTEN})
    exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?num-not-exist,1)
    exten => _XXX,n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?num-not-connected,1)
    exten => _XXX,n,ChanIsAvail(SIP/${EXTEN},s)
    exten => _XXX,n,NoOp(=========== ChanIsAvail STATUS: ${AVAILSTATUS} ===========)
    exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 2]?num-BUSY,1)
    exten => _XXX,n,GoToIf($[${AVAILSTATUS} = 3]?num-BUSY,1)
    exten => _XXX,n,Goto(num-${DIALSTATUS},1)
    exten => num-not-exist,1,Wait(2)
    exten => num-not-exist,n,Playback(invalid)
    exten => num-not-connected,1,Wait(2)
    exten => num-not-connected,n,Playback(ss-noservice)
    exten => num-BUSY,1,Wait(2)
    exten => num-BUSY,n,Playback(vm-isonphone)
    exten => num-NOANSWER,1,Wait(2)
    exten => num-NOANSWER,n,Voicemail(${dstNUM},u)
    exten => num-CHANUNAVAIL,1,Wait(2)
    exten => num-CHANUNAVAIL,n,Playback(vm-isunavail)
    exten => t,1,Macro(recording,${CALLERID(num)},${EXTEN})
    exten => t,n,Queue(secretary,t)
    

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

    # service asterisk restart

    Осталось только указать настройки подключения к базе данных cdr viewer. Эти настройки находятся в файле inc/config.inc.php. Задаем там следующие параметры:

    Mysql
    $db_type = 'mysql';
    $db_host = 'localhost';
    $db_port = '3306';
    $db_user = 'asterisk_user';
    $db_pass = '12345678';
    $db_name = 'asterisk';
    $db_table_name = 'cdr';
    
    $system_storage_format = 5;
    $system_monitor_dir = '/mnt/calls';

    Остальные параметры я оставил без изменений. Можно звонить и тестировать запись разговоров, просмотр статистики через Asterisk CDR Viewer Mod. Все записанные файлы складываются в одну папку /mnt/calls. В readme.txt описан пример, как настроить сортировку записей по папкам с датами. Если вам это нужно, сделайте, ничего сложного нет, все рассказано подробно. В web панель можно зайти просто набрав в браузере ip адрес сервера, если скрипты положили в корень веб сервера.

    Просмотр статистики и записей звонков

    Музыка на ожидании (on hold)

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

    За конфигурацию music on hold отвечает соответствующий файл настроек — /etc/asterisk/musiconhold.conf. Изначально он выглядит так:

    [general]
    [default]
    mode=files
    directory=moh

    Директория указана как moh, полный ее путь /var/lib/asterisk/moh, мелодии проигрываются отсюда. Я не буду менять настройки по-умолчанию. Добавим еще один класс музыки и укажем его в свойствах очереди, где будем ее проигрывать.

     

    Я привожу пример использования. Если у вас везде будет одна и та же мелодия, то отредактируйте канал default. Так вам не придется каждый раз указывать добавленный канал.

    Копируем любым способом mp3 файл на сервер в домашнюю директорию root. Создаем директорию /var/lib/asterisk/mohmp3 и кодируем в нее мелодию из mp3 в wav:

    # mkdir  /var/lib/asterisk/mohmp3
    # lame --decode /root/music.mp3 /var/lib/asterisk/mohmp3/music.wav

    Добавляем новый класс в musiconhold.conf в самый конец:

    [mp3]
    mode=files
    directory=mohmp3

    Теперь добавим эту мелодию в свойства очереди. Для этого в описание очереди добавьте новый параметр:

    [secretary]
    music = mp3
    strategy = ringall
    member => SIP/100
    member => SIP/130

    Теперь нужно перечитать настройки очереди и мелодии. Проще перезапустить сам астериск:

    # service asterisk restart

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

    Чтобы добавить эту мелодию вместо длинного гудка, необходимо отредактировать dialplan, добавив новый параметр в правило набора. Если добавляете свой класс музыки, то указываете его в свойствах:

    exten => _XXX,1,Dial(SIP/${EXTEN},15,m(mp3))

    Если используете музыку по-умолчанию, то достаточно написать вот так:

    exten => _XXX,1,Dial(SIP/${EXTEN},15,m)

    Для отладки музыки на ожидании, я рекомендую добавить в dialplan в контекст локальных звонков такую конструкцию:

    exten => 336,1,Answer
    exten => 336,2,MusicOnHold()

    336 — любой не занятый реальным пиром номер. При звонке на этот номер, вы услышите заданную дефолтную мелодию в соответствии с настройками в файле musiconhold.conf. Для проигрывания не дефолтного класса, укажите его имя в скобках. Так вы можете прослушать как звучат ваши мелодии, протестировать порядок проигрывания и т.д.

    Не забывайте перезагружать диалплан после редактирования. На этом настройка music on hold закончена. Можете добавлять разные мелодии и использовать в необходимых местах диалплана или очередях.

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

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

    Создаем конфигурацию конференции. Для этого в файл confbridge.conf добавляем в самый конец:

    [confer]
    type=bridge
    max_members=20
    mixing_interval=10
    internal_sample_rate=auto
    record_conference=yes

    В контекст исходящих звонков [call-out] добавляем в самое начало:

    exten => 999,1,Answer()
    exten => 999,n,ConfBridge(1,confer)

    Перезапускаем астериск. Теперь при звонке на номер 999 человек попадает в комнату для конференций. Следующим участникам конференции необходимо будет так же позвонить на номер 999 для участия в совместной конференции. Если вы с кем-то уже разговариваете, хотите создать конференцию и добавить туда еще участников, то необходимо вашего собеседника переадресовать на номер конференции, затем позвонить новому абоненту и его направить туда же. После этого звоните сами на номер конференции и сможете общаться с тремя абонентами одновременно.

    Как выполнять переводы и переадресации звонков я расскажу ниже.

    Перевод, перехват, переадресация звонка

    Рассмотрим несколько необходимых функций и возможностей телефонной станции asterisk. Начнем с перевода звонка. Как перевести звонок на другого абонента? По-умолчанию в астериске для трансфера звонка предусмотрена клавиша #. Посмотреть, так ли это в вашей конфигурации, введите в консоли астера команду:

    CLI> features show
    Builtin Feature               Default Current
    ---------------               ------- -------
    Pickup                           *8     *8
    Blind Transfer                    #      #
    Attended Transfer
    One Touch Monitor
    Disconnect Call                   *      *
    Park Call

    Во время разговора нужно нажать # и набрать номер, куда вы хотите перевести звонок. Для того, чтобы трансфер состоялся, он должен быть разрешен в диалплане в команде Dial следующим образом:

    exten => _XXX,n,Dial(SIP/${EXTEN},15,Tt)
    T дать возможность звонящему (вызывающему) абоненту совершать перевод звонка на другой номер.
    t дать возможность вызываемому абоненту сделать перевод звонка на другой номер

    В предыдущих примерах я не указывал этот параметр. Сейчас пришло время рассказать о нем и добавить во все участки диалплана, если вам необходимо осуществлять перевод звонков в asterisk.

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

    Кнопка перевода звонка

    С включенным по-умолчанию Blind Transfer есть проблемы. Например, вы перенаправляете звонок на другой номер, а он не ответил или у него занято. Входящий вызов сбрасывается. В астериске есть другой режим перевода звонка, он называется Attended Transfer, по-умолчанию он выключен. Работает он более изящно. Сначала вы звоните тому, куда хотите перевести номер, разговариваете с ним, убеждаетесь, что он доступен и готов принять звонок. Только после этого переводите звонок на этого абонента. Чтобы включить такое перенаправление вызова, нужно раскомментировать в features.conf строку:

    atxfer => *2

    Горячую клавишу можно переназначить на любую другую. На этом о переводе звонка в астериске все.

    Теперь поговорим о перехвате звонка. Хотя говорить тут особо нечего. В asteerisk перехват работает из коробки и не требует никаких настроек. Для того, чтобы перехватить звонок, нужно снять трубку и нажать комбинацию *8. Комбинация задается в том же файле, что и перехват — features.conf. Перехватывать звонки могут только абоненты в одной группе. Это задается в свойствах пользователя, я об этом рассказывал в самом начале, когда мы создавали sip аккаунты. Напомню, что речь идет о параметрах callgroupи pickupgroup.

    Разберем теперь переадресацию звонка на какой-то внешний номер, например, мобильный телефон. Многие телефоны имеют встроенный функционал по перенаправлению звонка. Читаете инструкцию к телефону, смотрите, можно ли на нем установить переадресацию и как, и делаете. Работает это только если ваш телефон подключен к АТС. Он принимает звонок и сам его переадресовывает на указанный номер. Это самый простой и быстрый вариант автоматической переадресации звонка на внешний номер.

    Рассмотрим другой случай переадресации на мобильный телефон. Допустим, у нас есть номер 115, который вообще отсутствует в офисе, у него нет стационарного телефона. Нам нужно, чтобы при звонке на этот номер, вызов переадресовывался на внешний номер, а конкретно на мобильный сотрудника. Для этого в dialplan нужно добавить следующую строку:

    exten => 115,n,Dial(SIP/89151234567@397945)

    Если вы хотите, чтобы переадресация работала только при звонках с внутренних номеров офиса, то добавить эту строку нужно в контекст [call-out] перед общим правилом набора на внутренние номера:

    exten => 115,n,Dial(SIP/89151234567@397945)
    exten => _XXX,n,Dial(SIP/${EXTEN},15,Tt)

    Для того, чтобы переадресация на внешний номер работала и для звонков из вне, правило перенаправления на мобильный нужно поставить в контекст с голосовым приветствием [ivr-main]. Ставим туда же, перед строкой набора на внутренние номера:

    exten => 115,n,Dial(SIP/89151234567@397945)
    exten => _XXX,n,Dial(SIP/${EXTEN},15,Tt)

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

    Защита asterisk с помощью fail2ban

    Если ваш астериск имеет внешний ip адрес, либо на него сделан проброс портов с внешнего ip, то необходимо обеспечить защиту от перебора учеток и прочих множественных подключений. Организуем защиту с помощью известного и популярного средства fail2ban. Сделать это не сложно, fail2ban поддерживает astersik из коробки. Достаточно просто установить его и активировать некоторые настройки.

    Устанавливаем fail2ban на сервер с астериском:

    # yum install -y fail2ban

    Включаем запись в лог файл событий типа security. Для этого открываем файл /etc/asterisk/logger.conf и раскомментируем строку:

    security => security

    Перечитываем настройки хранения логов:

    # asterisk -x "logger reload"

    В папке /var/log/asterisk появился новый файл security. Его записи мы будем передавать в fail2ban для анализа. Открываем файл /etc/fail2ban/jail.conf, ищем там секцию [asterisk] и меняем путь к логфайлу и добавляем строку активации джейла:

    logpath  = /var/log/asterisk/security
    enabled  = true

    Запускаем fail2ban и добавляем в автозапуск:

    # systemctl start fail2ban
    # systemctl enable fail2ban

    Чтобы fail2ban работал, у вас должен быть запущен и настроен iptables. Отмечу также, что по-умолчанию fail2ban в centos 7 использует команды firewalld. Если вы его отключили и используете голые iptables, то вам необходимо удалить файл /etc/fail2ban/jail.d/00-firewalld.conf и перезапустить fail2ban. Если этого не сделать, работать он не будет.

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

    Заключение

    Время подвести итог проделанной работы. На всякий случай приведу полный конфиг основного файла, с которым мы работали — extensions.conf. Я писал статью почти 2 месяца, что-то добавляя, проверяя, редактируя. Она актуальна полностью на момент написания. Можно простым копипастом переносить конфигурацию и все заработает. Я проверил перед публикацией. Со временем что-то может измениться, но не думаю, что сильно. Синтаксис конфигурационных файлов почти не меняется в разных версиях астера, это позволяет без проблем переносить настройки между версиями, и тем более между операционными системами.

    Я планирую раскрыть более широко затронутую тему. У меня есть примеры интересных и полезных конфигураций. По мере возможности буду писать новые статьи по серверу телефонии. На сегодня у меня все, хороших вам настроек 

     

    Статья позаимствована с ресурса serveradmin.ru

     

     

  7. Разное

    • 1
      запись
    • 0
      комментариев
    • 332
      просмотра

    Последние записи

    Plex Media Server + Apple TV 3. Домашняя медиатека в обход iTunes

    Эта инструкция позволит настроить потоковое вещание медиаконтента на вашу приставку Apple – минуя iTunes и домашнюю коллекцию. Будет интересна владельцам NAS, которые готовы создать свою собственную домашнюю экосистему для кино и музыки.

    Примечание редактора. Сразу предупреждаем, что инструкция по-настоящему хардкорна. С другой стороны, её целевая аудитория примерно соответствует задаче. Если вы что-то не понимаете или не хотите делать – пишите в комментариях об альтернативных методах решения проблемы. Поехали!

    Шаг первый.  Устанавливаем и настраиваем Plex Media Server

    По данной ссылке скачиваем и устанавливаем Plex Media Server для вашей настольной системы/сетевого хранилища. Это достаточно продвинутый медиа-сервер позволяющий управлять фото-, видео-, аудио-контентом и не только.

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

    Далее, необходимо в настройках сети на вашем роутере фиксировать IP-адреса Apple TV и устройства, на котором размещен Plex Media Server.

    Plex-p1.2

     

    Также перенаправляем порт 32400 на ваше устройство с установленным сервером Plex.

    Plex-p1.3

     

    После этого возвращаемся к Plex Media Server. В настройках удаленного доступа устанавливаем выбранный порт, если он отличен от используемого по умолчанию 32400. Если все установки на роутере сделаны верно, около пункта Remote Access появится зеленая галочка.

    Plex-p1.4

    Шаг второй. Установка PlexConnect

    Перед переходом ко второму шагу необходимо установить язык программирования Python на ваш новоиспеченный сервер. Не пугайтесь :) Пользователи настольных систем должны выбрать свой вариант дистрибутива по ссылке.

    Следует особо отметить, что разработчики PlexConnect рекомендуют устанавливаться версию Python 2.7! Владельцы NAS (по крайней мере, от Synology) могут установить его из своих репозиториев: Центр пакетов –> Служебные программы –> Python –> Установить.

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

    После этого редактируем в файле Settings.py ключи

    ip_pms’ – указываем ip-адрес устройства, на котором развернут Plex Media Server;

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

     

    Plex-p2.1_

     

    Пользователи NAS Synology:

    • должны позволить устанавливать пакеты сторонних разработчиков: Центр пакетов –> Настройки  –> Основное  –> Уровень доверия  –> Любой;
    • добавить репозиторий http://www.brigittehelsen.be/plexconnect/ в Центр пакетов –> Настройки  –> Источники пакетов и
    • установить PlexConnect из  раздела «Сообщество» Центра пакетов.

    На этом настройка PlexConnect закончена для владельцев NAS Synology, и вы можете пропустить следующий шаг.

    Шаг третий. Создание сертификата.

    Далее запускаете командную строку (cmd.exe) с правами администратора и выполняете следующую команду:

    C:\OpenSSL-Win32\bin\openssl.exe req -new -nodes -newkey rsa:2048 -out C:\trailers.pem -keyout C:\trailers.key -x509 -days 7300 -subj “/C=US/CN=trailers.apple.com” -config C:\OpenSSL-Win32\bin\openssl.cfg

    Затем:

    C:\OpenSSL-Win32\bin\openssl.exe x509 -in C:\trailers.pem -outform der -out C:\trailers.cer

    И напоследок:

    type C:\trailers.key >> C:\trailers.pem

    • Для OS X и Linux. Юзеры запускают Terminal и выполняют команды:

    openssl req -new -nodes -newkey rsa:2048 -out ~/Desktop/trailers.pem -keyout ~/Desktop/trailers.key -x509 -days 7300 -subj “/C=US/CN=trailers.apple.com”

    Далее:

    openssl x509 -in ~/Desktop/trailers.pem -outform der -out ~/Desktop/trailers.cer && cat ~/Desktop/trailers.key >> ~/Desktop/trailers.pem

    Затем перемещаем 3 файла (trailers.pem, trailers.key, и trailers.cer) из корня диска C (для Windows) или с рабочего стола (для MacOS/Linux) в папку \assets\certificates\ каталога PlexConnect.

    Наконец можно запустить PlexConnect.

    • Пользователи Windows запускают файл PlexConnect.py и разрешают доступ Python.exe в сеть.

     

    Plex-p3.1

     

    • Пользователи MacOS выполняют в терминале команду:

    sudo “/Applications/PlexConnect-master/PlexConnect.py”

    • Пользователи Linux в терминале переходят к каталогу с PlexConnect и выполняют команду:

    sudo ./PlexConnect.py

    Теперь можно переходить к следующему шагу.

    Шаг четвертый. Настройка Apple TV.

    Открываем на Apple TV Настройки –> Основные  –> Сети. Находим текущее подключение и открываем его параметры. Пункт «Настройка DNS» устанавливаем в значение «Вручную», а в качестве DNS сервера вводим IP-адрес устройства с Plex Media Server:

     

    Plex-p4.1

     

    После применения настроек ваша приставка вновь получит привычный для себя IP.

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

    Теперь отправляемся в Настройки –> Основные, выделяем пункт «Отправлять данные в Apple» и нажимаем кнопку Play/Pause на пульте. Выбираем пункт «Добавить профиль». В поле ввода вносим:

    http://trailers.apple.com/trailers.cer

     

    Plex-p4.3

     

    После применения настройки профиль добавится к списку сертификатов.

    Важно! Если при добавлении профиля сертификата у вас возникает какая-либо ошибка (например, код 109), то почти наверняка вам необходимо проверить настройки брандмауера (firewall).

    Шаг пятый. Все готово!

    Перезагружаем приставку.

    Запускаем приложение Trailers на Главном Экране и наблюдаем в нем медиатеку Plex.

     

    Plex-p4.5-680x382.jpg

     

    Теперь вы можете слушать свою любимую музыку, просматривать фото, смотреть фильмы и полностью управлять их воспроизведением с пульта Apple TV. Дополнительным бонусом станет полная всеядность телевизионной приставки. Plex Media Server обеспечит автоматическое транскодирование* видео всех форматов в приемлемые для Apple TV.

    *Для сетевых хранилищ могут иметься ограничения из-за установленных в них процессоров.

     

  8. 1C

    • 1
      запись
    • 0
      комментариев
    • 240
      просмотров

    Последние записи

     
     
    e6jfmjguitfe2_9_wzqpg_84jdk.jpeg
     

    Дисклеймер

     

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

     

    Предисловие

     

    Сначала я просто хотел написать небольшую статью о том, как мы разносили базы по службам, но в ходе углубления в этот процесс мы добавляли всякие разные штуки (мониторинг служб, потом мониторинг пользователей внутри 1С, потом прикрутили заббикс, и, наконец, пришли к CI/CD на базе 1С). В итоге я понимаю что пихать это в одну статью будет слишком — решил разделить на несколько. Ну а название навеяно циклом статей "сети для самых маленьких", которые принесли мне много приятных минут и к которым я отсылаю всех, кто "хочет изучить сети". Итак, мы приступаем!

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

     

    В этой статье я хочу поделится своим опытом администрирования большого числа 1С в корпоративном секторе. Базы все разные, есть разработка, есть тестовые, все как у всех. Но их просто достаточно много. И все было хорошо, но в определенный момент проводить какие-то админские работы стало крайне тяжело и рискованно.

     

    Какие у нас были сложности:

     
    1. Подвисшая база тянула за собой перезапуск службы, а значит страдали невинные (пользователи других баз)
    2. Было тяжело понять кто сегодня "герой дня" — какая база заняла все ресурсы
    3. Обновление релизов — обновление одной тянуло за собой автоматическое обновление всех баз на этой службе
    4. Ручное подключение баз пользователям, ручное изменение в случае переездов
    5. Мониторинг
      И только сейчас я понимаю что это была только вершина айсберга...
     

    Акт первый, действие нулевое

     

    Небольшое отвлечение на основные постулаты, осознание которых далось большой кровью и болью.

     
    1. 1С не умеет адекватно работать в виртуализированной среде. Это печальный факт (особенно если учесть что на дворе уже практически 2019 год), судя по всему, исправлять никто не собирается. Виртуализация, даже правильно настроенная, будет вам стоить примерно 15-25% производительности. Смиритесь. (Источник — Гилев и собственные тесты)
    2. Забудьте про нормальный кластер — его тут нет. Сразу закладывайте время простоя равное времени подъема машины из бекапа и/или восстановлении на другом сервере. Альтернатива — DNS и одинаково настроенные сервера приложений на одну и туже базу — так можно уложится в 3-5 минут и даже реализовать полуручное переключение. (источник — собственный опыт)
    3. При выборе процессора смотрите только на частоту. Процессор в 6 ядер по 3,4Ггц порвет в куски процессор на 20 ядер по 2Ггц. Проблема в том, что 1С вообще ничего не знает про параллельные вычисления. По сути это работает так — у нас есть определенное число воркеров для каждой службы, их раскидывают по процессорам, и если в каком то воркере пользователь запустил какой-то тяжелый отчет то в системе будет загружено только одно ядро процессора. Именно то, на котором работает воркер с запущенным заданием… Для БД ситуация кстати ровно обратная. (источник — Гилев, собственный опыт, опыт коллег)
    4. Не используйте логи в "новом" формате (запись в SQLLite) — вы очень быстро столкнетесь с тем, что производительность этого решения еще хуже чем файлового варианта. (Источник — собственный опыт, опыт коллег).
      По подсказкам из комментариев есть вариант вынести логи на отдельный инстанс.
      В 8.3.12 обещали логи в нормальный скуль!!!
    5. 1С оооочень не любит IPv6. На всех серверах с 1С лучше сразу понижать приоритет IPv6 до минимума. И нет, отключить вы IPv6 не сможете (Источник — Гилев, собственный опыт)
    6. Используйте для виртуальных серверов виртуальные сетевые карточки E1000. С остальными проблема по производительности (Источник — Гилев, но на собственном опыте не подтвердилось, хотя особо и не тестили)
    7. Обслуживание баз дает хороший прирост производительности, особенно периодический пересчет итогов, а так же обслуживание индексов SQL (Источник — собственный опыт, Гилев)
    8. Поиск причин падения 1С сродни поеданию неочищенного кактуса. Выяснить что-то толком можно только через боль, унижения и страдания. (Источник — собственный опыт)
    9. Нет ни одного официального образа ни под один гипервизор. Про докер я вообще молчу. (Источник — сайт 1С)
    10. Программная лицензия для сервера привязывается к — сюрприз, сюрприз — серийному номеру процессора (и еще огромному количеству параметров сервера). В эпоху повсеместной виртуализации ход потрясающий. Поясняю — активировали сервер, переехали на другую ноду, перезагрузили машину — 1С не запуститься. Расчехляйте новый активационный код. (Источник — собственный опыт, болтливая техническая поддержка 1С =))
    11. 1С — это учетная система, а не отчетная. Хотите много нормальных жирных отчетов и быстро — выводите это за рамки 1С. (Источник — собственный опыт)
    12. У 1С есть два неоспоримых достоинства, за счет которых она будет процветать еще долго:
      • стоимость самого продукта/разработчиков
      • скорость разработки
        и к сожалению для российского бизнеса они являются первоочередными. А зачастую и единственными, на что вообще смотрят. (Источник — печальная реальность)
    13. Никогда не используйте файловую шару как место под хранилище конфигураций 1С. Только службу. Иначе маты со стороны разработки о упавшем черт знает когда хранилище станут вашим неизменным спутником по жизни. (Источник — собственный опыт, опыт коллег)
     

    Акт первый, действие первое

     

    Первая короткая сценка из корпоративной жизни

     

    На сцене — Админ (А), программист 1С (П1С) и представитель бизнеса (ПБ)
    ПБ — У нас медленно работает программа!
    А — у меня в системе все хорошо!
    П1С — я все написал правильно, у меня на компьютере все работает быстро!
    ПБ (робко и растерянно) — но она же долго…
    А и П1С хором — у нас все хорошо, проблема на вашей стороне!

     

    Проблемы всегда случаются не вовремя (с) (5-летний философ)

     

    И вот в одно прекрасное солнечное утро (на самом деле это была глубокая зимняя ночь) мы поняли что завтра надо запустить новую базу. Завтра наступал тот прекрасный день, который уже много раз описывался тысячами авторов и имя ему — легион! Тьфу, простите, занесло. Имя этому дню был дедлайн. Час ночи, завтра на 200 компах должна запуститься новая база." Да не проблема, у нас же все компы в домене! Сейчас быстренько сделаем логин-скрипт и дело в шляпе!" подумаете вы. И будуте правы — так же подумали и мы. И сделали. Только, как обычно это бывает, погорели на мелочи — я в логон-скрипте я прописал %filename%.bat а коллега выложил %filename%.cmd.

     

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

     

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

     

    В итоге мы пришли к следующей идеологии:

     
    • Все раздается через AD — создаются группы вида 1cbases-%версия платформы%-%имя базы% и туда силами хелпдеста добавляются пользователи, которым нужна база.
      • одна группа — одна база
      • 1cbases — это префикс по которому удобно искать группы
      • версия платформы 81, 82 и 83 (релиз не принципиален)
      • название базы соответствует имени файла с настройками
    • выделяется общая файловая шара где выкладываются все файлы с настройкой подключения к базам (одна база — один файл)
    • при блокировании компьютера вызывается скрипт, который считывает группы пользователя и на их основании добавляет пользователям нужные базы 1С
     

    Как мы это делали:

     
    1. Через групповые политики добавляется новое задание в планировщик (задача планировщика прописать пользователю путь к файлу подключения базы):
      • запускать от имени пользователя
      • событие — разблокировка компьютера
      • действие — запуск нашего скрипта
    2. Создаем нужные группы в АД и заполняем их пользователями
    3. Создаем нужные файлы для запуска самих 1С. Тут остановлюсь чуть поподробнее. Изначально мы долго мучили интернет своими запросами и нашли полное описание структуры файлов *.v8i. Но потом нашелся способ проще и гениальнее.
      • запускаем 1С
      • настраиваем подключение к базе
      • проверяем что все работает
      • кликаем правой клавишей по названию базы и выбираем пункт — "Сохранить ссылку в файл"
     

    rq4-cc7tx8-ggwpqxj6rpy-eebg.png

     
    Код скрипта:
     

    Что получили:

     
    1. Добавление баз теперь не было морокой — просто делали группу, добавляли файл с настройками — дальше все происходило автоматом
    2. Могли спокойно переносить базы куда угодно, просто меняя конфигурацию в файле с настройками подключения к базе (как показала практика — очень удобно)
    3. Сберегли обувь хелпдеску
     

    Акт первый, действие второе

     

    Вторая короткая сценка из корпоративной жизни

     

    На сцене — Админ (А), программист 1С (П1С), разговор после ухода представителя бизнеса
    А — Ваш этот 1С — $#%но!!! Сколько можно решать железом проблемы архитектуры и уровня разработчиков!
    П1С — да это ваши сервера #$@но! У меня на локальной файловой базе все летает! Настройте уже ваше хозяйство по нормальному!
    Спорщики удаляются со сцены сыпля взаимными обвинениями, опускается занавес, свет гаснет.

     

    И с этой стороны ни чуть не лучше… (с) печальный ослик Иа-Иа в свой собственный день рождения

     

    Вот представьте себе — сидите вы в удобном кресле, в одной руке чашка вкусного чая, в другой пышущая жаром и свежестью булочка из кулинарии ближайшего магазина, за окном приятно пахнет весной… И это, конечно же, самое подходящие время для звонка с проблемой! Коллега — Байконур, у нас %@па!

     

    Я — я так понимаю что стадию Хьюстона с проблемами мы уже успешно пролетели?
    Коллега — да. База %имя базы% подвисла, вообще не отвечает, ТОПы уже рвут и мечут. 3 раза мне уже звонили. Надо перезагружать службу.
    Я — так там же еще пачка баз на этой службе!!!
    Коллега — да, поэтому вторая половина ТОПов тоже рвет и мечет что их отключат...

     

    В итоге конечно все согласовали, перезапустили, но осадочек остался.

     

    Идеология:

     
    1. В продуктовой среде мы должны следовать правилу — одна база — одна служба с разнесением по портам
    2. Запускаться службы должны исключительно из-под доменных учеток. Одна служба — одна учетка. Это удобно для раздачи прав на шары, доступ в скуль и прочее. Так же, если у вас внедрена RBAC то вы можете очень оперативно посмотреть куда имеет доступ конкретный экземпляр 1С
    3. Логи нужно вынести на отдельный диск и включить на эти папки сжатие (при разбитии по дням это очень сильно экономит место и ускоряет (незначительно) поиск по логам)
    4. Каждой службе выдается alias в DNS для того, чтобы отвязать разработку от ip и/или dns сервера (в этом случае разработка вообще не волнуется на предмет того, где фактически находится сервер — физика, виртуальная машина в приватном облаке или вообще в публичном облаке)
    5. На каждую службу мы выделяем 500 портов для пользовательских соединений (наше внутреннее решение)
     

    Как мы это делали (для нового сервера. для уже существующего часть шагов не актуальны):

     
    1. Создаются учетки под каждую службу
    2. На машине, где они будут работать им выдаются права на "запуск как службе"
    3. Ставиться MS офис, обязательно с активацией по MAK-ключу
    4. Ставится sqlncli — утилита из набора MS SQL Native Client. На данный момент выше 2012 не появлялось
    5. Создается папка C:\Windows\SysWOW64\config\systemprofile\Desktop — в противном случае есть проблемы с выгрузками в Word/Excel
    6. Для Windows 2016 и 1С 8.1 нужно скопировать старую версию dll (В папке C:\Program Files\Common Files\System\Ole DB надо заменить два файла sqloledb.dll и sqloledb.rll взятых со старых серверов)
    7. Ставятся дополнительное ODBC драйверы, если нужно подключатся к MySQL/PostgreSQL
     

    Настройка папки для службы и логов:

     
    1. Создается папка на отдельном диске называется в формате 1CServer%basename% (в стандартном случае это делает сама служба, ибо у нее есть в настройках запуска путь к логам)
    2. Если внутрь каталога только что созданной службы переносятся данные из другого каталога (другой службы, другого сервера), то необходимо заменить владельцев (иначе служба не получит к ним доступа) с заменой владельца подконтейнеров
    3. Владельцем папки делается учетная запись службы
     
    Описание настройки службы
     

    Нюансы:

     
    1. Для того, чтобы в службах не было кроказябр
      • в cmd ввести команду chcp 1251
      • файл надо сохранить в ANSI кодировке
    2. Обязательно надо проверить на отсутствие дублирующих ключей в строке запуска — служба с ними не стартует!!!
    3. Для того, чтобы удалить службу, можно воспользоваться командой — sc delete «Имя заданное в переменной name»
    4. Добавить порты используемые 1С в разрешения в firewall
    5. Нужен всего один физический ключ на сервер — все службы будут активироваться им
     

    После проведения всех мероприятий в итоге мы пришли к:

     
    1. Базы можно спокойно перезагружать, не трогая другие базы
    2. Всегда можно найти "героя" — базу, которая съедает все ресурсы
    3. Любые работы с базой касаются только одной конкретной базы
     

    В следующих статьях я планирую рассказать (если эта статья народу зайдет):

     
    • как мы перевели авторизацию в MSSQL на kerberos и вообще оптимизировали доступы
    • как мы сделали мониторинг служб — кто сколько занял ресурсов
    • как мы сделали мониторинг внутри службы 1С выявления блокировок пользователями быстрее, чем они позвонят
    • как мы пытались внедрить CI для 1С и что из этого вышло
     

     

  9. Linux

    LAMP-Debian-Ubuntu-000.jpgВеб-сервер Apache без преувеличения можно назвать стандартом де-факто в интернет. Большинство популярных систем управления сайтами и иных веб-приложений разрабатываются таким образом, чтобы работать с данным веб-сервером "из коробки". Поэтому, если вам нужен веб-сервер широкого применения, то Apache будет лучшим выбором. В данной статье мы расскажем, как установить и настроить полноценный веб-сервер на базе Debian / Ubuntu Server.

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

    Кроме самого веб-сервера нам понадобится система управления базами данных, в данной отрасли стандартом де-факто давно является MySQL, и один из скриптовых языков для работы веб-приложений, на сегодняшний день пальму первенства уверенно держит PHP. Все вместе образует классическую связку, именуемую еще LAMP-сервер, аббревиатура расшифровывается как: Linux - Apache - MySQL - PHP.

    Для установки мы будем использовать платформу Debian / Ubuntu. Системы, в зависимости от релиза, отличаются набором ПО, но все изложенное ниже будет одинаково применимо к любой из них. Существующие отличия будут оговорены отдельно. На момент написания статьи актуальны следующие релизы систем и версии ПО:

    • Debian 8 Jessie: Apache 2.4.10, PHP 5.6.7, MySQL 5.5.43
    • Debian 7 Squeeze: Apache 2.2.22, PHP 5.4.39, MySQL 5.5.43
    • Ubuntu Server 14.04 LTS: Apache 2.4.7, PHP 5.5.9, MySQL 5.5.43
    • Ubuntu 12.04 LTS: Apache 2.2.22, PHP 5.3.10, MySQL 5.5.43

    Все вышеуказанные выпуски содержат относительно современные версии ПО, но есть некоторые особенности. Так входящий в состав Ubuntu 14.04 и Debian 8, Apache 2.4 имеет достаточно серьезные отличия от Apache 2.2 и не все CMS (системы управления контентом, "движки") и веб-приложения умеют работать с ним, особенно это касается старых версий. Так, например, вы не сможете использовать Apache 2.4 для веб-доступа к базам 1С:Предприятие. Поэтому, если вы решили выбрать версию 2.4 - уточните совместимость с нею всех планируемых к размещению CMS и веб-приложений.

    Кроме того, MySQL из состава Ubuntu Server 12.04 / 14.04 не работает внутри контейнеров OpenVZ, которые широко используются для предоставления услуги VPS. Проблема решается заменой MySQL из репозитория на версию от MySQL Community (разработчики) или один из форков, например, MariaDB.

    С учетом вышесказанного оптимальным выбором нам представляется использование в качестве платформы веб-сервера Debian 7, как наиболее совместимую с существующими веб-приложениями и не имеющую серьезных проблем.

    Мы не будем останавливаться на установке и подготовке серверной ОС, более подробно вы можете ознакомиться с этим процессом в наших статьях для Debian и Ubuntu Server. Также не забудьте правильно настроить язык и региональные стандарты системы. Все приведенные ниже действия следует выполнять с правами суперпользователя, например, с помощью команды sudo.

    Установка Apache

    Установка веб-сервера предельно проста:

    apt-get install apache2

    Для проверки его работы наберите в браузере IP-адрес сервера, и вы увидите стандартную страницу заглушку:

    image.pngДля Apache 2.4 она выглядит несколько иначе, но смысл от этого не меняется.

    Настройки сервера содержатся в /etc/apache2/apache2.conf, к которому подключаются дополнительные файлы из директорий mods-enabled и sites-enabled. При этом никто не мешает вам внести все указанные настройки непосредственно в apache2.conf - все будет работать, но это резко снижает удобство администрирования, так как требует постоянной правки основного файла конфигурации, в то время как настройки во внешних файлах легко включаются и отключаются при помощи специальных инструментов.

    С этой целью каталоги mods-enabled и sites-enabled не содержат файлов конфигурации, а только символические ссылки на директории mods-available и sites-available, где следует располагать сами файлы. Как понятно из названий, в данных каталогах находятся настройки модулей и виртуальных хостов. Если с модулями дело приходится иметь редко, то управлять таким образом виртуальными хостами, т.е. сайтами, очень удобно.

    Подробно о виртуальных хостах и расположении содержимого сайта мы уже писали в статье по Lighttpd, все сказанное там справедливо и для нашего случая. Вы вольны выбрать любую схему размещения данных, мы же предпочитаем хранить содержимое сайтов внутри /var/www в папках с именем домена.

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

    apt-get install apache2-mpm-itk

    В Ubuntu 14.04 при установке данного пакета вы можете столкнуться с ошибкой:

    dpkg: error processing package apache2-mpm-itk (--configure):
    проблемы зависимостей -- оставляем не настроенным

    Это известный баг, для его исправления выполните:

    a2dismod mpm_event
    apt-get install -f

    Если мы заглянем в папку sites-enabled, то увидим там уже готовую конфигурацию для сайта по умолчанию, т.е. того, что будет показано при наборе IP-адреса сервера. Данная настройка указывает на папку /var/www или /var/www/html для Apache 2.4, где расположена страница заглушка. После того как вы добавите свои сайты, выводиться будет первый по списку сайт.

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

    mkdir /var/www/example.com
    chown andrey:andrey /var/www/example.com

    Теперь создадим файл виртуального хоста и приступим к его заполнению:

    touch /etc/apache2/sites-available/example.com

    Для Apache 2.4 файлы конфигурации обязательно должны иметь расширение .conf, поэтому команда будет выглядеть следующим образом.

    touch /etc/apache2/sites-available/example.com.conf

    Внутри разместите следующий текст:

    <VirtualHost 1.2.3.4:80>
        ServerName example.com
        ServerAdmin mail@example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/example.com
        CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined
        ErrorLog ${APACHE_LOG_DIR}/example.com.error.log
        AssignUserID andrey andrey
        <Directory /var/www/example.com>
            Options -Includes -Indexes -ExecCGI
            AllowOverride All 
        </Directory>
    </VirtualHost>

    Разберем содержимое более подробно. Начинается секция виртуального хоста с ее определения <VirtualHost 1.2.3.4:80>, где указывается IP-адрес и порт, на котором данный хост работает, если вы хотите принимать соединения на всех сетевых интерфейсах, то вместо адреса поставьте "звездочку" - *. Внутри секции располагаются следующие директивы:

    • ServerName - имя виртуального хоста, должен иметь значение полного доменного имени (FQDN), в нашем случае example.com, определяет, какое доменное имя обслуживает данный виртуальный хост.
    • ServerAdmin - контактный адрес электронной почты администратора домена, включается в сообщения об ошибках веб-сервера, рекомендуется завести для этих целей отдельный ящик.
    • ServerAlias - алиас имени хоста, обязательно значение www.example.com, чтобы ваш сайт работал как с www, так и без.
    • DocumentRoot - корневая папка виртуального хоста, указываем директорию размещения сайта, т.е. /var/www/example.com
    • CustomLog - имя и расположение лога доступа, переменная ${APACHE_LOG_DIR} указывает на стандартную директорию логов веб-сервера, это позволяет использовать стандартный механизм ротации логов для всех сайтов, в имени лога рекомендуем указывать имя хоста, чтобы сразу было понятно где какой лог. Не забудьте в конце опцию combined, данная опция указывает формат лога и задается в apache2.conf.
    • ErrorLog - имя и расположение лога ошибок, полностью аналогичен логу доступа, но не требуется указывать формат лога.
    • AssignUserID - имя и группа пользователя (через пробел) от имени которых будет работать данный виртуальный хост, задается только если установлен apache2-mpm-itk, в противном случае эта директива не нужна.

    Внутри секции виртуального хоста размещаем еще одну секцию <Directory /var/www/example.com>, которая включает директивы, применяемые не к хосту, а к каталогу, в нашем случае к корневому каталогу виртуального хоста. Там располагается директива Options, которая содержит следующие опции (перед каждой из которых ставится + или -, разрешая или запрещая опцию):

    • ±Includes - разрешает / запрещает SSI (Server Side Includes -- включения на стороне сервера), в нашем случае выключено в целях безопасности. Имеет смысл включать только в том случае, если ваш сайт явно требует данной опции.
    • ±Indexes - разрешает / запрещает показывать содержимое каталога при отсутствии индексного файла, отключено в целях безопасности.
    • ±ExecCGI - разрешает / запрещает выполнение сценариев CGI, отключаем в целях безопасности.

    За ней следует директива AllowOverride, которая устанавливает использование директив из файлов .htaccess, по умолчанию сервер устанавливает для /var/www данную директиву в None, что запрещает использовать директивы .htaccess во всех вложенных директориях. Для того чтобы разрешить использование директив .htaccess установите данную директиву в All, что разрешит использовать в .htaccess любые директивы.

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

    Закрываем открытые секции: </Directory> и </VirtualHost>, затем сохраняем файл. Конфигурация виртуального хоста готова.

    Чтобы включить сайт необходимо сделать символьную ссылку на файл конфигурации в каталоге sites-enabled, а, чтобы выключить - удалить эту ссылку. Это можно сделать вручную, при помощи команды ln -s, или использовать специальную утилиту apache:

    a2ensite example.com 

    Данная команда включит сайт, для выключения введите:

    a2dissite example.com

    В качестве опции команде передается имя конфигурационного файла из sites-available, в случае Apache 2.4 без расширения. После каждого такого действия веб-сервер необходимо перезапустить:

    service apache2 reload

    Чтобы проверить работу виртуального хоста разместите в его корневой директории любой html-файл и обратитесь к серверу по имени домена (при этом А-запись домена должна быть настроена и указывать на ваш веб-сервер).

    Например, создадим индексный файл:

    touch /var/www/examlpe.com/index.html

    И разместим в нем строку:

    <body><h1>OK!</h1></body>

    В итоге в браузере вы должны увидеть следующее:

    image.png

    Установка PHP

    Если веб-сервер был нужен вам для размещения статического содержимого или сторонних веб-приложений, например, публикации баз 1С:Предприятия, то дальше можно не читать. Но если вы собираетесь создать сайт на основе популярных CMS - вам потребуется поддержка скриптового языка PHP, на базе которого разработаны большинство современных "движков".

    Выполним команду:

    apt-get install php5

    Будет установлен сам интерпретатор и необходимые для работы с веб-сервером модули. Модули позволяют гибко изменять функциональность PHP, управление модулями осуществляется аналогично Apache, когда конфигурации модулей располагаются в одной директории, а для их подключения делается символьная ссылка в другую.

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

    Например, для работы с графикой вам потребуется поддержка графической библиотеки GD2, поэтому установим соответствующий модуль:

    apt-get install php5-gd

    После чего не забудьте перезапустить веб-сервер:

    service apache2 reload

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

    Установим утилиту и модуль PHP для нее:

    apt-get install imagemagick php5-imagick

    Для проверки работы PHP создадим в корневой директории сайта специальный скрипт:

    touch /var/www/examlpe.com/info.php

    И внесем в него следующий текст:

    <?php
    phpinfo();
    ?>

    Теперь наберем в браузере http://example.com/info.php, в результате работы данного скрипта вы увидите стандартную страницу с информацией о PHP, установленных модулях, настройках и т.д.

    image.png

    Установка MySQL

    СУБД MySQL - третий необходимый компонент полноценного веб-сервера, основное назначение базы данных - хранение информации сайта, как пользовательской, так и служебной. При этом по важности СУБД превосходит все остальные компоненты, так как потеря базы данных равносильна потере всей информации вашего ресурса.

    Установим сервер баз данных и модуль PHP для работы с ним:

    apt-get install mysql-server php5-mysql

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

    image.pngДля удобного управления базами данных имеет смысл установить phpMyAdmin - удобную веб-утилиту для управления сервером MySQL:

    apt-get install phpmyadmin

    Инсталлятор утилиты умеет автоматически настраивать популярные веб-сервера Apache и Lighttpd, нужный сервер следует указать при установке:

    image.png

    Веб-интерфейс утилиты будет доступен по адресу http://example.com/phpmyadmin, для входа следует использовать учетные данные пользователя MySQL, в нашем случае это root (других еще нет) с паролем, который мы указали во время установки MySQL.

    В Ubuntu 14.04 мы столкнулись с небольшой проблемой, утилита сообщила нам, что расширение mcryptне найдено, хотя соответствующий модуль PHP был установлен среди зависимостей.

    image.png

    Проверим. В /etc/php5/apache2/conf.d ссылка на данный модуль отсутствует, в то время как в /etc/php5/mods-available нужный файл есть. Следовательно, модуль установлен, но, по какой-то причине, не подключен. Возможно это связано с Apache 2.4 и тогда подобная ситуация может иметь место и в Debian 8.

    Однако ничего страшного не произошло, все что нам нужно - это подключить модуль, создав символьную ссылку:

    ln -s /etc/php5/mods-available/mcrypt.ini /etc/php5/apache2/conf.d/20-mcrypt.ini

    image.png

    Никаких дополнительных настроек MySQL сервер не требует, благо кодировка UTF-8 стала стандартом де-факто. В принципе на этом можно закончить, но все базы данных размещаемые на сервере будут работать с правами суперпользователя MySQL, что небезопасно. Поэтому следует создать пользователей сервера баз данных с ограниченными правами, чтобы они могли управлять только своими базами.

    Откроем phpMyAdmin и перейдем на страницу Привилегии (Пользователи), где выберем Добавить нового пользователя.

    image.pngТеперь прокрутим страничку чуть ниже и установим опцию Предоставить полные привилегии на базы данных подпадающие под шаблон (имя пользователя\_%)

    image.png

    Это позволит лишний раз не отвлекаться на установку прав, а просто создавать базы с именами вида ivanov_base1 или petrov_base2, предоставляя соответствующим пользователям полные права на них, а также быстро определять принадлежность баз данных. В тоже время данная настройка не является догмой, вы можете поступать на свое усмотрение. Остальные параметры оставляем по умолчанию.

    Для проверки создадим базу данных phpMyAdmin - Базы данных - Новая база данных.

    image.pngПри создании БД обращайте внимание на кодировку. Сегодня большинство движков и веб-приложений работают с UTF-8 (utf8_general_ci), однако старые версии движков могут использовать национальные кодировки, поэтому нужно будет правильно указать их еще на стадии создания базы, в противном случае, залив в базу, созданную в UTF-8 дамп в кодировке Windows-1252 вместо русских букв на сайте окажутся "крякозяблики".

    image.png

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

    image.png

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

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

  10. iOS

    • 1
      запись
    • 0
      комментариев
    • 274
      просмотра

    Последние записи

     
     
    iOS 12 вышла — обзор, что нового, какие устройства поддерживает, отзывы

    Что нового? Все нововведения iOS 12!

     

    iOS 12 — новая версия мобильной операционной системы Apple для iPhone и iPad, вышла 17 сентября 2018. В iOS 12 появилось множество новых функций и изменений в интерфейсе, а главное — прошивка iOS 12 значительно увеличивает скорость работы Айфонов и Айпэдов. iOS 12 стала одним из самых стабильных релизов мобильной операционной системы для iPhone, iPad и iPod touch за последние годы. Что нового в iOS 12 подробно рассказали в этом материале.

    Важно! Финальная версия iOS 12 и GM-версия iOS 12 имеют одинаковый номер сборки 16А366. Это означает, что если на вашем устройстве установлена GM-версия iOS 12, финальная сборка iOS 12 вам не придет. У вас уже стоит финальная версия.

    Быстрый переход:

      1. Какие устройства поддерживает iOS 12 — официальный список
      2. Производительность и оптимизация iOS 12
      3. FaceTime, анимодзи и мемодзи
      4. iMessage
      5. ARKit 2 — новая дополненная реальность
      6. Новая функция «Экранное время»
      7. Переработанный «Центр уведомлений»
      8. Улучшенный режим «Не беспокоить»
      9. Нововведения в приложении «Фото»
      10. «Быстрые команды» и другие улучшения Siri
      11. Четыре самых полезных нововведения iOS 12
      12. Ещё 39 крупных нововведений
      13. Как установить iOS 12 прямо сейчас
      14. Как установить iOS 12 через Wi-Fi
      15. Как установить iOS 12 через iTunes
      16. Отзывы об iOS 12
      17. Дата выхода iOS 12

    Какие устройства поддерживает iOS 12 — официальный список

    iPhone

    • iPhone X
    • iPhone 8
    • iPhone 8 Plus
    • iPhone 7
    • iPhone 7 Plus
    • iPhone 6
    • iPhone 6 Plus
    • iPhone 6s
    • iPhone 6s Plus
    • iPhone SE
    • iPhone 5s

    iPad

    • iPad (2018)
    • iPad Pro 12,9″ первого и второго поколения
    • iPad Pro 10,5″
    • iPad Pro 9,7″
    • iPad Air 2
    • iPad Air 1
    • iPad пятого поколения
    • iPad (2017)
    • iPad mini 4
    • iPad mini 3
    • iPad mini 2

    iPod touch

    • iPod touch шестого поколения

    К содержанию.

    Производительность и оптимизация iOS 12 — это самая быстрая iOS в истории

    Главный фокус в iOS 12 сделан на увеличении производительности. Apple, как и прогнозировалось, пожелала во что бы то ни стало восстановить репутацию iOS после провального запуска iOS 11. Как итог, iOS 12 стала в два (!) раза быстрее iOS 11.

    1.gif?x44442

    Разработчики Apple так сильно постарались, что iOS 12:

    • на 40% (!) быстрее запускает приложения по сравнению с iOS 11;
    • на 50% быстрее работает с клавиатурой;
    • на 70% (!) быстрее открывает приложение «Камера» и выполняет любые действия в нем.

    При этом самое главное, что такой прирост производительности произошел на абсолютно всех моделях iPhone, iPad и iPod touch. Включая самые старые модели, которым в этом году исполнится уже пять лет. Речь идет о широко распространенных в России и странах СНГ: iPhone 5s, iPad Air и iPad mini 2. Все эти устройства не просто получили поддержку iOS 12 (хотя по обычным правилам Apple не должны были), но и были значительно ускорены.

    2.gif?x44442

    Apple официально объявила о том, что iOS 12 ощущается в «живой» работе «быстрее, чем когда-либо». Руководители компании отдельно подчеркнули, что это сильнее всего относится к iPhone 5s и iPad Air, поэтому пользователи этих моделей могут ожидать по-настоящему великолепного опыта использования своих устройств под управлением iOS 12.

    Сравнения iOS 12 с iOS 11 подтверждают, что производительность в новой операционной системе сильно улучшилась. Детальные сравнения iOS 12 и iOS 11 доступны по представленным ниже ссылкам:

    Ускоренная анимация

    Помимо оптимизации iOS 12 с целью увеличить скорость работы, разработчики Apple также ускорили анимацию большинства действий. В результате этого, быстродействие iOS 12 по сравнению с iOS 11 возросло еще больше. Ниже представлен наглядный пример изменения скорости анимации и его прямого влияния на общее ощущение от операционной системы.

    iOS-12-na-iPhone-6s-sravnenie-s-iOS-11.4

    Ускоренная клавиатура QuickType

    Про то, что стандартная клавиатура iOS 12 стала гораздо быстрее мы уже написали. Но заострить внимание на этом улучшение стоит еще раз. Просто потому, что клавиатура получила по-настоящему стремительную скорость работы. Представленная ниже анимация показывает улучшения нагляднее всего.

    iOS-12-na-iPhone-6s-sravnenie-s-iOS-11.4
    К содержанию.

    FaceTime, анимодзи и мемодзи

    Новые анимодзи

    Не обошлось и без новых анимодзи для iPhone X, а в недалеком будущем и для трех новых моделей iPhone, которые будут представлены в сентябре. К и без того внушительному списку анимодзи добавились: коала, тигр, призрак и тираннозавр. Особенность новых анимодзи заключается в том, что они невероятно точно переносят не только мимику лица, но и движения языка. Прежде такого не было ни у Apple, ни, разумеется, у других производителей, чьи аналоги анимодзи по сравнению с высококачественными моделями производителя iPhone смотрятся по-настоящему смешно.

    4.gif?x44442

    Возможность записи анимодзи в течение 30 секунд

    У пользователей iPhone X есть возможность записывать короткие ролики с использованием анимодзи для отправки друзьям. В iOS 11 такие видео могли иметь максимальную продолжительность всего 10 секунд. В iOS 12 компания Apple предложила запись видео с анимодзи в течение целых 30 секунд.

    Улучшенный интерфейс выбора анимодзи

    Выбирать анимодзи в iOS 12 стало удобнее. Если прежде в приложении «Сообщения» список анимодзи был вертикальным, то теперь он горизонтальный с большими миниатюрами. Выбора анимодзи осуществляется по свайпу влево или вправо. Кроме этого, есть возможность открыть полный список всех доступных анимодзи по свайпу вверх.

    IMG_0171-1.png?x44442

    Memoji (мемодзи)

    Memoji (мемодзи) — это ответ Apple компании Samsung и ее аналогу анимодзи. Презентуя Galaxy S9 компания Samsung представила AR Emoji — анимированные смайлики, в основу которых ложится не мультяшный персонаж, а лицо пользователя. Качество AR Emoji оставляло желать лучшего, поэтому нововведение Samsung было названо провальным. У Apple же схожая «фишка» получилась на твердые пять баллов.

    5.gif?x44442

    Memoji не сканируют лицо человека, они создаются в специальном редакторе в приложении «Сообщения». В этом редакторе представлены сотни разнообразных частей лица и аксессуаров, позволяющие создать по-настоящему похожего на пользователя персонажа. После созданных персонажей можно использовать для записи посланий друзьям, как и в случае с обычными анимодзи. Функция для развлечения, не более, но даже ее Apple реализовала в своем стиле — идеально.

    Поддержка стикеров, анимодзи и мемодзи в FaceTime

    В групповых или личных видеозвонках по FaceTime в iOS 12 пользователи могут использовать дополнительные развлекательные инструменты. Apple предоставила пользователям возможность отправлять стикеры во время беседы, а также активировать анимодзи или мемодзи для того, чтобы представать перед друзьями в различных мультяшных образах.

    К содержанию.

    iMessage

    Обработка фото и видео в iMessage

    В приложении «Сообщения» в iOS 12 добавлена возможность максимально быстро обработать отправляемое фото или видео. Пользователям предлагается применить к видео анимодзи или добавить к снимку один из многочисленных эффектов, текст или же какой-либо объект, например, стрелочку или галочку. Новая функция приложения «Сообщения» призвана облегчить способ обработки отправляемых фото и видео.

    24.png?x44442

    Полноценный режим съемки в приложении «Сообщения»

    При съемке фото или видео из приложения «Сообщения» для мгновенной отправки в iOS 12 открывается полноэкранный режим камеры. Благодаря этому у пользователей появится куда больше шансов создать качественное фото или видео с первого раза. В предыдущих версиях iOS окошко камеры представляло из себя небольшой квадрат прямо в интерфейсе приложения.

    Панель со стикерами и расширениями переместилась

    Панель со стикерами, анимодзи и расширениями различных приложений в приложении «Сообщения» в iOS 12 переместилась. Она располагается над клавиатурой, а не под ней, как было прежде. Новое размещение панели гораздо удобнее, в частности, потому что случайных нажатий на нее становится гораздо меньше. Как и в iOS 11, скрыть панель полностью невозможно.

    IMG_0172-1.png?x44442

    Быстрые ярлыки в приложении «Сообщения»

    В iOS 12 при нажатии на имя контакта в приложении «Сообщения» открывается новая панель с быстрыми ярлыками. Они позволяют связаться с контактом посредством аудио или видео по FaceTime и просмотреть подробную информацию о нем. В предыдущих версиях iOS такой панели не было, можно было только вызывать абонента путем усиленного нажатия по его иконке.

    IMG_0157-1-1.png?x44442
    К содержанию.

    ARKit 2 — новая дополненная реальность

    С приходом iOS 12 компания Apple запустит новую улучшенную платформу дополненной реальности ARKit 2.0. Обновленная платформа позволит разработчикам создавать впечатляющие приложения и игры с поддержкой дополненной реальности. Приложения, созданные на ARKit 2, могут одновременно использовать несколько человек. Они могут просматривать объекты дополненной реальности с различных ракурсов, что значительно расширяет возможности приложений.

    5.png?x44442

    Приложение «Рулетка»

    Также ARKit 2 позволяет измерять объекты. В iOS 12 появилось новое приложение «Рулетка» (Measure), предлагающее возможность быстро и очень просто определить размеры даже относительно больших объектов реального мира.

    Kak-izmerit-obekt-s-pomoshhyu-iPhone-v-i

    Для измерения объекта на него необходимо навести камеру и поставить на нем две точки. Измерение происходит моментально, а главное — с высочайшей точностью. Схожие приложения-рулетки, основанные на первых в версиях ARKit, давно представлены в App Store, но с «Рулеткой» от Apple они сравниться не могут.

    Приложение «Рулетка» появилось не на всех устройствах с поддержкой iOS 12. Новая полезная утилита стала доступной только на iPhone и iPad с поддержкой ARKit:

    • iPhone SE
    • iPhone 6s
    • iPhone 6s Plus
    • iPhone 7
    • iPhone 7 Plus
    • iPhone 8
    • iPhone 8 Plus
    • iPhone X
    • iPad Pro (все модели)
    • iPhone 2017
    • iPhone 2018

    Новое расположение функции «Уровень»

    Стандартная функция «Уровень» сменило свое обычное расположение на устройствах с поддержкой ARKit. Если прежде оно находилось в приложении «Компас», то теперь ему отделена собственная вкладка в приложении «Рулетка».

    2-2-1-1.png?x44442
    К содержанию.

    Функция «Экранное время»

    В начале 2018 года правозащитники обратили внимание на то, что подростки проводят все больше времени за смартфонами и планшетами, в частности, за iPhone и iPad. Сразу несколько ведомств попросили Apple как-либо повлиять на ситуацию. Apple не пришлось долго уговаривать и в iOS 12 появилась новая функция «Экранное время».

    IMG_0169-1.png?x44442

    Функция позволяет следить за тем, как пользователи тратят время при использовании своих iPhone и iPad. Функция работает по аналогии с опцией мониторинга расхода заряда аккумулятора, показывая график использования мобильного устройства и конкретную активность в тех или иных приложениях. У пользователей имеется возможность установить ограничения на активность в любых приложениях и играх, установленных на iPhone или iPad.

    6.png?x44442

    Благодаря новой функции родители могут ограничить использование «вредных» приложения для своих детей наиболее простым образом. Например, если ваш ребенок слишком много смотрит YouTube, то в iOS 12 вы сможете поставить ограничение на просмотр видео в приложении. Когда указанный вами лимит времени подойдет к концу, приложение перестанет запускаться.

    Блокировка всех отвлекающих приложений

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

    5125151-1.png?x44442

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

    Виджет функции «Экранное время»

    Также у функции «Экранное время» имеется собственный виджет. Он позволяет максимально быстро и просто увидеть статистику использования iPhone или iPad за сегодняшний день на странице виджетов.

    К содержанию.

    Переработанный «Центр уведомлений»

    Одно из самых долгожданных и запрашиваемых пользователями нововведений — обновленный «Центр уведомлений». Apple прислушалась к потребителям и предоставила им гибкие настройки списка оповещений. В iOS 12 пользователи получили возможность группировать уведомления по приложению, а также управлять оповещениями прямо из «Центра уведомлений».

    4-1.gif?x44442

    «Умная» группировка уведомлений

    По умолчанию на iPhone и iPad под управлением iOS 12 включена «умная» группировка оповещений для всех приложений. Уведомления группируются не просто по приложению, а еще и с учетом предпочтений каждого конкретного пользователя. Благодаря этому наиболее важные оповещения всегда появляются вверху списка, что будет особенно удобно для тех пользователей, которые получают большое количество уведомлений из различных приложений.

    IMG_0143-1.png?x44442

    Быстрая настройка уведомлений любого приложения

    В iOS 12 у пользователей есть возможность без отлагательств, прямо из «Центра уведомлений», перейти к настройкам оповещений приложений. Для этого требуется зажать на любом входящем уведомлении, нажать на иконку (•••) и выбрать пункт «Настройки». Очень удобная опция, которая позволит изменить тип уведомлений от приложений за считанные секунды и без необходимости копаться в настройках.

    Быстрое заглушение звуков уведомлений отдельных приложений

    Еще один приятный твик «Центра уведомлений». Зажав на любом уведомлении и нажав уже знакомую иконку (•••), у пользователей имеется возможность в два нажатия заглушить все уведомления от выбранного приложения. При этом оповещения продолжат появляться в «Центре уведомлений», но никакого звукового сопровождения при их появлении не будет.

    IMG_0146-1.png?x44442

    Новый интерфейс настроек уведомлений

    В самих настройках уведомлений тоже небольшое, но приятное изменение. На странице с параметрами оповещений появились большие и понятные миниатюры, которые показывают, как именно уведомления будут отображаться на экране.

    43-1.png?x44442
    К содержанию.

    Улучшенный режим «Не беспокоить»

    Режим «Не беспокоить», как мы и прогнозировали, в iOS 12 стал лучше. В обновлении он предлагает больше гибких настроек. Так, вы можете быстро включить его только на 1 час, до окончания текущего мероприятия из «Календаря» или, например, до ухода из текущей геопозиции.

    24-1.png?x44442

    Режим «Отход ко сну»

    В режиме «Не беспокоить» в iOS 12 появился специальный подрежим «Отход ко сну». Он активируется одновременно с основным режимом «Не беспокоить» и полностью исключает появление уведомлений на iPhone и iPad в установленные для сна часы. Входящие уведомления не блокируются, а просто перестают отображаться для того, чтобы пользователей во время сна точно ничего не отвлекало. Когда же iPhone или iPad выводится из режима «Отход ко сну», все оповещения появляются в «Центре уведомлений» в хронологическом порядке.

    1-4-1.png?x44442

    Новая анимация и затемненные уведомления в режиме «Не беспокоить»

    Два последних улучшения режима «Не беспокоить» не такие серьезные, но заметные. При включении режима без уведомлений на iPhone и iPad воспроизводится новая анимация. Дисплей устройства постепенно затемняется, наглядно показывая, что режим включен. Такое же затемнение применяется и на весь «Центр уведомлений». Фон всех оповещений становится более темным, но текст при этом остается читабельным.

    1-2-2-1.png?x44442
    К содержанию.

    Нововведения в приложении «Фото»

    Приложение «Фото» получает улучшения в каждой версии iOS, и iOS 12 не стала исключением. В обновленном приложении «Фото» появилась новая вкладка «Для Вас», в которой автоматически собираются лучшие и самые любимые вами фотографии. «Умный» алгоритм iOS 12 определяет, какие люди находятся на выбранных фотографиях, и предлагает вам поделиться снимками с ними.

    523151351-1.png?x44442

    Также в приложении «Фото» в iOS 12 добавлен более удобный способ поиска фотографий. Еще до ввода поискового запроса приложение предлагает вам последние и чаще всего просматриваемые снимки, пытаясь угадать какую фотографию вы ищете. Если этого оказалось недостаточно, то по мере ввода запроса новая система поиска приложения «Фото» улучшает результаты и в итоге обязательно находит нужный снимок.

    1-3-1-1.png?x44442

    Поддержка формата RAW в «Фото»

    Также в приложении «Фото» появилась полноценная поддержка фотографий в формате RAW. В iOS 12 их можно просмотреть и даже отредактировать с использованием стандартных инструментов. В предыдущих версиях iOS для этого требовалось использовать сторонние специализированные приложения.

    К содержанию.

    «Быстрые команды» и другие улучшения Siri

    Siri не стала значительно умнее, но ее использование на повседневной основе в iOS 12 гораздо удобнее. Siri начала поддерживать «Быстрые команды» — различные продвинутые действия, определенные пользователем заранее. Например, в настройках Siri пользователь может присвоить голосовой команде «Открой новости спорта» действие — запуск его любимого спортивного приложения, причем в определенном разделе.

    100-glavnykh-novovvedeniy-iOS-12-obzor-1

    Приятнее всего, что «Быстрые команды» iOS 12 поддерживают русский язык. Еще более приятно, что многие сторонние приложения уже (!) адаптированы под новую функцию iOS 12 и на них можно устанавливать «Быстрые команды».

    Предложения Siri на заблокированном экране и в поиске Spotlight

    Также Siri начала давать более точные предложения. Причем ассистент научился давать их в новых местах: на экране блокировки и в поиске Spotlight. В обоих случаях предложения Siri являются «умными». Так, Siri может посоветовать проверить погоду, если вы собираетесь в дорогу, отправить сообщение с предупреждением об опоздании (сработает только если встреча запланирована в «Календаре») и т.д.

    100-glavnykh-novovvedeniy-iOS-12-obzor-2

    Siri напоминает о необходимости перезвонить

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

    1-1-1.jpg?x44442

    Функция «Привет, Siri» работает в режиме экономии энергии

    Еще одно приятное нововведение Siri — возможность работать при активированном режиме экономии энергии. В iOS 12 не придется отказываться от выполнения быстрых запросов к Siri в моменты, когда на iPhone осталось мало заряда аккумулятора.

    Siri умеет включать фонарик

    Последним приятным улучшением Siri в iOS 12 является возможность включать и отключать фонарик простыми голосовыми командами. Для включения фонарика достаточно сказать «Siri, включи фонарик», а для отключения, соответственно, «Siri, выключи фонарик». В обоих случаях действие выполняется моментально, без необходимости подтверждения.

    V-iOS-12-poyavilas-vozmozhnost-vklyuchat
    К содержанию.

    Четыре самых полезных нововведения iOS 12

    Подробная информация об использовании аккумулятора

    В iOS 12 имеется возможность просматривать статистику использования аккумулятора за последние 24 часа или за последние 10 дней. Это нововведение позволит пользователям проще понимать, какие приложения сильнее всего расходуют заряд аккумулятора устройства.

    V-iOS-12-pokazyvaet-detalnuyu-statistku-

    В меню «Настройки» → «Аккумулятор» представлены интерактивные графики и список приложений и функций, которые потребляли заряд аккумулятора в выбранный период времени. Графики являются интерактивными. Это означает, что вы можете нажать на интересующий участок графика и тут же узнать, какие приложения «съедали» заряд в то или иное время. Шикарная функция, которая определенно поможет пользователям узнать, из-за чего их iPhone или iPad разряжаются быстрее всего. Кроме этого, функция позволит выявить «приложение-вредитель», которое может «пожирать» заряд аккумулятора в фоновом режиме.

    Функция автозаполнения кодов из SMS

    Нововведение iOS 12, которое было названо многими пользователями самым полезным. iOS 12 «научилась» определять коды проверки во входящих текстовых сообщениях и предлагать их для ввода как в Safari, так и в приложениях без необходимости запоминать, записывать или вводить вручную. Например, если вам пришла SMS с проверочным кодом от банка или оператора связи, то ввести код на странице проверки получится ровно одним нажатием — он появится над клавиатурой.

    1-1-1-1.png?x44442

    Расширенные уведомления

    Одно из самых главных нововведений iOS 12, потенциал которого будет полностью раскрыт после выхода финальной версии прошивки. Apple предоставила разработчикам возможность добавлять в уведомления приложений различные интерактивные элементы, например, кнопки. Благодаря нововведению уведомления станут предлагать больше функций. Например, разработчики почтовых приложений смогут предложить пользователям опцию быстрого удаления или архивирования входящих писем прямо из окошка уведомления. А создатели мессенджеров — функцию, позволяющую быстро отложить входящее сообщение. Примеров использования расширенных уведомлений можно привести огромное множество. Нет сомнений, что разработчики точно будут использовать их, тем самым предлагая пользователям больше полезных возможностей.

    1-3-1.jpg?x44442

    Функция перемещения по тексту на устройствах без 3D Touch

    На iPhone 5s, iPhone SE и iPhone 6/6 Plus добавлена функция, позволяющая быстро и удобно перемещаться по тексту путем зажатия на стандартной клавиатуре. До iOS 12 такая опция была только у владельцев iPhone с поддержкой 3D Touch.

    iOS-12-dobavila-novyy-sposob-udobnogo-vy
    К содержанию.

    Ещё 39 крупных нововведений

    Обновленное приложение Apple Books

    В iOS 12 нет приложения iBooks. Apple провела его ребрендинг и назвала его Apple Books, а в российской версии iOS 12 его имя еще проще — «Книги». В приложении «Книги» полностью новый магазин книг, в котором, к сожалению, так и не появилось книг на русском языке. В связи с этим, ключевым нововведением приложения «Книги» стоит считать новую вкладку «Читаю сейчас», на которой располагаются начатые пользователем книги.

    6-3.png?x44442

    Новые настройки для приложения «Книги»

    В параметрах приложения «Книги» появилось несколько новых пунктов. В частности, пользователи могут скрыть весь онлайн-контент из приложения (будет особенно полезно пользователям из СНГ), указать настройки синхронизации книг между устройствами и многое другое.

    IMG_0184-1-1.png?x44442

    Переработанное приложение «Акции»

    Классическое приложение «Акции», наконец, получило обновление. В iOS 12 разработчики Apple полностью изменили дизайн «Акций» и сделали интерфейс более удобным в использовании. Кроме этого, в приложении стали появляться новости, связанные с котировками. Примечательно, что новости появляются и на русском языке, даже несмотря на то, что приложение News поддерживает только английский язык.

    2-3-1.png?x44442

    Больше контента в App Store

    Редакторы магазина приложений App Store ежедневно публикуют различные статьи и подборки приложений и игр, которые появляются на вкладке «Сегодня». В iOS 12 таких подборок и статей стало больше. На вкладке «Сегодня» появился новый раздел «Вам могут понравиться эти статьи». В нем собираются лучшие публикации предыдущих дней, которые вы пропустили.

    5123512351-1.png?x44442

    Новые функции в «Пункте управления»

    Начиная с iOS 11 «Пункт управления» на iPhone и iPad можно настраивать, добавляя в него наиболее нужные функции для быстрого доступа. В iOS 12 число функций, которые можно добавить в «Пункт управления» увеличилось. Быстрый доступ стало возможным получить к функциям «Слух» и «Сканирования QR-кода». Отметим, что по умолчанию они не добавлены в «Пункт управления».

    IMG_0175-1.png?x44442

    Иконки веб-страниц в браузере Safari

    В iOS 12 браузер Safari не получил больших видимых изменений, лишь одно небольшое. В настройках Safari появилась опция, позволяющая включить отображение иконок веб-сайтов в браузере. Хоть улучшение и незначительное, но она точно делает опыт использования Safari гораздо приятнее.

    Kak-otobrazit-ikonki-veb-saytov-vo-vklad

    Серфинг в Safari защищен от отслеживания

    Внешне Safari в iOS 12 практически не изменился, а вот больших внутренних улучшений в браузере сразу два. Начнем с интегрированной в Safari системы защиты пользователей от сбора данных веб-сайтами. Новая технология Apple отслеживает факт запросов онлайн-ресурсами данных о вашем устройстве и операторе сотовой связи и запрещает передачу этой информации. Благодаря этому веб-сайты перестают получать возможность показывать вам таргетированную рекламу.

    Запрет на сбор данных в Safari

    Кроме этого, Safari в iOS 12 «научился» запрещать различным нестандартным компонентам веб-сайтов собирать данные о пользователях. Браузер исключает сбор данных даже такими компонентами, как кнопки «Поделиться» и виджеты для комментариев, которые в «тихом» режиме определяют какие социальные сети использует владелец iPhone или iPad.

    Отображение всех вкладок в Safari на iPhone X

    Интерфейс Safari несколько изменился в лучшую сторону только на iPhone X. При серфинге в альбомной ориентации на iPhone X в Safari стали отображаться все открытые вкладки, что повышает удобство при переключении между страницами. Apple перенесла это решение на iPhone X с планшетов iPad.

    51151-1.png?x44442

    Автозаполнение паролей из сторонних приложений

    Штатный менеджер паролей iOS 12 получил поддержку сторонних приложений, позволяющих хранить пароли, например, LastPass или 1Password. Если вы храните пароли для различных учетных записей в таких приложениях, то iOS 12 будет предлагать быструю авторизацию с их помощью путем нажатия буквально одной кнопки, как это происходит с паролями, содержащимися в стандартном менеджере.

    iOS 12 предупреждает об одинаковых паролях

    Сам стандартный менеджер паролей iOS 12 тоже был улучшен. Он получил возможность сравнивать сохраненные пароли между собой и выдавать предупреждения в случае, если обнаружены одинаковые пароли. iOS 12 не надоедает такими предупреждениями, «тихо» показывая их в меню «Учетные записи и пароли» в настройках iPhone или iPad.

    IMG_0161-1.png?x44442

    Поддержка «Google Карт» и Waze в CarPlay

    Для пользователей автомобильной функции CarPlay в iOS 12 реализовано очень приятное нововведение. Функция CarPlay получила поддержку картографических сервисов «Google Карты» и Waze. Это означает, что пользователи CarPlay смогут прокладывать маршруты и знакомиться с ситуацией на дорогах при помощи куда более адаптированных для стран СНГ сервисов. В особенности это касается «Google Карт». Прежде CarPlay поддерживал только «Карты» от Apple.

    Ускоренная анимация Face ID

    Разблокировка iPhone X с помощью функции сканирования лица Face ID стала еще быстрее. Apple смогла добиться этого за счет уменьшения длительности действия анимации ровно в два раза.

    В Face ID можно зарегистрировать второе лицо

    Еще одним улучшением Face ID в iOS 12 стала возможность зарегистрировать свое лицо повторно. Новая функция называется «Альтернативный внешний вид». Apple создала ее для того, чтобы пользователи, которые часто носят очки, шляпы, парики или какие-либо другие аксессуары могли «познакомить» Face ID с их альтернативным внешним видом. Нововведение направлено на повышение стабильности работы Face ID. Примечательно, что регистрировать именно свое лицо повторно необязательно. Зарегистрировать свое лицо в iPhone X может любой другой человек, например член семьи, который тоже получит возможность снимать блокировку со смартфона.

    2-2-2.png?x44442

    Повторное сканирование лица в случае неудачного распознавания

    Впрочем, главное улучшение Face ID в iOS 12 — опция быстрого повторного сканирования лица в случае неудачного определения. Для выполнения повторного сканирования достаточно просто смахнуть вверх по экрану. Эта простая функция является невероятно полезной, так как в iOS 11 для повторного сканирования приходится либо поднимать и опускать iPhone X, либо дважды нажимать кнопку питания, что совершенно неудобно.

    1-3-2.png?x44442

    Быстрое закрытие приложений на iPhone X

    В iOS 12 на iPhone X было доработано меню переключения между приложениями. В нем стало возможным закрывать приложения обычным свайпом вверх, без выполнения каких-либо других действий. В iOS 11 же для закрытия приложения на iPhone X было необходимо первоначально зажать на миниатюре в течение секунды. Apple реализовала это улучшение в ответ на многочисленные запросы пользователей.

    100-glavnykh-novovvedeniy-iOS-12-obzor-1

    Увеличенный шрифт в строке меню на iPhone X

    Apple прислушалась к пользователям iPhone X и по поводу слишком мелкого текста и иконок в строке меню. В iOS 12 шрифт стал больше, разглядеть его не составляет труда.

    IMG_0177-1-1.png?x44442

    Обновленные иконки в «Настройках»

    Многие иконки в приложении «Настройки» были обновлены, чаще всего едва заметно. Кроме этого, в «Настройках» появились два новых раздела приложения «Рулетка» и функции «Экранное время», которые имеют новые иконки.

    IMG_0178-1.png?x44442

    Переработанное приложение «Диктофон»

    Приложение «Диктофон» не получало никаких изменений в течение нескольких лет, но в iOS 12 компания Apple все-таки решила уделить ему внимание. Обновленный «Диктофон» имеет полностью новую иконку и интерфейс, которые отличается своей простотой. Кроме этого, в приложении изменилась система воспроизведения — пользователи могут проматывать записи на 15 секунд вперед или назад. Также сохраняемые записи стали получать новые имена, основанные на текущем местоположении. Прежде в качестве имени записям назначалась текущая дата.

    5315151-1.png?x44442

    Новые настройки «Диктофона»

    У приложения «Диктофон» появились и новые настройки. В параметрах утилиты можно выбрать сохранение записей с использованием сжатия ACC или без сжатия вовсе.

    IMG_0181-1.png?x44442

    Сохранение аудиозаписей в iCloud

    В iOS 12 аудиозаписи из диктофона можно синхронизировать с облачным хранилищем iCloud, что позволит быстро и удобно создавать резервные копии важных материалов. Отметим, что резервное копирование аудиозаписей в iCloud по умолчанию включено на всех iPhone и iPad под управлением iOS 12.

    Функция автоматического обновления iOS

    Apple до такой степени уверена в качестве iOS 12, что реализовала в прошивке функцию автоматического обновления. Она располагается в меню «Обновление ПО». Если активировать переключатель «Автообновление», то все новые версии iOS будут устанавливаться на устройство автоматически, без ведома пользователям. Происходить это, разумеется, будет ночью, когда iPhone или iPad не используется.iOS-12-pozvolyaet-obnovlyat-iPhone-i-iPa

    Улучшенный режим управления одной рукой

    Долгожданное изменение произошло в режиме «Удобный доступ», который имеется на всех iPhone с большими дисплеями. В iOS 12 в режиме управления одной рукой стали правильным образом приходить уведомления. Раньше они появлялись на самом верху дисплея, что делало затруднительным дотянуться до них при использовании смартфона одной рукой. В iOS 12 же облачка с уведомлениями появляются наверху уменьшенной рабочей области примерно посередине экрана.

    1-5-1-1.png?x44442

    Новый интерфейс страниц артистов в Apple Music

    Страницы артистов в музыкальном стриминговом сервисе Apple Music были переработаны. Изображения стали занимать почти половину экрана, а под ними появилась кнопка Play, позволяющая быстро начать воспроизведение лучших песен выбранного исполнителя.

    51235151-1.png?x44442

    Поиск песен по словам

    Другим интересным улучшением в Apple Music является возможность поиска песен по словам. Услышали где-то песню, но не успели распознавать ее с помощью Shazam? Для ее нахождения в iOS 12 достаточно ввести отрывок из текста!

    Передача паролей по AirDrop

    Функция AirPods «научилась» передавать пароли на другие устройства Apple. Для отправки пароля через AirDrop необходимо перейти в меню «Учетные записи и пароли» и выделить нужный пароль. Во всплывающем окне появится пункт AirDrop, по нажатию на который и возможна быстрая отправка пароля на другое устройство Apple без дополнительных средств.

    IMG_0180-1.png?x44442

    Отображение погоды при пробуждении

    Функция «Режим сна», которая доступна в приложении «Часы», в iOS 12 приветствует пользователя при срабатывании будильника и показывает текущую погоду (при постоянно включенной геолокации приложения «Погода»).

    Новые инструменты для рисования в приложении «Заметки»

    В приложении «Заметки» добавлены гибкие настройки для инструментов рисования. У пользователей появилась возможность выбирать толщину карандаша с помощью точного ползунка.

    IMG_0182-1.png?x44442

    А доступных для рисования цветов стало значительно больше.

    IMG_0183-1.png?x44442

    Новый эффект Taptic Engine на iPhone 7 и iPhone 7 Plus

    При нажатии на кнопку спуска затвора в приложении «Камера» на iPhone 7 и iPhone 7 Plus срабатывает новая реакция движка Taptic Engine. Приятное тактильное ощущение словно подтверждает успешное нажатие кнопки. Прежде такой эффект был только на iPhone 8, iPhone 8 Plus и iPhone X.

    Новые жесты на iPad

    На всех моделях iPad изменились жесты открытия «Центра уведомлений» и «Пункта управления». Apple перенесла их на iPad с iPhone X. Для открытия «Пункта управления» на iPad с iOS 12 на борту необходимо смахнуть от правого верхнего угла вниз, а для запуска «Центра уведомлений» — от левого верхнего угла вниз.

    3-2-1.gif?x44442

    Новый способ снятия блокировки с iPad

    Жест для снятия блокировки также перекочевал с iPhone X на iPad. Разблокировка планшетов Apple стала возможна по свайпу вверх от нижнего края экрана.

    Новые приложения на iPad

    iOS 12 принесла на iPad сразу три новых приложения. На планшетах Apple появились: «Диктофон», «Акции» и News, которое на текущий момент недоступно в странах СНГ.

    IMG_0008-1.png?x44442

    Обновленное верхнее меню на iPad

    Дата и время на iPad под управлением iOS 12 были перенесены на самый левый край строки верхнего меню. Согласно предположениям экспертов, это было сделано с учетом запланированных к запуску осенью iPad с безрамочными дисплеями в стиле iPhone X.

    IMG_0007-1.png?x44442

    Стандартный плеер iOS не заменяет сторонние в Safari

    При воспроизведении видео на веб-сайтах в Safari в iOS 12 больше не используется стандартный плеер iOS. Если веб-ресурс использует собственный плеер, то именно он и будет доступен пользователям.

    1-2-1.jpg?x44442

    Диктовка в сторонних клавиатурах

    Apple долгое время не разрешала создателям сторонних клавиатур добавлять в свои приложения функцию диктовки. В iOS 12 компания решила сжалиться над ними и теперь разработчики могут оснастить свои клавиатуры поддержкой диктовки.

    Темный фон меню воспроизведения музыки — реальный намек на полноценную ночную тему

    Это нововведение является незначительным, но не отметить его нельзя. Меню управления музыкой в «Пункте управления» iOS 12 имеет затемненный фон. Почему же такое мелкое изменение обязательно стоит выделить?

    V-iOS-12-poyavitsya-temnaya-tema-interfe

    Дело в том, что уже на следующий день после презентации iOS 12 компания Apple выдала сторонним разработчикам инструкции о том, как адаптировать свои приложения под темный режим интерфейса. Официальные инструкции, которые при этом были разосланы всем разработчикам, не могли появиться просто так. Поэтому эксперты считают, что в iOS 12 все-таки появится полноценный темный режим интерфейса, столь долгожданный пользователями. И затемненный фон меню управления воспроизведением музыкой является тому дополнительным намеком.

    Использование AirPods в качестве микрофона

    iOS 12 принесла новую функцию «Live-прослушивание» для фирменных беспроводных наушников AirPods. Она позволяет использовать микрофоны в наушниках для записи и сохранения. В первую очередь функция поможет людям, которые используют AirPods, как слуховой аппарат.

    Новая система защиты от взлома

    В начале 2018 года стало известно, что хакеры научились взламывать пароли на iPhone и iPad при помощи специального устройства, которое выполняет методичный перебор паролей. Хакеры начали сотрудничать с властями различных стран, предлагая им взлом необходимых устройств. Apple до сих пор не смогла узнать, как именно ее iPhone и iPad взламываются, но способ противостоять хакерам все же нашла. В iOS 12 компания начала блокировать порт Lightning в течение часа после последней разблокировки. В заблокированном состоянии порт Lightning на iPhone и iPad позволяет только заряжать устройство. Для успешного подключения смартфона или планшета к компьютеру с гаджета обязательно необходимо снять блокировку.

    Новые обои

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

    Skachat-oficialnye-oboi-iz-iOS-12-dlya-i

    К содержанию.

    Как установить iOS 12 прямо сейчас

    Как установить iOS 12 через Wi-Fi

    Для установки iOS 12 на iPhone, iPad или iPod touch через Wi-Fi необходимо перейти с мобильного устройства в меню «Настройки» → «Основные» → «Обновление ПО» и начать загрузку обновления. Установка iOS 12 через Wi-Fi возможна только при условии, что ваше устройство имеет заряд более 50% или подключено к зарядному устройству. После загрузки прошивки в том же меню «Обновление ПО» появится кнопка «Установить», нажатие которой и позволяет обновить iPhone, iPad или iPod touch до iOS 12.

    Kak-ustanovit-iOS-12-cherez-Wi-Fi-1.png?

    Установка iOS 12 посредством Wi-Fi имеет свои плюсы и минусы. Основным преимуществом использования этого способа является его простота. От пользователя не требуется подключать устройство к компьютеру и работать с утилитой iTunes.

    Однако у установки «по воздуху» есть и минусы. В первую очередь, прошивка загружается, а после распаковывается прямо на устройстве. Часть временных файлов после установки iOS остаются в памяти iPhone, iPad или iPod touch. Причем выполнить их целенаправленную очистку возможности нет. Такие временные файлы и образуют категорию «Другое», которая может занимать десятки гигабайт (как очистить).

    Но главное, в результате обновления iOS через Wi-Fi прошивка может устанавливаться со сбоями. Многолетний опыт показывает, что из-за установки новых крупных версий iOS по «воздуху» проявляются различные проблемы, например, сильно снижается время автономной работы. Конечно, так происходит не всегда, но куда более надежно обновлять iOS через iTunes.

    К содержанию.

    Как установить iOS 12 через iTunes

    Установка iOS 12 через iTunes, несмотря на заблуждения многих пользователей, не отличается сложностью.

    Шаг 1. Подключите iPhone, iPad или iPod touch к компьютеру и запустите iTunes. Если на вашем компьютере не установлен iTunes, то загрузить актуальную версию утилиты можно по этой ссылке.

    Шаг 2. Выберите свое устройство в окне iTunes.

    Kak-ustanovit-iOS-12-cherez-Wi-Fi-2.png?

    Шаг 3. Нажмите на кнопку «Обновить» и подтвердите начало загрузки и установки новой версии iOS.

    Kak-ustanovit-iOS-12-cherez-Wi-Fi-3.png?

    Сразу после этого iTunes начнет загружать прошивку, а после загрузки запустится процесс установки iOS на мобильное устройство. Главный плюс такой установки iOS 12 заключается в том, что в своем изначальном виде прошивка находится на вашем компьютере. iTunes выполняет ее распаковку и загружает на iPhone, iPad и iPod touch только нужные для установки файлы. Благодаря этому на мобильном гаджете не остается никакого «мусора» после установки. Отзывы пользователей подтверждают, что обновление устройств Apple через iTunes является более надежным по сравнению с апдейтом через Wi-Fi.

    К содержанию.

    Отзывы о iOS 12

    «Почему она столь чертовски быстрая? Финальная версия iOS 11 теперь ощущается бета-версией! Очень классное обновление, Apple наконец-то взялась за дело!», — warlockx77.

    «Увеличенная скорость работы — это именно то, что я и хотел в новой версии iOS, а вовсе не новые функции. Я очень рад, что мой древний iPad Air по-настоящему ожил и им стало возможно пользоваться с комфортом и приятными ощущениями», — Flawlesscazzazz.

    «Скорость работы iOS 12 серьезно впечатляет! У меня есть iPad mini 2, которым я в последнее время просто перестал пользоваться. Он казался очень медленным и я даже мысленно смирился, что устройство «умерло». Почитав первые отзывы об iOS 12 я все-таки решил установить на старый планшет прошивку и был поражен! iPad mini 2 стал словно новым! Приложения запускаются гораздо быстрее, в системе никаких тормозов (практически) и общие впечатления только положительные. Спасибо, Apple!, — thatsmysalad.

    «Достал пылящийся на полке 5s и установил на него iOS 12 сразу после выхода. До сих пор поражаюсь как после iOS 11 стала быстро и комфортно работать система! Я не проводил тесты, не запускал оценки скорости, но ощущения от iOS 12 совершенно другие. На iOS 11 iPhone 5s явно тормозил и не всегда справлялся — ощущение было ужасным, как будто смартфон второго сорта, хотя и от Apple. А вот iOS 12 на 5s — полный комфорт!», — czf.

    «Скорость iOS 12 — топ! iPhone 6 восстал из мертвых  Порадовали и некоторые функции, больше всего новая статистика аккумулятора. Теперь реально можно посмотреть какие приложения и когда пожирали батарею. 100% буду время от времени просматривать и избавляться от прожорливых приложений. Так и время автономной работы можно будет нехило увеличить! В общем, доволен iOS 12 полностью», — Knutii.

    Дата выхода iOS 12

    iOS 12 вышла 17 сентября 2018 года.



  • Блоги

    • CentOS

      • 13
        записей
      • 1257
        комментариев
      • 17368
        просмотров
    • web-администрирование

      • 3
        записи
      • 0
        комментариев
      • 257
        просмотров
    • Mikrotik

      • 11
        записей
      • 225
        комментариев
      • 21973
        просмотра
    • LAN

      • 5
        записей
      • 0
        комментариев
      • 1171
        просмотр
    • Windows

      • 17
        записей
      • 12
        комментариев
      • 962
        просмотра
    • Asterisk

      • 2
        записи
      • 0
        комментариев
      • 91
        просмотр
    • Разное

      • 1
        запись
      • 0
        комментариев
      • 332
        просмотра
    • 1C

      • 1
        запись
      • 0
        комментариев
      • 240
        просмотров
    • Linux

      • 2
        записи
      • 0
        комментариев
      • 264
        просмотра
    • iOS

      • 1
        запись
      • 0
        комментариев
      • 274
        просмотра
×