opensip 提供 函数fix_contact();使用SIP消息的源地址和端口更新 contact地址;
所以解决SIP的nat问题,只需要两步
1. opensips所有的请求都会进route主路由中。
只需要在route主路由中添加
fix_contact();
2. opensips所有的响应都会进onreply_route 路由
只需要在onreply_route主响应路由中添加
fix_contact();
配置如下:
route{
# 请求有 INVITE,REGISTER,ACK,OPTION,INFO,MASSAGE,等
if (!mf_process_maxfwd_header("10")) {
send_reply("483","Too Many Hops");
exit;
}
# 使用 源ip和端口代替contact的值
fix_contact();
#....
}
onreply_route{
# 所有的响应有 1XX,2XX
fix_contact(); ### 200 OK 响应 contact 为内网IP时,ACK的发送的地址不正确,需要更改contact的地址。
}