Intermittent TLS inbound failure behind HAProxy, Kamailio opens new TCP to HAProxy ephemeral port and gets RST
Joey via sr-users <[email protected]>
| Newsgroups | gmane.comp.voip.ser |
|---|---|
| Message-ID | <[email protected]> |
Hello, We see an intermittent issue in our on premise deployments with Kamailio behind HAProxy. After several hours of idle time, some mobile clients cannot receive inbound calls, although they remain registered and can place outbound calls. Topology: Mobile Client → Internet → Customer Firewall → HAProxy → Kamailio Transport is SIP over TLS. HAProxy works in TCP mode and terminates nothing. It forwards TLS to Kamailio. Client behavior • REGISTER with Expires 600 seconds • Re-register every 7 minutes • TLS connection from client to HAProxy stays up • Outbound calls from client work • During the failure window, client continues to send REGISTER and receives 200 OK Failure scenario • Several devices placed idle overnight • In the morning, some cannot receive inbound calls • Kamailio tries to send INVITE to the contact • Kamailio opens a new TCP connection to HAProxy IP and an ephemeral port • HAProxy responds with RST Example log from Kamailio: INFO: request_route: method [INVITE] from [sip:[email protected]] to [sip:[email protected]] ERROR: tcpconn_1st_send(): connect 10.233.124.50:40398 failed (RST) Connection refused ERROR: tcpconn_1st_send(): 10.233.124.50:40398: connect & send failed WARNING: t_send_branch(): sending request on branch 0 failed PCAP confirms: • Kamailio sends SYN to 10.233.124.50:40398 • HAProxy replies RST, ACK Important observations 1. usrloc contact host and port match the peer address seen in tls.list (src_ip + src_port). 2. At the time of failure, the client is still able to send REGISTER and get 200 OK. 3. If the same client initiates a call, the call is established successfully. It looks like Kamailio sometimes fails to match the stored contact to an existing TLS connection and attempts to open a new TCP connection to the Contact host:port. In our case, Contact host resolves to HAProxy IP and port. Questions 1. Under which conditions does Kamailio decide to open a new TCP connection to the Contact instead of reusing an existing TLS connection? 2. If connection ID lookup fails, is fallback to active connect the expected behavior? Environment • Kamailio versions: 5.8.5, 6.0.5 (reproduced on both) • HAProxy: TCP mode, no TLS termination • Clients uses TLS only, no UDP Kamailio relevant configuration: tcp_connection_lifetime=605 modparam("registrar", "max_expires", 600) modparam("registrar", "use_path", 1) modparam("usrloc", "handle_lost_tcp", 1) modparam("usrloc", "close_expired_tcp", 1) HAProxy configuration: frontend client-kamailio-sip mode tcp option tcpka timeout client 600 default_backend server-kamailio-sip backend server-kamailio-sip from haproxytech mode tcp option tcpka timeout connect 30s timeout server 600s timeout tunnel 600s Any guidance on correct architectural pattern or configuration for SIP TLS behind HAProxy would be appreciated. Thank you. Joey. __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions -- [email protected] To unsubscribe send an email to [email protected] Important: keep the mailing list in the recipients, do not reply only to the sender!