保姆级教程:用Ubuntu 18.04和Asterisk把家里电信固话“搬”到手机上(附光猫配置避坑点)
零基础实现家庭固话移动化:Ubuntu 18.04与Asterisk实战指南
你是否遇到过这样的场景:快递员拨打你家座机时,你正在超市购物;重要客户来电时,你却在小区遛狗。传统固话的"地理绑定"特性在移动互联网时代显得格格不入。本文将手把手教你如何用一台闲置电脑或树莓派,配合开源软件Asterisk,将电信固话无缝"迁移"到智能手机上,实现随时随地接听拨打原有座机号码。
1. 前期准备:光猫配置信息提取
在开始技术操作前,我们需要从电信光猫中提取关键的VoIP配置参数。这些信息如同座机服务的"身份证",是后续Asterisk系统与电信网络对接的基础。
必备工具清单:
- 网线一根(连接电脑与光猫)
- 记事本软件(记录关键参数)
- 浏览器(建议Chrome或Firefox)
1.1 获取光猫超级管理员权限
普通用户账号无法查看完整配置,我们需要使用超级管理员账号登录。不同地区电信的超级账号可能不同,常见组合包括:
| 设备厂商 | 用户名 | 默认密码 |
|---|---|---|
| 华为 | telecomadmin | admintelecom |
| 中兴 | root | Zte521 |
| 贝尔 | admin | 随机8位数字 |
提示:若默认密码无效,可尝试联系安装宽带的装维人员,或搜索"光猫型号+地区+超级密码"获取最新信息。
登录后,依次点击"网络"→"网络设置",找到带有"VOICE"字样的连接(通常名如2_VOICE_R_VID_45),记录以下关键信息:
主服务器地址:ims.he.chinamobile.com SIP用户名:86[区号][座机号]@ims.he.chinamobile.com 鉴权密码:32位十六进制字符串(可能显示为*号,需通过页面源码查看)1.2 网络连通性测试
为确保后续Asterisk能正常注册到电信网络,需要验证光猫到IMS服务器的连通性:
ping ims.he.chinamobile.com traceroute ims.he.chinamobile.com若出现"请求超时",可能需要添加静态路由。假设光猫IP为192.168.1.1,执行:
sudo ip route add 172.28.0.0/16 via 192.168.1.12. Ubuntu系统环境搭建
推荐使用Ubuntu 18.04 LTS系统,其长期支持特性保障了稳定性。可以在物理机或虚拟机(如VirtualBox)中安装。
2.1 系统基础配置
更新软件源并安装必要工具:
sudo apt update && sudo apt upgrade -y sudo apt install -y net-tools nano curl配置静态IP(示例):
sudo nano /etc/netplan/01-netcfg.yaml添加以下内容(根据实际网络调整):
network: version: 2 ethernets: eth0: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [114.114.114.114, 8.8.8.8]应用配置:
sudo netplan apply2.2 Asterisk安装与初始化
安装Asterisk及其依赖:
sudo apt install -y asterisk asterisk-config asterisk-doc启动服务并设置开机自启:
sudo systemctl enable --now asterisk验证安装:
sudo asterisk -rvv在Asterisk CLI中执行core show version,应能看到版本信息。
3. Asterisk核心配置详解
Asterisk的运作依赖于两个核心配置文件:sip.conf(SIP协议配置)和extensions.conf(拨号规则配置)。
3.1 sip.conf配置实战
备份原始文件后编辑:
sudo cp /etc/asterisk/sip.conf /etc/asterisk/sip.conf.bak sudo nano /etc/asterisk/sip.conf以下是关键配置示例(需替换为你的实际参数):
[general] bindport=5060 bindaddr=0.0.0.0 context=default nat=yes rtpstart=50000 rtpend=50100 ; 电信IMS trunk配置 [trunk_ims] type=friend host=ims.he.chinamobile.com username=8610598765432@ims.he.chinamobile.com ; 格式:86+区号+座机号 secret=1234567890abcdef1234567890abcdef ; 鉴权密码 fromuser=8610598765432 fromdomain=ims.he.chinamobile.com insecure=port,invite context=external dtmfmode=rfc2833 ; 内部SIP账号(用于手机客户端登录) [1001] type=friend secret=yourpassword host=dynamic context=internal3.2 extensions.conf拨号规则
sudo cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.bak sudo nano /etc/asterisk/extensions.conf配置示例:
[general] [internal] ; 内部分机互拨 exten => _1XXX,1,Dial(SIP/${EXTEN}) ; 外呼规则(11位手机号) exten => _1XXXXXXXXXX,1,Dial(SIP/${EXTEN}@trunk_ims,30) [external] ; 来电处理(座机呼入) exten => s,1,Answer() same => n,Dial(SIP/1001,20) same => n,Hangup()重启服务使配置生效:
sudo systemctl restart asterisk4. 手机端配置与使用
完成服务器端配置后,即可在智能设备上通过SIP客户端接打电话。
4.1 推荐客户端对比
| 客户端 | 平台 | 特点 | 免费版限制 |
|---|---|---|---|
| Zoiper | iOS/Android | 界面友好,通话质量稳定 | 有水印,功能受限 |
| Linphone | 全平台 | 开源,支持视频通话 | 无 |
| MicroSIP | Windows | 轻量级,资源占用低 | 完全免费 |
4.2 Zoiper配置示例
- 下载安装Zoiper(App Store/Google Play)
- 打开应用点击"Add Account"
- 填写SIP账户信息:
- Account Name: 自定义(如"家庭座机")
- SIP Address: 1001@你的服务器IP
- Password: 你在sip.conf中设置的密码
- 高级设置:
- 勾选"Register account"
- Transport: UDP
- Port: 5060
配置完成后,状态应显示"Registered",此时即可拨打电话。拨打外线时需加"0"前缀(如"013801234567"),内部分机直接拨号(如"1001")。
5. 常见问题排查指南
即使按照教程操作,仍可能遇到各种问题。以下是典型问题及解决方案:
问题1:注册状态显示"Rejected"
- 检查
sip.conf中的用户名格式是否正确(必须包含86前缀) - 验证鉴权密码是否包含特殊字符(如有,尝试用引号包裹)
- 确认服务器地址和端口无误
问题2:能接通但无声音
- 检查防火墙是否放行RTP端口(50000-50100)
- 在Asterisk CLI执行
rtp set debug on查看RTP状态 - 尝试修改
sip.conf中的nat设置为force_rport,comedia
问题3:拨号后立即挂断
- 检查
extensions.conf中的Dial命令格式 - 确认trunk名称与
sip.conf中一致 - 在CLI执行
core set debug 5查看详细日志
网络诊断命令参考:
# 查看SIP注册状态 sudo asterisk -rx "sip show registry" # 检查活动通话 sudo asterisk -rx "core show channels" # 实时日志监控 sudo asterisk -rvvv6. 进阶优化与功能扩展
基础功能实现后,可以考虑以下增强功能:
语音信箱配置:
- 创建语音信箱目录:
sudo mkdir /var/spool/asterisk/voicemail sudo chown asterisk:asterisk /var/spool/asterisk/voicemail- 编辑
voicemail.conf:
[default] 1001 => 1234,张三信箱,,attach=yes- 在
extensions.conf中添加:
[internal] exten => 1001,1,Dial(SIP/1001,20) same => n,Voicemail(1001@default) same => n,Hangup()来电显示自定义: 修改sip.conf中的trunk配置:
[trunk_ims] ... callerid= "家庭座机" <8610598765432>多终端同时振铃: 修改extensions.conf的来电处理:
exten => s,1,Dial(SIP/1001&SIP/1002,20)实际部署中,我发现在卧室和客厅各放置一部SIP电话时,通过调整Dial()命令中的超时参数,可以优化接听体验。例如设置主叫等待时间为25秒,能确保足够时间接听又不会让来电方等待过久。
