- Исходные данные
# 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
аутентификация по логину-паролю
- сервер, FreeBSD, Asterisk 18, в локалке за роутером
- /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
Статья опубликована: 2021-11-28 12:31:35
Последние правки: 2022-03-23 17:32:11
Настройка основных параметров, добавление абонентов, консоль. PJSIP.