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