Hello,
I use DNS failover feature for routing some calls, and I wonder about its limitations.
I noticed that INVITE and ReINVITE requests are correctly routed based on SRV
priority/weight in case of failure, but ACK requests do not use them.
Let’s say I have Kamailio A relaying requests to a pool of Kamailios B1 and B2 in TLS.
DNS records are the below ones.
kamailiob.net. 60 NAPTR 20 100 S SIPS+D2T
_sips._tcp.kamailiob.net.
_sips._tcp.kamailiob.net. 60 SRV 1 10 5061
kamailiob-1.net.
_sips._tcp.kamailiob.net. 60 SRV 2 10 5061
kamailiob-2.net.
If B1 is down, I expect requests being relayed to B2 (because of priority 2 in the SRV
record).
* For initial INVITEs: R-URI is
sip:kamailiob.net
* If B1 is down, the request is retried to B2 => OK
* For in-dialog requests: Route header in incoming request is
sip:kamailiob.net so it
is set as next destination with loose_route function
* If B1 is down, the request is retried to B2 for ReINVITE => OK
* But once the ACK comes in, with the same Route header (
sip:kamailiob.net),
Kamailio tries to send it to B1 only (no retries to B2, and even no retransmissions to B1
either).
* When B1 is back UP again a few seconds later, Kamailio does not try to relay the
ACK again. The ACK request is attempted to be retransmitted only once to B1. It fails and
no more retries after that.
Is it the expected behavior? Or is it something misconfigured on Kamailio A? Or is it a
TLS connection issue?
Here is the DNS configuration on Kamailio A (TM module is enabled):
dns_try_naptr=yes
use_dns_failover=yes
use_dns_cache=yes
dns_srv_lb=yes
enable_tls=yes
tcp_max_connections=4096
tls_max_connections=4096
tcp_reuse_port=yes
tcp_connect_timeout=10
tcp_send_timeout=10
tcp_connection_lifetime=3600
I had a look into the DNS tutorial
(
https://github.com/kamailio/kamailio/blob/master/doc/tutorials/dns.txt) without finding
any hint about this.
If anyone has already played with SIP DNS failover in Kamailio, your help would be
appreciated, thanks!
Julien