OpenSIPS中继呼叫异常:请求URI主机未替换为目标服务器IP
解决OpenSIPS转发呼叫时Request-URI未修改的问题
问题出在你对send()函数的理解上:这个函数只负责把SIP消息发送到指定的网络地址,不会自动修改消息内部的Request-URI字段。你看到的Request-URI还是自身IP,是因为你没手动修改这个字段,OpenSIPS不会替你做这件事。
修正后的配置代码
socket=udp:192.168.10.50:5060 # Route for handling incoming calls route { # 仅处理来自指定客户端1.1.1.1的INVITE请求 if (is_method("INVITE") && $src_ip == "1.1.1.1") { # 提取原Request-URI的用户部分,替换主机为目标服务器IP $ru = "$ru(user)@10.10.10.50"; # 日志输出修改后的Request-URI,用于调试 xlog("Modified Request URI: $ru\n"); # 中继呼叫到目标SIP服务器 if (!send("10.10.10.50:5060")) { xlog("Failed to send call to destination server\n"); exit; } } }
关键说明
$ru是OpenSIPS内置变量,代表SIP请求的Request-URI。通过$ru(user)可以提取其中的用户部分(比如你例子里的123123),然后拼接目标主机地址,完成Request-URI的修改。- 新增了
$src_ip == "1.1.1.1"的判断,确保只处理来自指定客户端的呼叫,符合你的需求。 - 修改Request-URI后,再用
send()发送到目标服务器,此时消息里的Request-URI就会是你预期的123123@10.10.10.50。
如果后续遇到其他SIP头的问题(比如Via头需要调整),可以再针对具体场景修改,但当前核心问题的解决就是手动调整$ru变量。
内容的提问来源于stack exchange,提问作者Masood Ahmed
相关产品推荐
相关产品推荐

