抓包得到Freeswitch 的rtp ip 为内网IP 修改 ext-sip-ip ext-rtp-ip 不生效 │c=IN IP4 172.30.106.16
时间: 2025-04-06 09:12:42 浏览: 69
<think>嗯,用户的问题是关于FreeSWITCH修改ext-sip-ip和ext-rtp-ip后不生效,抓包显示RTP IP还是内网地址。我需要先理清楚FreeSWITCH的配置机制,可能的问题点在哪里。
首先,用户已经修改了这两个参数,但实际抓包显示还是内网IP,说明配置可能没有正确加载或者被覆盖了。常见的配置文件是vars.xml,里面定义了很多变量,包括ext-sip-ip和ext-rtp-ip。我需要检查用户是否正确修改了这个文件,或者是否有其他配置文件覆盖了这些变量。
然后,用户提到引用了两个内部引用,其中引用[2]提到了不同的网络环境和注册方式。可能存在NAT问题,尤其是在不同的网络拓扑中。FreeSWITCH需要正确识别外网地址,特别是在存在多个NAT或者不同出口的情况下。可能需要设置SIP的NAT相关参数,比如enable-rtp-auto-adjust和aggressive-nat-detection。
另外,SIP配置文件sip_profiles/internal.xml中的设置也很关键。比如是否设置了ext-rtp-ip和ext-sip-ip参数,或者是否启用了NAT穿透选项。如果这里没有正确配置,可能导致变量没有被应用。
还要考虑重启服务的问题,修改配置后是否重新加载了配置文件或者重启了FreeSWITCH服务。有时候服务需要完全重启才能应用新的配置。
抓包显示RTP的c=行还是内网地址,说明SDP中的媒体地址没有正确替换为外网地址。这可能涉及到rtp-ip和sip-ip的设置,或者NAT设置不正确,导致FreeSWITCH没有正确替换SDP中的IP。
可能的解决方案包括:检查所有相关的配置文件,确保没有重复定义;确认NAT相关参数已启用;检查网络环境,确保端口映射正确;使用命令行临时设置参数进行测试;查看日志确认配置加载情况。
需要一步步引导用户检查配置,确认每个步骤是否正确,并提供具体的命令和配置示例,帮助用户定位问题。同时,引用相关的网络环境和配置案例,比如引用[2]中的不同机器注册情况,可能需要针对不同的公网地址做特殊处理。</think>### FreeSWITCH修改ext-sip-ip和ext-rtp-ip不生效的解决方案
#### 1. 配置文件检查与加载
- **关键配置文件**: 修改`/opt/freeswitch/conf/vars.xml`中的参数,确保以下两项正确设置为公网IP:
```xml
<X-PRE-PROCESS cmd="set" data="external_rtp_ip=115.aa.aa.aa"/>
<X-PRE-PROCESS cmd="set" data="external_sip_ip=115.aa.aa.aa"/>
```
- 若使用MRCP服务,还需检查`/opt/freeswitch/etc/freeswitch/mrcp_profiles/ali-unimrcp.xml`中的IP配置[^1]
- **配置覆盖检查**: 检查`sip_profiles/internal.xml`是否有重复定义`ext-rtp-ip`或`ext-sip-ip`,这些参数会覆盖全局设置
#### 2. NAT穿透配置强化
在`sip_profiles/internal.xml`中添加/修改以下参数:
```xml
<param name="enable-rtp-auto-adjust" value="true"/>
<param name="aggressive-nat-detection" value="true"/>
<param name="NDLB-force-rport" value="true"/>
<param name="NDLB-restore-media-addr" value="true"/>
```
#### 3. 网络环境适配
根据引用[2]中多机器不同公网IP的场景:
- 对于59.bb.bb.bb和123.cc.cc.cc两个出口IP,建议:
```xml
<param name="local-network-acl" value="localnet.auto"/>
<param name="apply-nat-acl" value="rfc1918.auto"/>
```
在`acl.conf.xml`中明确定义所有私网地址段:
```xml
<list name="rfc1918.auto" default="deny">
<node type="allow" cidr="172.23.4.92/32"/>
<node type="allow" cidr="10.240.80.69/32"/>
</list>
```
#### 4. 运行时调试命令
通过FS_CLI执行诊断:
```bash
freeswitch@internal> global_getvar external_rtp_ip
freeswitch@internal> sofia status profile internal
```
若返回值不是预期IP,说明配置未生效,可通过临时设置验证:
```bash
freeswitch@internal> global_setvar external_rtp_ip=115.aa.aa.aa
freeswitch@internal> sofia profile internal restart
```
#### 5. 抓包分析要点
当出现`c=IN IP4 172.30.106.16`时:
1. 检查SIP消息中的`Contact`头是否包含公网IP
2. 确认SDP中的`o=`行格式为:
```
o=FreeSWITCH 1702289579 1702289580 IN IP4 115.aa.aa.aa
```
3. 验证RTP端口范围是否开放:
```xml
<X-PRE-PROCESS cmd="set" data="rtp_start_port=16384"/>
<X-PRE-PROCESS cmd="set" data="rtp_end_port=32768"/>
```
#### 6. 高级调试方案
在日志中增加NAT调试信息:
1. 修改`freeswitch.log`级别:
```bash
/log 6
/console loglevel debug
```
2. 检查日志关键词:
```
[NAT] RTP NATing from 172.30.106.16 to 115.aa.aa.aa
[SOFIA] Update SDP for NAT
```
阅读全文
相关推荐

















