El Tue, 27 Apr 2010 13:25:42 +0200 Iñaki Baz Castillo ibc@aliax.net escribió:
El día 27 de abril de 2010 11:47, Jon Bonilla manwe@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.