Страница 1 из 1

Asterisk 16 PJSIP Multiple IP Addresses

Добавлено: 23 апр 2020, 20:21
lext55
Здравствуйте!

Имеется Asterisk 16 в виртуальной машине, драйвер канала используется PJSIP . Операционная система debian 10. Asterisk устанавливался из репозиториев (apt install asterisk). Управляется с помощью правки конфигурационных файлов.

Код: Выделить всё

ast1*CLI> core show version 
Asterisk 16.2.1~dfsg-1+deb10u1 built by nobody @ buildd.debian.org on a unknown running Linux on 2019-08-20 20:31:36 UTC
На виртуальной машине есть несколько сетевых карт
192.168.129.33/24 – внутренняя сеть , подключен один телефон IP телефон, default route
10.16.6.2/30 – стык с оператором №1 , авторизация по IP адресу
10.26.2.2/30 – стык с оператором №2 , авторизация по IP адресу

Код: Выделить всё

root@ast1:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether c2:cc:da:c8:6a:24 brd ff:ff:ff:ff:ff:ff
    inet 192.168.129.33/24 brd 192.168.129.255 scope global ens18
       valid_lft forever preferred_lft forever
3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 3e:1f:7c:7e:a6:a2 brd ff:ff:ff:ff:ff:ff
    inet 10.16.6.2/30 brd 10.16.6.3 scope global ens19
       valid_lft forever preferred_lft forever
4: ens20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 7a:90:cd:94:28:fb brd ff:ff:ff:ff:ff:ff
    inet 10.26.2.2/30 brd 10.26.2.3 scope global ens20
       valid_lft forever preferred_lft forever
Есть 2 проблемы , скорее всего причина которых одинаковая.
  • Проблема в следущем , на запросы OPTIONS, которые мне посылает вышестоящий оператор , мой Asterisk отвечает не с той сетевой карты. Скриншот pcap прилагаю . Проверил все поля внимательно – сам пакет формируется верно , но Asterisk его отправляет не с той сетевой карты.
  • Проблема при исходящем звонке . Неверно формируются поля VIA и Contact . При этом поля FROM и TO формируются правильно .
    Тут проблема уже немного другая, пакеты отправляются и принимаются с правильного IP адреса , но внутри пакета поля VIA и Contact (IP адрес и порт ) подставляются с другого сетевого интерфейса . Именно эти поля не влияют ни на что , звук работает . Но в конце разговора финальный пакет 200 ОК пытается прилететь через маршут по умолчанию (через другую сетевую карту ) , и естественно не доходит .
pcap-INVITE
pcap-INVITE
CALL
CALL
OPTIONS
OPTIONS
Официальную документацию прочитал уже несколько раз.
https://wiki.asterisk.org/wiki/display/ ... _res_pjsip
По идее я должен в секции endpoint задать transport , и весь исходящий SIP трафик должен пойти через нужный интерфейс , но увы не работает так как нужно .
pjsip.conf

Код: Выделить всё

[transport-provider1-local-udp]
type=transport
protocol=udp
bind=10.26.2.2:5060
local_net=127.0.0.0/8
local_net=10.26.2.0/30
symmetric_transport=yes
tos=cs3
cos=3
[aor-provider1-local]
type=aor
contact=sip:10.26.2.1:5060
[endpoint-provider1-local]
type=endpoint
transport=transport-provider1-local-udp
context=provider1-local-in
disallow=all
allow=alaw
allow=ulaw
allow=g729
aors=aor-provider1-local
from_domain=10.26.2.2
media_address=10.26.2.2
bind_rtp_to_media_address=yes
direct_media=no
inband_progress=yes
user_eq_phone=yes
force_rport=no
rtp_symmetric=no
rewrite_contact=no
100rel=no
tos_audio=ef
cos_audio=5
[identify-provider1-local]
type=identify
endpoint=endpoint-provider1-local
match=10.26.2.1 ;SIP&RTP
Кто-нибудь настраивал сразу несколько транспортов, на нескольких сетевых интерфейсах ? У Вас все номарльно работает ?

Re: Asterisk 16 PJSIP Multiple IP Addresses

Добавлено: 23 апр 2020, 22:02
sasa
ну и что ?
в транзакции апи адреса не участвуют
суть проблемы не понятна

Re: Asterisk 16 PJSIP Multiple IP Addresses

