与我一起
分享和记录

使用树莓派搭建跨国语音短信设备(VoIP)

对于出国狗来说,在国外想要使用国内手机语音短信服务是个比较头疼的事情。这篇教程将教你用树莓派基于
Asterisk 实现一个 PBX 系统。最终的效果是:你可以在国外通过互联网使用你国内的手机号,享受的是国内手机号的资费。

基本的原理图

1.png

需要准备的东西

  • 树莓派3B(使用2代也可以,不过性能不是很好)
2.jpg
  • 一个带语音支持的 3G 卡托(尽量买华为的,并且一定要注意带语音支持,一般带语音的都是要卖出海外的,卖给国内的都是阉割掉语音功能的。可以考虑从 阿里巴巴 上搜索 3g dongle voice 来购买。按照我两年前的实验来看,50多 CNY 的带语音卡托在树莓派上识别不出来,建议优先考虑华为,另外在 这里 有一份测试通过的型号清单,不过某些型号貌似也有好几种版本,比如我曾经买到过一个E169是没法用的。)
3.jpg
  • 一个带电源的USB HUB(一定要带电源,因为供电不足的话,来去电的时候可能不稳定)
  • 一根HDMI转VGA线(如果有HDMI显示器,可以忽略该配件)
  • 一张至少8G的TF卡(建议买树莓派的时候一并购买)
  • 5V2A的电源

前置技能

  • Linux基本知识
  • 最好有折腾过树莓派
  • 折腾的精神

基础配置

1.首先我们需要去 http://www.raspberry-asterisk.org/downloads/ 这里下载最新的镜像,该镜像是基于 Debian
已经封装好的 FreePBX 系统,本次教程使用的是 raspbx-03-12-2017.zip,其中 Asterisk 13.18.3FreePBX 14.0.1.20
备注:该网站需要VPN访问!

2.下载后,解压 raspbx-03-12-2017.zip,使用你熟悉的烧录软件,把解压出来的 .img 文件烧录进TF卡中。推荐使用 Etcher 进行烧录操作。用 Etcher 烧录还是比较方便,只需要三步即可。第一步选择镜像文件,第二步选择你的TF卡,第三步点击 Flash 即可开始。

3.插入TF卡到树莓派中,然后上电。系统默认用户密码为: root / raspberry

4.登陆后,先配置 WiFi (如果计划使用网线,可以跳过该步,建议使用网线,稳定),打开 /etc/wpa_supplicant/wpa_supplicant.conf 文件,

增加配置后,输入 reboot 进行重启,重启后,ifconfig 就能看到 IP 了,系统的 ssh 默认是开启状态,现在就可以使用 ssh 了。

另外镜像默认使用 4G 空间,如果你想扩展到 TF 卡全部空间,执行下面的命令

选择 Advanced Options ,再选择 Expand Filesystem,即可完成扩充。除此之外,也可以用 fdisk 命令完成,具体方法可以参考我博客上很早之前的一篇 博文

5.打开浏览器,访问你树莓派IP,会看到如下的配置页面

6.增加管理用户后,显示下面的登录界面,

7.点击 FreePBX Administration 进行管理员登陆,开始配置,登陆后进行语言和时区设置

8.设置成功后,进入了管理主界面

9.从 Application => Extensions => Add Extension => Add New PJSIP Extension

10.需要填写的项目有 User ExtensionDisplayNameSecretLink to a Default User.

7.png

其中 User Extension 是你的内线号码,用于呼叫和登陆客户端;
DisplayName 是用于呼叫时的显示,可选填;
Secret 是你在客户端登陆时需要填写的密码,请使用健壮的密码,详见最后的 安全 章节;
Link to Default User 是让用户自己管理自己的号码,如果不需要,则选 None

点击 Submit 后,保存成功。用同样的方法再创建一个用户用于测试。

创建完两个用户后,点击右上角的 Apply Config 使配置生效。

11.在 Settings => Asterisk SIP Settings 页面的 General SIP Settings 标签页下面,External Address 一栏填写你的外网IP或者你的外网域名,这里我填写了我的外网IP。Local Networks 中填写你的树莓派所在的子网。RTP Port Ranges 里,填写 10000 到 10100。这里不要使用 20000,测试来看,如果你只是自己用,设置 10100 很稳定。点击 Submit 保存。

8.png

12.切换到 Chan PJSIP Settings 标签页下面,把 tcp 设置为 yes,点击 Submit 保存。
Asterisk 默认使用的是 UDP,为了能保证手机app在后台运行时,可以及时收到来电提醒,需要开启 tcp 通信。

9.png

13.去自己的路由器上,设置端口映射,需要打开 5060 和 10000-10100,可以参考下图

4.png
5.png

14.去 http://www.linphone.org/ 下载 Linphone 到你的手机和电脑上,如下图分别用刚才新建立的两个账号登陆两个客户端。

1.jpeg
2.jpeg
3.jpeg
a1.png
a2.png
a3.png
a4.png

现在从手机上,拨打 102 ,如果以上设置没有问题的话,电脑上就能响铃,接起来,两边听一下,看看有没有什么问题。如果有一方听不到,很可能是端口映射的问题,重新检查下配置。端口映射这里偶尔会有莫名奇妙的问题。

配置GSM,实现呼入和呼出

1.把 SIM 卡插入 3G 卡托,把 3G 卡托插到树莓派或者 USB HUB 上。

2.SSH 连接到树莓派后,执行下面的命令安装 dongle 扩展

其中①输入你插入 3G 卡托里的手机卡号,②输入你要准备接收短信的邮箱地址,③如果你不想转发短信留空即可。

