如何解决FreeSWITCH在SDP中暴露私有IP地址的问题
解决AWS ALB转发WebRTC到FreeSWITCH时SDP返回私有IP的问题
核心问题分析
因为ALB和FreeSWITCH所在EC2同属一个VPC,FreeSWITCH会把ALB的内网IP当成客户端来源,默认在SDP里返回私有IP,导致公网WebRTC客户端连不上。你之前加的apply-nat-acl只完成了NAT场景识别,缺了强制替换为公网IP的关键配置,这就是返回IP随机的原因。
具体解决方案
1. 修正SIP Profile配置
在对应WebRTC的SIP配置文件(比如conf/sip_profiles/internal.xml或自定义profile)里加以下参数,强制把SDP地址换成公网IP:
<param name="ext-sip-ip" value="你的EC2公网IP"/> <param name="ext-rtp-ip" value="你的EC2公网IP"/> <param name="auto-nat" value="true"/> <param name="apply-nat-acl" value="rfc1918"/> <param name="rewrite-sdp" value="true"/> <param name="disable-ip-detection" value="true"/>
ext-sip-ip/ext-rtp-ip:指定对外暴露的公网IP,不需要FreeSWITCH绑定这个IP,只是用来替换SDP里的私有IPrewrite-sdp:强制重写SDP里的媒体地址,确保返回的是公网IPdisable-ip-detection:关掉FreeSWITCH自动检测IP的逻辑,避免随机返回私有IP
2. 配置ALB的UDP端口转发
WebRTC靠UDP传RTP/RTCP流,得在ALB里配置对应的端口转发规则:
- 新建或修改目标组,添加UDP端口范围(默认FreeSWITCH用16384-32768),转发到EC2的对应UDP端口
- 确保EC2安全组允许ALB所在VPC的IP段访问这些UDP端口
3. 调整FreeSWITCH RTP基础配置
修改conf/autoload_configs/rtp.conf.xml,让RTP监听在EC2私有IP(机器实际绑定的IP),同时开启NAT映射:
<param name="rtp-ip" value="你的EC2私有IP"/> <param name="rtp-port-min" value="16384"/> <param name="rtp-port-max" value="32768"/> <param name="nat-map" value="true"/>
nat-map会自动把RTP流的源地址映射到ext-rtp-ip配置的公网IP,解决RTP流回传的问题。
4. 验证配置
- 查看FreeSWITCH返回的SDP内容,确认
c=和m=行的地址是公网IP - 用公网WebRTC客户端测试连接,检查音视频流是否正常传输
内容的提问来源于stack exchange,提问作者Pavan Kumar
相关产品推荐
相关产品推荐