Добавлено: 24 апр 2020, 16:46
lext55
sasa писал(а):суть проблемы не понятна
Суть проблемы следующая: я пытаюсь повторить настройку нескольких транспортов , на разных сетевых интерфейсах .
Как описано в инструкции https://wiki.asterisk.org/wiki/display/ ... +Selection раздел IPv4 Only (Multiple Interfaces) .
В целом - работает.
Но:
1. ответ за запрос OPTIONS Asterisk отравляет не с той сетевой карты ( скришоты pcap выше ) . Asterisk отправляет ответ всегда с первой сетевой карты.
2. есть ошибки в формировании запроса INVITE . Поля VIA и Contact берут значения IP адресов не из секции transport , а с первой сетевой карты.

Re: Asterisk 16 PJSIP Multiple IP Addresses

Добавлено: 24 апр 2020, 18:29
ded
У вас оба провайдера запрашивают qualify? Думаю нет.

1) сделайте интерфейс ens18 ответчиком на эти OPTIONS, укажите ему адрес 10.16.6.2/30 а ens19 - 192.168.129.33/24
и забудьте про проблему.

2) пробуйте ещё как нить сделать рокировку, возможно адреса указывать через алиасы основного интерфейса
ens18:0
ens18:1

3) А что с таблицей маршрутизации при этих раскладах? Если там хитро наверчено, но стоит только один default route via 192.168.129.1 то ответы OPTIONS будут точно уходить с 192.168.129.33.
Там бы по хорошему провайдерские транки пустить через отдельные VLANs.

Re: Asterisk 16 PJSIP Multiple IP Addresses

Добавлено: 24 апр 2020, 21:54
sasa
Суть проблемы следующая:
это не проблемы
это ваши взгляды
проблемы это когда что то не работает
так вот вы так и не описали что не работает
вы принялись разбирать протокол, не разбиравшись в том как он работает

Re: Asterisk 16 PJSIP Multiple IP Addresses

Добавлено: 24 май 2020, 23:03
lext55
Коллеги, итак решение .
sasa писал(а):
ded писал(а):
Причина всему - мое стремление к идеалу =) . На странице https://wiki.asterisk.org/wiki/display/ ... +Selection я вычитал , что при использовании нескольких интерфейсов можно вешать на каждый интерфейс по отдельному транспорту
а также гарантирует, что сообщения SIP содержат правильную информацию. (and also ensures that the SIP messages contain the right information.)
На самом деле это все только ломает и наооброт добавляет ошибок на которые я жаловался выше.
Нужно объявить транспорт сразу для всех интерфейсов и все будет работать как нужно, все заголовки на всех интерфейсах будут правильные.

Итак правильный рабочий конфиг:

Код: Выделить всё

[transport-all-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
local_net=192.168.129.0/24 ; Network on 1-st network card
local_net=192.168.64.0/24  ; Network on 1-st network card
local_net=192.168.77.0/24  ; Network on 1-st network card 
local_net=10.16.2.0/30 ; Network on 2-st network card  (Provider №1)
local_net=10.26.2.0/30  ; Network on 3-st network card (Provider №2)
local_net=172.27.240.192/30  ; Network on 2-st network card  (Provider №1)
allow_reload=yes
symmetric_transport=yes
tos=cs3
cos=3
НЕ ПРАВИЛЬНЫЙ КОНФИГ

Код: Выделить всё

; Transport for local clients
[transport-local-service-network-udp]
type=transport
protocol=udp
bind=192.168.129.33:5060
domain=192.168.129.33
local_net=192.168.129.0/24
local_net=192.168.64.0/24
local_net=192.168.77.0/24
symmetric_transport=yes
tos=cs3
cos=3

; Transport for provider №1
[transport-provider1-fmn-udp]
type=transport
protocol=udp
bind=10.16.6.2:5060
domain=10.16.6.2
local_net=10.16.2.0/30
local_net=172.27.240.192/30
symmetric_transport=yes
tos=cs3
cos=3

;Transport for provider №2 
[transport-provider2-local-udp]
type=transport
protocol=udp
bind=10.26.2.2:5060
local_net=10.26.2.0/30
symmetric_transport=yes
tos=cs3
cos=3
Вот ссылка где я обсуждаю все тоже на коммунити asterisk https://community.asterisk.org/t/asteri ... ace/83774/