Имеется FS: Version 1.6.6 -13-d2d0b32 64bit
FS находится за натом, auto-nat работает, порты пробрасываются корректно. Серый адрес 10.10.10.10/30
Имею клиента Alice, находящегося за натом, серый адрес: 10.1.1.1/24
Имею клиента Bob, находящегося за натом, серый адрес: 10.2.2.2/24
Alice (10.1.1.1/24) [NAT] --- [NAT] FS (10.10.10.10/30) [NAT] --- [NAT] Bob (10.2.2.2/24)
Alice calls to FS, чтобы послушать moh или голосовую почту. FS ВСЕГДА корректно определяет NAT, заменяет адрес 10.1.1.1 на реальный внешний, в результате всегда имеем голос.
Alice calls to Bob. В результате, Bob всегда получает аудио, в то время, как Alice - никогда. В логах я прекрасно вижу, что FS меняет адрес Боба 10.2.2.2 на реальный внешний, однако не производит эту процедуру с адресом Alice! В результате голосовые данные пытаются быть отправлены с серого адреса FS 10.10.10.10/30 на серый адрес Alice 10.1.1.1/24. Подтверждено wireshark'ом на маашине с FS, а также на шлюзе по умолчанию, куда прилетает этот трафик для маршрутизации.
Изгуглился вдоль и поперек, перепробовал все, что только можно. Но никак.
UPD
=================
Итак, проблема кажется решенной.
Если коротко: для нормальной работы как
SDP, так и
RTP НЕОБХОДИМО, чтобы Ваш клиент умел
STUN и
ICE. И, естественно, обе эти настройки должны быть активированы.
Либо: активиривать RPORT как для медиа, так и для сигнальных пакетов. Проверено на Zoiper, в котором отсутствует ICE.
Если еще длиннее. Надеюсь, это будет кому-то полезно.
Рассматривая вышеуказанный пример, мы можем видеть, что Alice имеет адрес 10.1.1.1.
Когда она посылает INVITE, то в нем будут вот такие части:
...
c=IN IP 10.1.1.1
...
m=audio 7076 RTP/SAVP 0 8 3 96 101
c=IN IP4 <b>10.1.1.1</b>
...
Обратите внимание на второе вхождение адреса: клиент сообщает где ему ожидать голосовые данные. Конечно же, этот адрес недоступен извне. Необходимо любым способом заставить клиент определить реальный внешний адрес и поставить его здесь, чтобы ожидать голосовые данные снаружи.
Подойдет для этого любая возможность: UPnP, STUN + ICE, перезапись SDP вручную и так далее.