安装到最后,会再问你是否需要安装网页界面的发短信工具(即访问地址就是 http://raspbx_ip/sms),按照提示输入即可

注意:安装 dongle 扩展需要翻墙

3.回到网页配置界面,依次访问 Connectivity => Trunks => Add Trunk => Add Custom Trunk

b2.png

4.在 General 标签页下面,设置一个 Trunk NameOutbound CallerID 中填写你的手机号

b33.png

5.在 custom Settings 中设置 dongle/dongle0/$OUTNUM$

b44.png

这里如果你只是插了一个 3G Dongle,那么就是默认 dongle0,如果你设备上插了多个设备,你需要在命令行下输入一下命令,查看下所有的 Dongle

6.点击 Submit 保存设置,然后点击右上角的 Apply Config 使配置生效。

7.从 Connectivity => Outbound Routes => Add Outbound Route 中,在 Route Settings 下面填写一个 Route Name,在 Trunk Sequence for Matched Routes 中选择刚才添加的 Trunk

b3.png

6.切换到 Dial Patterns 标签下,按照下图来配置拨号规则,这里配置的规则是,匹配所有0开头的电话号码,把所有0开头的号码,去除开头的0后,转发到我们设置的那个 Trunk 上,进行呼出操作。

b4.png

7.点击 Submit 保存配置,点击右上角 Apply Config 使配置生效。生效后,你现在可以用你的 App 进行外呼操作了,只要在要拨打的电话前加拨0,即可完成外拨。

8.在 Connectivity => Inbound Routes => Add Inbound Route => General下,配置 Set Destination ,选择 Extension,从已经添加的 Extension 中,选择一个即可。点击 Submit 保存配置,点击右上角 Apply Config 使配置生效。生效后,你可以拨打你的 3G Dongle 中的手机卡号,如果顺利,你手机上的 App 将会接到这个呼入操作。

d1.png
d2.png

配置 Email,测试收发短信

1.输入如下命令进入 Email 配置界面:

2.选择 internet site; mail is sent and received directly using SMTP

e1.png

3.配置你的发信域名

e2.png

4.保持默认值

e3.png
  1. 配置为你的发信域名
e4.png

6.以下几步保持默认值

e5.png
e6.png
e7.png
e8.png
e9.png

7.该步输入 root

e10.png

8.完成发信配置后,使用 send_test_email <your_email> 命令进行发信测试。打开你的邮箱,检查垃圾箱,100%的会被拦截,像我用的腾讯的企业邮,在 自助查询 中可以找到拦截信息,为了收信顺利,把你上面配置的发信域名加入邮箱的域名白名单即可。

e11.png

9.用手机给自己 3G Dongle 里的手机卡发条短信,应该很快就能收到邮件了,

10.如果想要发送短信的话,我们可以通过 Web 页面进行,访问 http://your_raspbx_ip/sms,会提示你输入密码,这个密码即为你安装 Dongle 扩展的时候输入的那个密码,登陆后如下所示

注意:收件人手机号一定要加国号

设备安全!!!!!

先给大家看一个截图,

s1.png

这是目前我的设备被暴力破解的情况。

请一定重视安全问题

再附上我之前的悲惨遭遇:https://www.v2ex.com/t/394297#reply11

1.首先,你的 Extension 一定要给各个账号配置超强的密码

2.其次,使用 Fail2ban 来防暴破。

3.安装 Fail2ban 后,程序会自动启动,我们需要调整下配置,打开 /etc/fail2ban/jail.local 文件,搜索 [asterisk],找到 maxretry 项,修改为 2,就是说密码输入错2次,就会被 Fail2ban 拦截。再搜索下 bantime,修改为 1w。配置好后,意味着有人要是输入错两次密码,那么这个人的 IP 就会被屏蔽一周。保存后,执行 systemctl restart fail2ban 重启服务使配置生效。

备注:

1. 邮箱的设置

在家中部署raspbx邮箱发送通知邮件,有时会因为验证问题被拒收,所以在设置邮箱时也可以选择EXIM4的smarthost模式,也就是输入

选择第二项或第三项。然后执行设置你的邮箱用户和密码:

执行

设置相关用户所对应的Email地址,这个地址就是用来发送通知的地址,使用同一个即可。

要注意的是asterisk的对应邮箱一定要设置正确,而root对应的邮箱是用来发测试邮件或发送fail2ban的事件通知的。

所有设置完后执行下列命令来更新EXIM4现有配置即可生效:

2. 新版raspbx点击apply时,Asterisk一直loading的问题

进入到“Setting – Advanced Settings”将“Enable Module Signature Checking”选项设置为“No”,然后保存设置即可解决。

3. 禁止Asterisk full log

如果允许Asterisk full log不断生成,你的存储空间很快就会被用完。

Ctrl+w 查找关键词,更改AMPDISABLELOG为TURE

4. 修改接收通知或短信的邮箱地址

– 语音邮箱:需要到 Extensions 下的分机号的 Voicemail 选项下修改;

– 短信转邮件的接收邮箱地址到 /etc/asterisk/extensions_custom.conf 下修改;

– 现有的Admin邮箱,也就是你第一次运行时添加管理账户时所填写的邮箱,到“Admin – Module Admin – Scheduler and Alerts”下修改;

– 如果 fail2ban 通知要更改邮箱,到/etc/fail2ban/jail.local

上面所提到的邮箱地址任何更改都互不影响,所以单独列出来,备用记录。

 

 

 

使用树莓派搭建跨国语音短信设备(VoIP)
扫码跨屏阅读

未经允许不得转载:偶痞 » 使用树莓派搭建跨国语音短信设备(VoIP)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址