jaspreet-eltropy created an issue (kamailio/kamailio#4270)
**I’m running into an issue when using Yealink SIP phones in a setup involving Kamailio + RTPengine + FreeSWITCH/Fusionpbx.** **Setup Overview:** SIP Proxy: Kamailio (handling NAT traversal, registration, and routing) Media Relay: RTPengine (with replace-origin, replace-session-connection, media-address, and other options) Media Server: FreeSWITCH (handles RTP/audio and call logic) Phone: Yealink T54w Series (but likely affects other models too) Transport: UDP (with force_rport() and NAT detection routes in place) Environment: Mixed NAT/public IPs with STUN/TURN enabled on WebRTC clients(SIP.js) (where applicable) Problem Description: When a call is placed from/to a Yealink phone, the call signaling works fine (INVITE, 200 OK, ACK are all seen correctly), but there is no audio or sometimes one-way audio. This only happens with Yealink; other SIP clients (Zoiper, Linphone, SIP.js etc.) work fine with the same setup. From packet captures and Kamailio logs, I can see the following: RTPengine receives the call and processes it. The rtpengine_manage() is called with these flags: May 30 05:38:13 ip-10-7-37-179 /usr/local/sbin/kamailio[62354]: INFO: <script>: BRIDGING: TRYING TO BRIDGE udp sip:5555@192.168.1.10:12561;transport=TCP May 30 05:38:13 ip-10-7-37-179 /usr/local/sbin/kamailio[62354]: INFO: <script>: NATMANAGE branch_id:0 ruri: sip:5555@192.168.1.10:12561;transport=TCP, method:INVITE, status:<null>, extra_id: z9hG4bKcSBpr6vNyyepe0, rtpengine_manage: replace-origin replace-session-connection media-address=52.24.225.81 trust-address via-branch=extra The Yealink phone sends SDP with correct IPs, but it doesn’t receive RTP (confirmed via tcpdump). Interestingly, if I bypass RTPengine + kamilio (media goes directly to/from FreeSWITCH), audio works. What I’ve Tried: Enabling/disabling trust-address and via-branch options. Using set_contact_alias() for REGISTER/NATed clients. Ensured that Contact header aliasing is applied. Verified that Yealink NAT settings are configured correctly. Using force_rport() and fix_nated_register() in Kamailio. Ensured RTP ports are open and media_address in RTPengine is set correctly. My Questions: Is there a known compatibility issue with Yealink phones and RTPengine in relayed mode? Does Yealink require specific NAT handling rules that differ from softphones? Are there any recommended rtpengine_manage() flags or Kamailio routing practices specifically for Yealink endpoints? Any suggestions to debug further — SIP traces seem clean, but RTP is not received by the Yealink. Sample Logs (Kamailio): NATMANAGE branch_id:0 ruri: <null>, method:INVITE, status:100, extra_id: z9hG4bK4b1.ffbb20e21cff840bb08800b46398f55b.00, rtpengine_manage: replace-origin replace-session-connection media-address=52.24.225.81 trust-address via-branch=extra Yealink SIP Config: NAT Traversal: Enabled (STUN) Keep-Alive: 30s UDP port: 5060 SIP registration: works Audio: not working when RTPengine is in the path Any help or suggestions would be greatly appreciated. Let me know if logs or traces are needed. ``` -[ RECORD 1 ]-+---------------------------------------------------------------------- id | 3259 ruid | uloc-683943f5-f3a0-1 username | 5555 domain | contact | sip:5555@192.168.1.10:12561;transport=TCP received | sip:182.77.49.201:12561;transport=tcp path | expires | 2025-05-30 05:44:04 q | -1 callid | [2_689921921@192.168.1.10](mailto:2_689921921@192.168.1.10) cseq | 6 last_modified | 2025-05-30 05:42:04 flags | 0 cflags | 64 user_agent | Yealink SIP-T54W 96.86.0.75 socket | tcp:10.7.37.179:5060 methods | 16383 instance | reg_id | 0 server_id | 0 connection_id | 4 keepalive | 1 partition | 28 ``` Thanks in advance