У сервера Elastix два интерфейса eth0 (192.168.1.10) и eth1 (10.1.1.10). Один смотрит в локалку(+через шлюз в этой же подсети смотрит в Интернет), другой смотрит в корпоративную сеть. В одной подсети(локальной), с сервером Elastix, софтфон PhonerLite. В удаленном офисе стоит D-Link 150s. При звонке из/в удаленный офис звук слышат только в удаленном офисе, в софтфоне тишина. NAT не используется.

Поиск неисправности начался с просмотра консоли Asterisk. В консоли сервера вводим:

asterisk -r

Затем в консоли asterisk вводим:

rtp set debug ip 10.1.1.10

Где 10.1.1.10 — IP-адрес сервера Elastix.

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

Для верности проверил это утверждение командой в linux-консоли:

tcpdump -i eth1

Попробовал позвонить и, снова, получил «картину», которая подтвердила то, что пакеты из удаленного филиала до интерфейса eth0(10.1.1.10) не доходят.

Вот, что вывела команда:

09:10:27.518244 IP 10.1.1.10.18122 > 10.1.1.111.10028: UDP, length 172
09:10:27.537689 IP 10.1.1.10.18122 > 10.1.1.111.10028: UDP, length 172
09:10:27.558299 IP 10.1.1.10.18122 > 10.1.1.111.10028: UDP, length 172
09:10:27.577733 IP 10.1.1.10.18122 > 10.1.1.111.10028: UDP, length 172
09:10:27.598595 IP 10.1.1.10.18122 > 10.1.1.111.10028: UDP, length 172

10.1.1.111 — IP-адрес телефонного аппарата в филиале.

UDP-пакеты от нас уходят, но к нам не приходят.

Потом я проверил нормально ли зарегистрировался телефон филиала на сервере:

Снова вошел в консоль asterisk:

asterisk -r

Затем ввёл команду:

sip show peers

В которой нашел строчку с телефоном филиала:

 

Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status       Description
130/130                 10.1.1.111                                 D      No         No     A    5060     OK (4 ms)

Где 130 — внутренний номер.

Статус — ОК.

Через какое-то время, после смены многоисленных настроек телефона и прочих танцев с бубном меня озарило:

Нужно проверить параметр externip в файле sip_nat.conf и оказалось, что этой директиве присвоен совсем не тот IP-адрес, который нужно.

Я исправил его на:

externip=10.1.1.10

И всё заработало.

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