本文迁移自老博客,原始链接为 https://blog.fxit.top/?p=839
注意,该文章排版可能存在兼容问题,建议配合旧版本博客食用~
最近总在想能不能把一张手机卡托管在网络中,从而实现一卡多待的问题(对只能单卡的iphone更加有用)。于是,找了找,还真的有这种解决方案,那就是--GSM网关。
目前博主有在家做小主机的树莓派3b,一开始是不打算用树莓派做的,因为树莓派3b还要做主机而不是二十四小时跑着。于是,打算在VMware里面开一台小鸡挂机,用FreePBX。成功是成功了,能进网站控制面板,但是就是装不上dongle。后来就去官网拼命翻教程,发现FreePBX并没有 install-dongle 这条命令,但是确实有写着如何安装dongle。不过还是在编译上出了问题,然后又重装换环境什么的折腾好久,终于放弃这种方案了。
不过,树莓派3b我还是不打算用它做网关的。于是,在闲鱼上逛了几天,也算我运气好,50多收了一台成色挺不错的树莓派1代b(一般这个价钱只能收个垃圾成色(就是usb生锈那种),看着就没兴趣了)。
嗯,今天就大概搞定这个东西了,走了真的很多很多的弯路,浪费了好多时间,百度很多教程是已经不适用的了。所以,特意来博客写一个指路的帖子,方便大家能更快的部署!!由于是指路文,注意事项会很多,我会把每个要注意的小点都告诉大家,请留意看。
OK。废话不多说,开始进入教程!!
准备工作:
1.树莓派3 B+/Pi 3/ Pi 2/B+/ B /A 这些型号都是官方写明可以进行安装的。不过建议入一代b型吧,因为要用到网络,其他有些没网口也没wifi的,还得整usb网卡,费事。但注意不要买到阉割版的b了(阉割版无网口)。
2.下载好RasPBX系统,我使用的是raspbx-04-04-2018.zip。(下载链接:http://download.raspberry-asterisk.org/raspbx-04-04-2018.zip ,ZIP校验SHA1: 8f473d01935da0347fbafb7f71c649914934c5b6(如果下载链接失效了请在官网http://www.raspberry-asterisk.org/downloads/里面找到镜像下载,可能需要翻墙。))
3.一台已经刷好华硕固件的路由器或者可以使用SS/SSR的路由器,再或者你可以想办法让树莓派翻墙。(注意了,RasPBX这个系统刷入后是没有apt-get update的,很多软件都找不到,所以说最好让树莓派一开机就接入翻墙网络,不建议在树莓派里面翻墙)
4.华为3g卡托,用来接打电话,收发信息的,是与运营商对接的“桥梁”。这个我也找了很久,应该是我手上这款华为E1692比较便宜划算了吧,其他真心贵(70+)。我的是闲鱼35入手的,嘿嘿。当然,你可以自己选择,所有支持的卡托型号都在这里:https://github.com/bg111/asterisk-chan-dongle/wiki/Requirements-and-Limitations ,要注意的是:选择能支持语音和短信的卡托,最好选别人测试成功过的,不然你就用不了语音,或者当小白鼠了233。
5.烧录树莓派SD卡用的工具(不用我说了吧。。)。值得注意的是,如果你用大于4g的卡,则需要扩展空间才能使用,这里不多讲,百度教程很多,可以直接用分区助手扩展就ok了。
6.一定的linux基础和网络基础。
确保:将镜像刷入树莓派SD卡,开机,接入显示器和键盘,接入网线并且有DHCP分配静态IP且已翻墙(此文不研究使用wifi连接)(一定要翻墙!!否则下面步骤无法进行!!!)。 附:接入wifi教程
用nano编辑 /etc/wpa_supplicant/wpa_supplicant.conf
文件:
教程开始:
1.输入默认账号root密码raspberry进入RasPBX系统。
2.输入
ifconfig
记录下IP地址。
3.打开浏览器,访问你的树莓派的IP地址。在页面按提示设置一下管理员账号密码之类的。

4.增加管理用户后,显示下面的登录界面。点击FreePBX Administration那个,然后输入你刚刚的账号密码进入管理系统。

5.登陆后进行语言和时区设置。

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

7.点击上方菜单栏,Application
=> Extensions
=> Add Extension
=> Add New PJSIP Extension。


8.需要填写的项目有 User Extension,DisplayName,Secret,Link to a Default User.

其中 User Extension 是你的内线号码,用于呼叫和登陆客户端; DisplayName 是用于呼叫时的显示,可选填; Secret 是你在客户端登陆时需要填写的密码,请使用健壮的密码,详见最后的 安全 章节; Link to Default User 是让用户自己管理自己的号码,如果不需要,则选 None。
点击 Submit 后,保存成功。用同样的方法再创建一个用户用于测试。
创建完两个用户后,点击右上角的 Apply Config 使配置生效。

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

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


11.去自己的路由器上,设置端口映射,需要打开 5060 和 10000-10100(一个通讯过程4个端口,你可以只映射10001,10002,10003,10004,不过建议全映射),可以参考下图。

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







现在从手机上,拨打 102 ,如果以上设置没有问题的话,电脑上就能响铃,接起来,两边听一下,看看有没有什么问题。如果有一方听不到,很可能是端口映射的问题,重新检查下配置。端口映射这里偶尔会有莫名奇妙的问题。
配置GSM,实现呼入和呼出:
准备工作:
把 SIM 卡插入 3G 卡托,把 3G 卡托插到树莓派或者 USB HUB 上。
安装教程:
1.SSH连接上树莓派或者直接接显示器和键盘。依次输入(等待一条操作完成再进行下一条操作):
PS:此处耗时较长,看网络情况决定,请确保已翻墙。
2.输入install-dongle后,会出现一系列引导你配置的提示。

其中①输入你插入 3G 卡托里的手机卡号,②输入你要准备接收短信的邮箱地址,③如果你不想转发短信留空即可。
安装到最后,会再问你是否需要安装网页界面的发短信工具(即访问地址就是 http://raspbx_ip/sms),按照提示输入即可。
3.回到网页配置界面,依次访问 Connectivity => Trunks => Add Trunk => Add Custom Trunk


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

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

这里如果你只是插了一个 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。

8.切换到 Dial Patterns 标签下,按照下图来配置拨号规则,这里配置的规则是,匹配所有0开头的电话号码,把所有0开头的号码,去除开头的0后,转发到我们设置的那个 Trunk 上,进行呼出操作。
此处建议在设置一个prefix为1,然后下一个框写. 。这样就可以自动将1开头的电话通过卡托进行拨打辣!

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


至此,所有基本的安装与配置已经完成。
其他:
配置 Email,测试收发短信
1.输入如下命令进入 Email 配置界面:
# dpkg-reconfigure exim4-config
2.选择 internet site; mail is sent and received directly using SMTP

3.配置你的发信域名

4.保持默认值

- 配置为你的发信域名

6.以下几步保持默认值





7.该步输入 root

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

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

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

注意:收件人手机号一定要加国号 设备安全!!!!! 先给大家看一个截图,

这是目前我的设备被暴力破解的情况。 请一定重视安全问题 再附上我之前的悲惨遭遇:https://www.v2ex.com/t/394297#reply11
1.首先,你的 Extension 一定要给各个账号配置超强的密码
2.其次,使用 Fail2ban 来防暴破。
# install-fail2ban
3.安装 Fail2ban 后,程序会自动启动,我们需要调整下配置,打开 /etc/fail2ban/jail.conf
文件,搜索 [asterisk]
,找到 maxretry
项,修改为 2,就是说密码输入错2次,就会被 Fail2ban 拦截。再搜索下 bantime
,修改为 604800
。配置好后,意味着有人要是输入错两次密码,那么这个人的 IP 就会被屏蔽一周。保存后,执行 systemctl restart fail2ban
重启服务使配置生效。
以上,就是博主正确完成配置的全过程。
顺便推荐一下博主在配置时,参考的一些比较有用的文章:
1.整体操作都很正确,博主最终通过这篇解决了很多问题:出国狗的福音--使用树莓派搭建跨国语音短信设备
2.开头创建用户那里有些毛病,其他过程还好,不过这篇让博主走了很多弯路:从0到1打造自己的网络电话系统
3.这几篇也很不错,可以作为辅助参考一下:
RaspberryPi上搭建和配置RasPBX实现VoIP-GSM网关
Freepbx-VPS搭建SIP服务器实现VOIP通话[图文教程]
4.可能用得上的SS教程:Ubuntu下实现全局翻墙的配置过程
本文大部分图片以及步骤摘抄于:出国狗的福音--使用树莓派搭建跨国语音短信设备 ,再次感谢原作的帮助。
本文大部分注释为繁星博客进行整理。
特别提醒:注意备份!
感谢观看~