每日签到奶昔超市积分商城奶昔访达
1234下一页
返回列表 发布新帖

我写了一个WifiCalling基于OpenWrt / ImmortalWrt 的独立 LuCI 插件

 
1610 61
发表于 7 天前 | 查看全部 阅读模式

登录后免广告,享受更多奶昔会员权益!

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 henryipkk 于 2026-8-11 13:14 编辑

面向 OpenWrt / ImmortalWrt 的独立 LuCI 插件。它把指定局域网设备通过指定的 sing-box 节点转发,同时让其他设备继续走路由器默认路由,并观察 Wi‑Fi Calling 常用的 ePDG/IPsec UDP 500、4500 会话证据。

设置
Wi-Fi Calling Gateway 设置页面

Wi-Fi Calling 状态
Wi-Fi Calling 状态页面

活动日志
加密 IMS 活动日志页面

iPhone 实机观察
下图为实际 iPhone 在飞行模式及 Wi‑Fi 环境中显示 EE WiFiCall 的状态:

iPhone 实机显示 EE WiFiCall


该截图证明终端已显示 Wi‑Fi Calling 注册状态;是否完成号码激活及呼叫能力,仍应以实际通话或运营商确认结果为准。

功能
支持 AnyTLS、Hysteria2、TUIC、VLESS Reality、VMess WebSocket、Trojan 与 WireGuard 七种节点协议。
支持直接粘贴 AnyTLS、Hysteria2/Hy2、TUIC、VLESS、VMess、Trojan (trojan://) 与 WireGuard (wg://) 分享链接并自动解析导入。
DHCP 静态租约自动管理:添加/删除设备策略时自动绑定/清理 MAC-IP 静态租约,兼容 iOS 私有 Wi-Fi 地址(MAC 随机变化);设备策略表实时显示绑定状态(已绑定 / 待绑定 / MAC 已变化 / 设备未在线)。
每台设备可绑定一个节点;一个策略可包含多个固定私网 IPv4 地址。
独立通道:通过插件节点转发;跟随网关:插件不拦截,设备走路由器默认路由。
单个 sing-box 进程、nftables TPROXY、TCP 与 UDP 透明转发。
节点 ICMP/TCP 可达性与延迟检测(TCP 系协议在 ICMP 被阻断时自动回退 tcping)。
内置简体中文界面(语言包随安装包提供);中文说明与状态,协议名与技术字段(TLS、UDP、UUID、SNI、ALPN、Reality、WebSocket 等)保留英文。
设置、Wi‑Fi Calling 状态、加密 IMS 活动日志分为三个独立管理页面。
观察 UDP 500/4500,显示注册状态、ePDG、ASSURED、包计数及最后活动时间。
只记录握手成功/失败与持续加密通讯(响铃或通话,持续数秒以上);每台设备默认独立保留最近 20 条,可在设置中调整或关闭活动日志。
启动前执行 sing-box check;配置和运行时凭据权限设为 0600。
节点协议选择(重要)
⚠️ 网关出口节点请使用 TCP 系协议(AnyTLS / VLESS / VMess / Trojan)。

TCP 系在公网丢包/抖动下提供可靠有序的传输,IPsec keepalive 与 RTP 语音不丢,适合作为 Wi‑Fi Calling 出口。
UDP/QUIC 系(Hysteria2、TUIC)实测不适合:节点的"在线"状态仅代表 ICMP 可达(不是代理握手成功),UDP-in-UDP 在公网抖动下会导致拨号立即中断;曾实测因 Hysteria2 节点代理链路不通导致被路由设备无互联网。
WireGuard 为 UDP 协议但自带保活与重传机制,可作为出口(插件自动适配 sing-box ≥1.11 的 endpoint 形式)。
设备使用提示
iOS 默认启用"私有无线局域网地址",MAC 会随机变化,导致手工 DHCP 绑定失效。本插件(≥1.7.0)在服务启动时自动从当前租约重新绑定设备 MAC,设备重连 Wi-Fi(或重启)即可自动恢复,无需手工改配置。
添加设备策略后,若设备 IP 与策略不符,重启设备网络(关 Wi-Fi 再开)让其重新获取 DHCP 地址。
支持环境
项目        支持范围
固件        OpenWrt / ImmortalWrt / iStoreOS,firewall4 + nftables
24.10 系(opkg/IPK)        OpenWrt 24.10、ImmortalWrt 24.10、iStoreOS 24.10 共用一个 IPK,全部实测
25.12 系(apk/APK)        OpenWrt / ImmortalWrt 25.12 共用一个 noarch APK,四种芯片全部实测
25.12 芯片实测        x86_64 ✅ aarch64 ✅ armv7 ✅ mipsel ✅(官方 25.12.3 rootfs + qemu 用户态模拟)
已实机验证        ImmortalWrt 24.10.6,Redmi AX6S,aarch64_cortex-a53(真实路由器)
iStoreOS 实测        24.10.7 完整固件(QEMU 全系统模拟,与用户报错同版本):安装 + 服务 active + LuCI 设置/状态/活动日志页面全中文实测通过
容器/模拟验证        OpenWrt 24.10.8 / 25.12.3 官方 rootfs;iStoreOS 24.10.5(Docker)、24.10.7(QEMU 完整固件)
sing-box        建议 1.13.0 或更高;IPK 不锁版本(兼容各源较旧版本),25.12 官方源自带(armv7/mipsel 实测自动装 1.12.17)。WireGuard 节点自动适配:sing-box ≥1.11 用 endpoint 形式,1.10.x 及更早用旧版 outbound(均经 1.10.0/1.11.7/1.12.0/1.13.18 实测)
LuCI        JavaScript 视图(现代 LuCI)
网络        IPv4 LAN 策略;设备策略自动同步 DHCP 静态租约(增删设备自动绑定/清理 MAC-IP,兼容 iOS 私有 MAC 变化)
包架构        IPK all(Shell 与 LuCI 资源);APK noarch(25.12 apk 不接受 all,官方包按目标架构分发)
依赖:luci-base、sing-box、firewall4、kmod-nft-tproxy、kmod-nft-socket、ip-full。

快速安装
从 Releases 下载最新稳定版(当前为 1.7.0),上传到路由器后安装。24.10 全系用一个 .ipk,25.12 全系用一个 .apk(noarch,不分芯片)。

OpenWrt / ImmortalWrt / iStoreOS 24.10.x(opkg / IPK) —— 一个包通用,已实机验证:

opkg update
opkg install ./luci-app-wificalling-gateway_1.7.0-1_all.ipk
/etc/init.d/rpcd restart
iStoreOS 提示:部分 opkg 对 ./ 相对路径或上传位置会报误导性的 "No such file or directory"。请确认文件真实上传成功后再用绝对路径安装:

opkg install /root/luci-app-wificalling-gateway_1.7.0-1_all.ipk
若 iStoreOS 的定制 opkg 对本地文件报 incompatible with the architectures configured(已实测),可改用解包安装(24.10.7 完整固件实测通过):

cd /tmp && tar xzf luci-app-wificalling-gateway_1.7.0-1_all.ipk && tar xzf data.tar.gz -C /
/etc/init.d/wificalling-gateway enable && /etc/init.d/wificalling-gateway start
OpenWrt / ImmortalWrt 25.12.x(apk / APK) —— 一个 noarch 包,覆盖 x86_64 / aarch64 / armv7 / mipsel 全芯片,已全部实测:

apk update
apk add --allow-untrusted ./luci-app-wificalling-gateway_1.7.0-r1_noarch.apk
/etc/init.d/rpcd restart
然后进入 服务 → Wi‑Fi Calling Gateway。先添加并保存节点,再添加设备策略。详细步骤见安装说明和配置说明。

重要边界
⚠️ 定位要求(Wi-Fi Calling 生效前提)

运营商要求设备定位与 SIM 卡归属地一致才能激活 Wi-Fi Calling。本插件通过对应国家的节点提供该国 IP,但不控制设备自身的定位(GPS / 基站 / wloc)。设备需要通过虚拟定位将位置设为 SIM 卡归属地,否则 Wi-Fi Calling 无法触发。

解决方法:使用 ios-location-spoofer 配合小火箭(Shadowrocket)劫持 iOS 定位到 SIM 卡归属地。这是独立于本插件的项目。

本插件只提供网络转发和可观察证据,不修改手机定位、运营商账户、IMS 配置或紧急呼叫地址。likely_registered 仅表示观察到双向 ASSURED UDP 4500;Wi‑Fi Calling 图标、UDP 500/4500 或高流量均不能单独证明号码已激活或电话一定能接通。请遵守运营商条款和所在地法律,并在真实设备上完成通话验证。
爱生活,爱奶昔~
estkme

评论61

GodtokooLv.9 发表于 7 天前 来自手机 | 查看全部
henryipkk 发表于 2026-8-7 20:33
我连url都发不出来,别提什么图片了,我不明白论坛设置这个有啥意义?不是应该鼓励发帖么?怎么连图片,u ...

我们没有邀请码限制,再不加等级限制,都要被爆破了。况且很多论坛都是要求用图床的,根本不提供上传接口。来了应该入乡随俗了解规则,不是无端指责。
爱生活,爱奶昔~
回复 支持 1 反对 0

使用道具 举报

henryipkk楼主Lv.2 发表于 4 天前 | 查看全部
mojo 发表于 2026-8-10 13:09
报错,无法安装。
root@OpenWrt:~# apk add ./luci-app-wificalling-gateway_1.5.0-r1_all.apk --allow-u ...

全部用docker安装测试完毕,都正常,你再试一试,感谢反馈。
项目        支持范围
固件        OpenWrt / ImmortalWrt / iStoreOS,firewall4 + nftables
24.10 系(opkg/IPK)        OpenWrt 24.10、ImmortalWrt 24.10、iStoreOS 24.10 共用一个 IPK,全部实测
25.12 系(apk/APK)        OpenWrt / ImmortalWrt 25.12 共用一个 noarch APK,四种芯片全部实测
25.12 芯片实测        x86_64 ✅ aarch64 ✅ armv7 ✅ mipsel ✅(官方 25.12.3 rootfs + qemu 用户态模拟)
已实机验证        ImmortalWrt 24.10.6,Redmi AX6S,aarch64_cortex-a53(真实路由器)
容器/模拟验证        OpenWrt 24.10.8 / 25.12.3 官方 rootfs;iStoreOS 24.10.5 / 24.10.7(Docker 与 QEMU 完整固件)
sing-box        建议 1.13.0 或更高;IPK 不锁版本(兼容各源较旧版本),25.12 官方源自带(armv7/mipsel 实测自动装 1.12.17)
LuCI        JavaScript 视图(现代 LuCI)
网络        IPv4 LAN 策略;设备必须使用 DHCP 静态租约
包架构        IPK all(Shell 与 LuCI 资源);APK noarch(25.12 apk 不接受 all,官方包按目标架构分发)
依赖:luci-base、sing-box、firewall4、kmod-nft-tproxy、kmod-nft-socket、ip-full。

爱生活,爱奶昔~
henryipkk楼主Lv.2 发表于 6 天前 | 查看全部
后台日志也能看清楚,是否握手成功:
2026/8/8 11:55:42        iPhone12        192.168.1.18        未检测到        握手失败        0 ↑ / 0 ↓        加密活动;无法区分通话/短信
2026/8/8 11:51:35        iPhone12        192.168.1.18        已注册        握手成功        2800 ↑ / 1308 ↓        加密活动;无法区分通话/短信
2026/8/8 11:51:29        iPhone12        192.168.1.18        未检测到        握手失败        0 ↑ / 0 ↓        加密活动;无法区分通话/短信
2026/8/8 11:49:34        iPhone12        192.168.1.18        已注册        持续通讯        20 ↑ / 2 ↓        加密活动;无法区分通话/短信
爱生活,爱奶昔~
hiadminLv.1 发表于 7 天前 来自手机 | 查看全部
优秀👍,回头试试
爱生活,爱奶昔~
nw16xeLv.2 发表于 7 天前 来自手机 | 查看全部
沃艹论坛全是大手子
爱生活,爱奶昔~
我数到三Lv.1 发表于 7 天前 来自手机 | 查看全部
我是说都是文字  没截图看得方便啊
爱生活,爱奶昔~
henryipkk楼主Lv.2 发表于 7 天前 | 查看全部
我数到三 发表于 2026-8-7 20:05
我是说都是文字  没截图看得方便啊

我连url都发不出来,别提什么图片了,我不明白论坛设置这个有啥意义?不是应该鼓励发帖么?怎么连图片,url都进行限制?
爱生活,爱奶昔~
GodtokooLv.9 发表于 7 天前 来自手机 | 查看全部
升级到正式会员就可以解锁所有功能了
爱生活,爱奶昔~
henryipkk楼主Lv.2 发表于 7 天前 | 查看全部
Godtokoo 发表于 2026-8-7 20:35
我们没有邀请码限制,再不加等级限制,都要被爆破了。况且很多论坛都是要求用图床的,根本不提供上传接口 ...

不好意思,不是指责,仅仅是觉得很不方便,发个牢骚而已。
爱生活,爱奶昔~
V_VLv.3 发表于 7 天前 | 查看全部
加⭐,以后可以试试
爱生活,爱奶昔~
zzfLv.3 发表于 7 天前 | 查看全部
如果可以支持openwrt25.12版本的apk包就好了
爱生活,爱奶昔~
福禄Lv.2 发表于 6 天前 | 查看全部
这个屌呀,老玩家了
爱生活,爱奶昔~
henryipkk楼主Lv.2 发表于 6 天前 | 查看全部
zzf 发表于 2026-8-7 23:58
如果可以支持openwrt25.12版本的apk包就好了

我没有这个环境,不敢担保可以用,你可以安装试一试,应该可以用,有什么bug,可以反馈到我的git上
爱生活,爱奶昔~
henryipkk楼主Lv.2 发表于 6 天前 | 查看全部
zzf 发表于 2026-8-7 23:58
如果可以支持openwrt25.12版本的apk包就好了

早上干了半天,测试完毕,完全支持25以上版本了。
支持环境
项目        支持范围
固件        OpenWrt / ImmortalWrt,firewall4 + nftables
已实机验证        ImmortalWrt 24.10.6,Redmi AX6S,aarch64_cortex-a53
源码兼容        ImmortalWrt 24.10 与 25.12(ucode dispatcher 的 i18n 加载路径、luci.mk 的 LUCI_LC_ALIAS.zh_Hans=zh-cn、sing-box/firewall4/kmod-nft-tproxy 依赖均一致)
sing-box        建议 1.13.0 或更高版本
LuCI        JavaScript 视图(现代 LuCI)
网络        IPv4 LAN 策略;设备必须使用 DHCP 静态租约
包架构        all(Shell 与 LuCI 资源);运行能力取决于目标 sing-box 包
依赖:luci-base、sing-box、firewall4、kmod-nft-tproxy、kmod-nft-socket、ip-full、tcping。

爱生活,爱奶昔~
mojoLv.2 发表于 6 天前 来自手机 | 查看全部
感谢大佬。 这方式能否作为长期接入Wi-Fi calling使用呢?
爱生活,爱奶昔~
christ36Lv.2 发表于 6 天前 | 查看全部
卧槽,不愧是大佬,之前大疆的时候就想能不能集成到OPENWRT里
爱生活,爱奶昔~
PeterLeeLv.1 发表于 6 天前 | 查看全部
感谢大佬🙏🏻
爱生活,爱奶昔~
henryipkk楼主Lv.2 发表于 6 天前 | 查看全部
mojo 发表于 2026-8-8 12:23
感谢大佬。 这方式能否作为长期接入Wi-Fi calling使用呢?

可以,我今天测试了,用cte的卡拨出139的号码,包括打进来都可以,唯一没测试成功的是用ip电话打不通,直接国际电话都能打通。短信也没问题。
爱生活,爱奶昔~
xiaol212Lv.1 发表于 6 天前 来自手机 | 查看全部
nb,。。。。。。
爱生活,爱奶昔~
回复

使用道具 举报

BingBing0101Lv.1 发表于 6 天前 来自手机 | 查看全部
感谢大佬
爱生活,爱奶昔~

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

© 2026 Naixi Networks. 沪ICP备13020230号-1|沪公网安备 31010702007642号手机版小黑屋RSS
返回顶部 关灯 在本版发帖
快速回复 返回顶部 返回列表