Главная
Главная Руководства Asterisk › Asterisk 18, настройка



Автор:

Статья опубликована: 2021-11-28 12:31:35
Последние правки: 2022-03-23 17:32:11

Настройка основных параметров, добавление абонентов, консоль. PJSIP.

  • Исходные данные
    # uname -sr
    FreeBSD 12.2-RELEASE
    # pkg info | grep asterisk
    asterisk18-18.8.0_1            Open Source PBX and telephony toolkit
    
    Конфигурация, которая рассматривается в этой статье:

    • сервер, FreeBSD, Asterisk 18, в локалке за роутером
      внутренний ip: 192.168.1.1
      внешний ip на роутере: 8.8.8.8 (В ДАННОМ СЛУЧАЕ ЭТО НЕ IP ГУГЛЯ, А СФЕРИЧЕСКИЙ ВНЕШНИЙ IP В ВАКУУМЕ, ИСКЛЮЧИТЕЛЬНО ДЛЯ ПРИМЕРА!)
    • 100 - абонент в локальной сети
      аутентификация по логину-паролю
      постоянный ip: 192.168.1.100
    • 101 - абонент в локальной сети
      аутентификация по логину-паролю
      динамический ip из 192.168.1.0/24
    • 102 - абонент в локальной сети
      без аутентификации (ПЛОХАЯ ИДЕЯ, но, да, бывает и такое)
      постоянный ip: 192.168.2.102
    • 200 - абонент НЕ в локальной сети, у себя сидит за NAT
      аутентификация по логину-паролю



  • /usr/local/etc/asterisk/acl.conf

    Файл с Access Control Lists. В него запишем свои разрешения для абонентов. Названия ACL потом запишем в конфигурации для абонентских устройств.
    [100]
    deny = 0.0.0.0/0.0.0.0
    permit = 192.168.1.100
    
    [102]
    deny = 0.0.0.0/0.0.0.0
    permit = 192.168.2.102
    
    [localnet]
    deny = 0.0.0.0/0.0.0.0
    permit = 192.168.1.0/24
    permit = 192.168.2.0/24
    
    [localnet1]
    deny = 0.0.0.0/0.0.0.0
    permit = 192.168.1.0/24
    
    [localnet2]
    deny = 0.0.0.0/0.0.0.0
    permit = 192.168.2.0/24
    
    [100] - специально для абонента 100 с постоянным ip 192.168.1.100. Ему разрешено соединяться только с этого ip
    [102] - специально для абонента 102 у него нет логина-пароля, но есть постоянный ip 192.168.2.102. Ему разрешено соединяться только с этого ip
    [homenet] - разрешено соединяться из подсетей 192.168.1.0/24 и 192.168.2.0/24
    [homenet1] - разрешено соединяться из подсети 192.168.1.0/24
    [homenet2] - разрешено соединяться из подсети 192.168.2.0/24



  • /usr/local/etc/asterisk/pjsip.conf

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

    TRANSPORT
    [transport-udp-nat]
    type = transport
    protocol = udp
    ;bind = 0.0.0.0:5060
    bind = 192.168.1.1:5060
    local_net = 192.168.1.0/24
    local_net = 192.168.2.0/24
    external_media_address = 8.8.8.8
    external_signaling_address = 8.8.8.8
    
    Наш транспорт, висит на ip 192.168.1.1, порт 5060 (это порт по умолчанию и его можно не указывать). Так как наш астериск прячется за роутером, то указываем локальные подсети (local_net) и external_* - адреса, которые отдаются "внешним" клиентам, ip которых не находятся в диапазонах подсетей, заданных в local_net.

    Сначала сделаем ENDPOINT шаблоны:
    [endpoint-basic](!)
    type = endpoint
    language = ru
    context = from-internal
    dtmf_mode = rfc4733
    disallow = all
    allow = ulaw
    allow = alaw
    allow = gsm
    allow = g723
    allow = g729
    
    [endpoint-internal](!,endpoint-basic)
    transport = transport-udp-nat
    
    [endpoint-nat](!,endpoint-basic)
    transport = transport-udp-nat
    media_address = 8.8.8.8
    direct_media = no
    rtp_symmetric = yes
    force_rport = yes
    rewrite_contact = yes
    
    AOR - Address of Record. В них указывается параметры для ENDPOINT. Без AOR ENDPOINT не работают. Также делаем шаблонами:
    [aor-basic](!)
    type = aor
    max_contacts = 1
    remove_existing = yes
    qualify_frequency = 60
    qualify_timeout = 300
    
    ; шаблон для SIP-клиента на мобильном телефоне, увеличенный тайм-аут
    [aor-cell](!,aor-basic)
    qualify_timeout = 2000
    
    Шаблон для аутентификации по логину и паролю:
    [auth-userpass](!)
    type = auth
    auth_type = userpas
    
    Добавляем ENDPOINT для абонентов:
    [100](endpoint-internal)
    callerid = Number 100
    acl = 100
    aors = 100
    auth = auth100
    
    [100](aor-basic)
    
    [auth100](auth-userpass)
    username = 100
    password = password
    
    ;===
    
    [101](endpoint-internal)
    callerid = Number 101
    acl = localnet1
    aors = 101
    auth = auth101
    
    [101](aor-basic)
    
    [auth101](auth-userpass)
    username = 101
    password = password
    
    ;===
    
    [102](endpoint-internal)
    callerid = Number 102
    acl = 102
    aors = 102
    
    [102](aor-basic)
    
    ;===
    
    [200](endpoint-nat)
    callerid = Number 200
    aors = 200
    auth = auth200
    
    [200](aor-basic)
    
    [auth200](auth-userpass)
    username = 200
    password = password
    



  • /usr/local/etc/asterisk/extensions.conf
    Помните строчку context = from-internal в шаблоне [endpoint-basic]? Это как раз секция из файла extensions.conf, описывает куда и как можно звонить.
    [from-internal]
    exten => _1XX,1,Dial(PJSIP/${EXTEN},60)
    exten => _2XX,1,Dial(PJSIP/${EXTEN},60)
    
    _1XX - номера из диапазона 100 - 199,
    _2XX - номера из диапазона 200 - 299

    Вроде бы все, простейшая настройка для внутренних звонков, остается только перезапустить asterisk
    # /usr/local/etc/rc.d/asterisk restart
    



  • Консоль
    # asterisk -r
    
    список endpoint's:
    > pjsip show endpoints
    
    список "живых":
    > pjsip show contacts
    
    выход из консоли
    > exit