拆解一个个人 4G SMS Gateway:Air780E、Docker 与飞牛OS实践
本项目仅用于个人设备管理、海外号码维护和物联网实验场景,不涉及批量短信、验证码接收、营销推广等用途。
-
起初是发现手机sim卡槽不够用了。我寻思着有没有什么方案可以在我的飞牛上跑短信收发及定时保号
-
发现https://github.com/dushixiang/uart_sms_forwarder 这个方案,非常适合我,我刚好有一台n100的飞牛nas。基于 合宙Air780 XXX 系列设备的短信转发系统,支持接收短信并通过串口转发到上位机。该项目支持
- 短信转发
- 短信记录
- 发送短信
- 来电通知
- 支持钉钉、企业微信、飞书、自定义 webhook、邮箱通知
- 计划任务发送短信
-
实现效果如图所示

-

教程
air780硬件初始化
- 下载luatools烧录底层core固件 和 项目lua脚本(在github项目根目录就有)

- 如图所示,我用的是air780ehv,则选择这个固件,记得是luatos。版本都可

- 接着我们直接刷写一下底层固件先,先刷他个一遍,注意目录如图所示,下载的文件在这个目录下。


- 然后点项目管理测试,把脚本和对应的刚才刷入固件放进去,直接点击下载脚本即可。这里的lua脚本在github项目中

- 完成后如图所示,可以看到UART 初始化成功。那么剩下的只有成功跑docker了。


部署UART
修改配置文件(docker-compose and config)
直接拉取俩个文件,dcoker-compose.yml 和 config.yaml(config.example.yaml 改名一下)
其中要修改的部分
docker-compose修改
device,这个必须改
(不可照抄,可用ls /dev/serial/by-id 去查看。我这里是飞牛os) 看到airm2m建议直接全部映射,不要只映射AT,因为不太行,我试过。也不要直接映射ttyxxx,拔插后容易导致识别变动,建议以id为准。
devices:
- /dev/serial/by-id/usb-AirM2M_AirM2M_Compo_000000000001-if02:/dev/ttyUSB0
- /dev/serial/by-id/usb-AirM2M_AirM2M_Compo_000000000001-if04:/dev/ttyUSB1
- /dev/serial/by-id/usb-AirM2M_AirM2M_Compo_000000000001-if06:/dev/ttyUSB2
config修改
这里分为俩个部分,一个是32位随机字符串,我是直接用openssl rand -base64 32生成,
还有一个是bcrypt加密,注意我这里用的是2b版本+12位。(2y版本是临时修复,2a版本在php中有安全隐患)
# JWT配置
JWT:
# 随机生成一个 32 字节的字符串,推荐使用 openssl rand -base64 32 生成
Secret: "D9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx3OOLgbk="
ExpiresHours: 168 # 7天
Users:
# 使用 Bcrypt 加密,默认密码为 admin123,建议首次登录后修改密码,搜索 bcrypt在线加密网站 即可
admin: "$2b$12$W2YxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxXlkJS"
直接 docker compose up -d即可,如果是和我一样的飞牛,点点鼠标就行啦、
这是成功跑起来之后的日志,如果没有跑起来,可以进docker,终端看一下是否成功映射了设备,直接看有没有/dev/ttyUSB0 0可以换成1和2

思考
如此虽然可保号,但对于运营商而言,是可以看到设备imei被用于iot相关用途,特别是这个场景下,只进行保号,很容易被识别为短信网关,建议没事发俩条短信,带点内容,发给谁不重要,重要的是多发。风险来说不如长时间待机在iphone下。
常见问题
-
我跑起来链路断开
- 进docker终端。检查是否成功映射全部关于780的端口,不要只映射AT口
- 上述检查完毕可更换core版本重新刷写,某些版本不支持lua.main里面的内容
-
estk,xesim等是否可使用
- 实测estk可使用,但切换esim不可
-
默认登录账号密码为admin admin123
-
为什么我短信发不出去
- 带区号比如+44 77xxxx 中间去掉空格 +4477xxxx +861888888
- 对面号or你号出问题了,换一个吧兄弟
其余问题和讨论皆可评论区留言