Re: _outboundsip._udp

От: Victor Sudakov <CGatePro_at_mx_ru>
Дата: Thu 23 Feb 2006 - 14:04:15 MSK

Vladimir A. Butenko wrote:
> >>
> >>"Чтобы позволить другим пользователям совершать звонки клиенту,
> >>расположенному за NAT, CGatePro сохраняет открытой дырочку между
> >>клиентом и сервером, периодически отправляя клиенту фиктивные пакеты.
> >>Используйте установочный параметр Ping NATed Clients для указания
> >>частоты, с которой Сервер должен отправлять эти пакеты". /* И фиктивные,
> >>и рабочие пакеты отправляются на 1054, а не на 5060. */
> >
> >Ну. А на 1054 никто не слушает, UA слушает на 5060 (смотрим
> >подчеркнутое), да только NAT откуда об этом узнает.
> >
> >Может я недостаточно ясно формулирую вопрос? Вот UA посылает запрос с
> >адреса 10.0.0.1:4567.
>
> Какой запрос? STUN, REGISTER, любой другой SIP? Не STUN, конечно, а любой SIP.

> 

> >NAT транслирует адрес источника в 212.73.127.1:4567.
> >При этом в его таблице создается запись:
> >
> >Global 212.73.127.1(4567) Local 10.0.0.1(4567)
> >
> >А UA уже забыл про 4567, прописал в Contact или Via порт 5060 и ждет на
> >нем ответа. В таблице NAT про 5060 ничего нет. Будь CGP хоть трижды умный,
> >ответ до UA не дойдет.
> 
> Такие клиенты если еще и есть, то по ним трактор давно проехал. То есть 
> ожидается, естественно, что если клиент сидит за far-end firewall, и 
> оттуда, из-за NAT что-то булькает со своего порта X, то он должен уметь и 
> принять SIP траффик на этом порту X.

Хорошо, если это соблюдается, например как в DNS.

> 
> Заметим, что даже среди сильно кривых клиентов, можно видеть следующее: 
> послал с порта X, прописал в хедерах порт Y, но на X тоже слушает. И, что 
> самое удивительное, это еще и в стандарте прописано:

А вот в стандарте прописано несколько иное, если я конечно правильно истолковал.

>    elsewhere.  The client MUST be prepared to receive responses on any
>    address and port that would be selected by a server based on the
>    procedures described in Section 5 of [4].
> ---
> 
> вот это вот милое "elsewhere" и ссылка на Section 5 в другом RFC говорят 
> Вам о том, что Вы должны уметь получить SIP траффик не только на том IP, с 
> которого посылали, но и на том же порту.

Не-а. Section 5 в RFC3263 говорит другое:

   In these cases, the server examines the value of the sent-by    construction in the topmost Via header. If it contains a numeric IP    address, the server attempts to send the response to that address,    using the transport protocol from the Via header, and the port from    sent-by, if present, else the default for that transport protocol.    The transport protocol in the Via header can indicate "TLS", which    refers to TLS over TCP. When this value is present, the server MUST    use TLS over TCP to send the response.

   If, however, the sent-by field contained a domain name and a port    number, the server queries for A or AAAA records with that name. It    tries to send the response to each element on the resulting list of    IP addresses, using the port from the Via, and the transport protocol    from the Via (again, a value of TLS refers to TLS over TCP). As in    the client processing, the next entry in the list is tried if the one    before it results in a failure.

   If, however, the sent-by field contained a domain name and no port,    the server queries for SRV records at that domain name using the    service identifier "_sips" if the Via transport is "TLS", "_sip"    otherwise, and the transport from the topmost Via header ("TLS"    implies that the transport protocol in the SRV query is TCP). The    resulting list is sorted as described in [2], and the response is    sent to the topmost element on the new list described there. If that    results in a failure, the next entry on the list is tried.

Если обломились послать по порту, указанному в Via, или в Via вообще нет порта, то посылать следует не на тот порт, откуда пришёл запрос, а а) на порт по умолчанию для данного протокола или б) согласно SRV-записи, а она как известно определяет и порт.

Как видите, порт c которого посылали (в Вашем примере порт X) тут никак фигурировать не будет. Если, конечно, Вы покажете в стандарте место, где написано "послать ответ можно на тот порт, с которого пришёл запрос", тогда дело другое, но я не увидел.

-- 
Victor Sudakov,  VAS4-RIPE, VAS47-RIPN
sip:sudakov@sibptus.tomsk.ru
Получено Thu Feb 23 11:04:18 2006

Этот архив был сгенерирован hypermail 2.1.8 : Fri 24 Apr 2015 - 16:14:45 MSK