[SR-Users-ES] ha, kamailio y src addr

Jon Bonilla (Manwe) manwe en aholab.ehu.es
Mar Abr 27 15:55:32 CEST 2010


El Tue, 27 Apr 2010 13:25:42 +0200
Iñaki Baz Castillo <ibc en aliax.net> escribió:

> El día 27 de abril de 2010 11:47, Jon Bonilla <manwe en aholab.ehu.es> escribió:
> > El problema viene cuando tengo que hacer el t_relay. Kamailio intenta
> > mandar el paquete desde la ip real en vez de la virtual y el tm me dice que
> > ni hablar.
> 
> Si en "listen" pones *sólo* las IP's virtuales en las que escucha
> Kamailio nunca se intentará usar una IP real ni ninguna otra que no
> esté en el listen. Así de fácil.
> 
> Por defecto Kamailio usará como interfaz de salida el *mismo* que en
> el que se recibió el request, salvo que lo fuerces con
> "force_socket()" en el script (o algo así, no recuerdo el nombre de la
> función). También cambia en el caso de que sea un request a un usuario
> registrado (tras hacer el lockup()) en cuyo caso se envía el request
> por el socket desde el que se registró el usuario destino.
> 


He hecho algunas pruebas:

Mi kamailio:

eth0: 89.0.0.20 (real)
eth0:0 192.168.0.13 (real)
eth0:1 89.0.0.19 (virtual)
eth0:2 192.168.0.12 (virtual)

Escuchando únicamente localhost y las virtuales:
listen=udp:89.0.0.19:5060
listen=udp:192.168.0.12:5060
listen=udp:127.0.0.1:5060


1: Llamada desde un usuario por la ip pública virtual a otro usuario registrado
en la ip pública virtual. Funciona. Como dices, parece que tras el lookup
escoge el socket correcto.

2: Llamada desde un usuario por la ip pública virtual a un gw de internet con
ip 77.77.77.115: No funciona. El tm me dice:

ERROR: <core> [forward.c:148]: ERROR: get_out_socket: no socket found
ERROR: tm [ut.h:324]: no corresponding socket for af 2
ERROR: tm [t_fwd.c:417]: ERROR: can't fwd to af 2, proto 1  (no corresponding
listening socket) 
ERROR: tm [t_fwd.c:1385]: ERROR: t_forward_nonack: failure to add branches

3: Seteo la ip de origen mediante el comando "ip route" a ser la ip vitual
Vuelvo a probar el caso 2 con este cambio: Funciona correctamente.

4: llamada de un usuario por la ip pública virtual a un gw de la red interna
192.168.0.10. Falla igual que en el caso 2.

ERROR: <core> [forward.c:148]: ERROR: get_out_socket: no socket found
ERROR: tm [ut.h:324]: no corresponding socket for af 2
ERROR: tm [t_fwd.c:417]: ERROR: can't fwd to af 2, proto 1  (no corresponding
listening socket)
ERROR: tm [t_fwd.c:1385]: ERROR: t_forward_nonack: failure to add branches

5: Seteo en las rutas hacia 192.168.0.0/24 el src addr 192.168.0.12 (la
virtual) y repito la prueba del caso 4. Funciona correctamente.



Respecto a la elección del socket de kamailio en el caso de varias redes, tengo
puesto en el kamailio.cfg mhomed=1 que creo que servía para que kamailio
escogiera la iface más adecuada en cada caso. 

He buscado por force_socket y lo único que he visto es una función de nathelper
para forzar el proxy de comunicación con rtpproxy.




Más información sobre la lista de distribución SR-Users-ES