mirror of
https://gitee.com/270580156/weiyu.git
synced 2026-05-11 18:02:37 +00:00
154 lines
3.8 KiB
Markdown
154 lines
3.8 KiB
Markdown
# FreeSwitch ESL 连接问题解决状态报告
|
||
|
||
## 📊 问题分析总结
|
||
|
||
### ✅ 已确认的情况
|
||
|
||
- **网络连通性**: 正常 (ping 响应时间 ~29ms)
|
||
- **端口访问**: 端口8021可访问
|
||
- **FreeSwitch服务**: 运行中
|
||
- **问题根因**: ACL (Access Control List) 配置限制外部连接
|
||
|
||
### ❌ 当前问题状态
|
||
|
||
- **ESL响应**: 仍然返回 "text/rude-rejection"
|
||
- **错误消息**: "Access Denied, go away."
|
||
- **Java连接**: 因ACL限制无法建立ESL连接
|
||
|
||
## 🛠️ 已完成的工作
|
||
|
||
### 1. Java端增强 ✅
|
||
|
||
- **智能错误诊断**: 自动识别ACL拒绝、连接超时等错误类型
|
||
- **连接重试机制**: 指数退避策略,最多3次重试
|
||
- **健康状态监控**: Spring Boot Actuator集成
|
||
- **启动时诊断**: 应用启动自动检测FreeSwitch连接状态
|
||
- **管理API**: 提供连接测试和状态查询REST接口
|
||
|
||
### 2. 诊断工具创建 ✅
|
||
|
||
- **diagnose_and_fix.sh**: 完整诊断脚本
|
||
- **monitor_esl_status.sh**: 实时连接状态监控
|
||
- **one_click_fix.sh**: 服务器端一键修复脚本
|
||
- **IMMEDIATE_FIX_COMMANDS.md**: 立即修复指令
|
||
|
||
### 3. 配置文件准备 ✅
|
||
|
||
- **event_socket.conf.xml**: 已准备无ACL限制的配置
|
||
- **修复脚本**: 包含自动备份和配置替换逻辑
|
||
|
||
## 🚨 待执行的关键步骤
|
||
|
||
### 服务器端修复 (需要SSH访问)
|
||
|
||
**在FreeSwitch服务器 (14.103.165.199) 上执行:**
|
||
|
||
```bash
|
||
# 一行命令修复
|
||
cp /usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml /usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml.backup && cat > /usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml << 'EOF'
|
||
<configuration name="event_socket.conf" description="Socket Client">
|
||
<settings>
|
||
<param name="nat-map" value="false"/>
|
||
<param name="listen-ip" value="0.0.0.0"/>
|
||
<param name="listen-port" value="8021"/>
|
||
<param name="password" value="bytedesk123"/>
|
||
</settings>
|
||
</configuration>
|
||
EOF
|
||
systemctl restart freeswitch
|
||
```
|
||
|
||
## 📈 预期修复结果
|
||
|
||
### 修复成功后的ESL响应
|
||
|
||
```bash
|
||
Content-Type: auth/request
|
||
Content-Length: 0
|
||
```
|
||
|
||
### Java应用连接状态
|
||
|
||
- **健康检查**: 从 DOWN 变为 UP
|
||
- **连接测试**: API返回成功状态
|
||
- **事件监听**: 可正常接收FreeSwitch事件
|
||
|
||
## 🔍 验证步骤
|
||
|
||
### 1. 服务器端验证
|
||
|
||
```bash
|
||
# 检查端口监听
|
||
netstat -tlnp | grep :8021
|
||
|
||
# 测试本地连接
|
||
echo "" | nc localhost 8021
|
||
|
||
# 检查服务状态
|
||
systemctl status freeswitch
|
||
```
|
||
|
||
### 2. 客户端验证
|
||
|
||
```bash
|
||
# 运行监控脚本
|
||
./monitor_esl_status.sh
|
||
|
||
# 测试Java应用健康状态
|
||
curl http://localhost:9003/actuator/health/freeSwitch
|
||
|
||
# 测试ESL连接
|
||
curl -X POST http://localhost:9003/api/v1/freeswitch/test-connection
|
||
```
|
||
|
||
## 🔒 安全考虑
|
||
|
||
⚠️ **当前修复方案移除了所有ACL限制,仅用于解决连接问题**
|
||
|
||
### 生产环境建议
|
||
|
||
修复成功后,建议添加IP白名单配置:
|
||
|
||
```xml
|
||
<configuration name="event_socket.conf" description="Socket Client">
|
||
<settings>
|
||
<param name="nat-map" value="false"/>
|
||
<param name="listen-ip" value="0.0.0.0"/>
|
||
<param name="listen-port" value="8021"/>
|
||
<param name="password" value="bytedesk123"/>
|
||
<param name="apply-inbound-acl" value="bytedesk_safe"/>
|
||
</settings>
|
||
</configuration>
|
||
```
|
||
|
||
然后在 acl.conf.xml 中添加:
|
||
|
||
```xml
|
||
<list name="bytedesk_safe" default="deny">
|
||
<node type="allow" cidr="YOUR_JAVA_APP_IP/32"/>
|
||
</list>
|
||
```
|
||
|
||
## 📞 后续支持
|
||
|
||
### 如果修复仍然失败
|
||
|
||
1. 检查是否有多个配置文件
|
||
2. 确认FreeSwitch版本和配置目录
|
||
3. 查看详细的FreeSwitch日志
|
||
4. 考虑使用SSH隧道作为临时方案
|
||
|
||
### 联系信息
|
||
|
||
提供以下信息以获取进一步支持:
|
||
|
||
- 服务器修复命令的执行结果
|
||
- FreeSwitch日志输出
|
||
- 配置文件的实际位置和内容
|
||
|
||
---
|
||
|
||
**状态**: 等待服务器端配置修复
|
||
**优先级**: 高
|
||
**预计解决时间**: 执行修复命令后立即生效
|