一、前言
距离上一次使用 GiffGaff WiFi Calling 已经有两年的时间了,当时只需要设备支持 WiFi Calling 功能即可该功能。
但是后来 GiffGaff 对设备开启 WiFi Calling 的条件进行了限制,不仅指定了设备范围,还要求只能在英国境内使用。
根据 GiffGaff 官方的文档 [ Understanding WiFi calling and VoLTE ] :Pixel 系列只有 Pixel 7 及后续版本才支持开启 GiffGaff 的 WiFi Calling ,很遗憾我的设备 Pixel 6 Pro 并不在其中。
Pixel 6 Pro 硬件和系统本身是具备 WiFi Calling 能力的,限制只是因为 GiffGaff 的限制导致无法开启。
那么 GiffGaff 究竟是通过何种机制来限制设备开启 Wi-Fi Calling 的呢?
- APN?
- 设备型号?
- 网络环境?
- IMS 注册参数?
- 还是其他暂时不明确的配置
两年间我尝试了各种方案,但是都没有成功开启 Wi-Fi Calling,这一度让我放弃了折腾。
但是最近看到了一篇帖子提到无法开启 WiFi Calling 可能是因为缺少 IMS APN,添加该 APN 后即可开启。
其帖子内容又让我燃起了继续折腾的想法,想要看看到底能不能开启。
二、IMS 配置工具
针对 Pixel 在中国大陆使用时的适配问题,需要借助 IMS 配置工具来开启部分官方隐藏或默认关闭的通信功能。
目前较为常用的 IMS 配置工具包括 Pixel IMS、Carrier IMS for Pixel、TurboIMS 以及 OneIms 等。
这些工具的使用方式相对简单,既支持通过 Root 权限直接完成配置,也支持利用 Shizuku 配合无线调试,在无需 Root 的情况下完成相关 IMS 参数修改与功能启用。
Pixel IMS
Pixel IMS 是目前 Pixel 用户中广泛使用的 IMS 配置工具,也是我长期使用的一款工具。
早期我便是通过 Pixel IMS 成功开启 GiffGaff WiFi Calling 功能。不过,在后续尝试中发现 GiffGaff 的 WiFi Calling 无法再次启用时,我一度认为 Pixel IMS 已经失效。
经过进一步测试发现,问题并非完全来自 Pixel IMS 本身,而更多与运营商配置、系统版本以及 IMS 参数适配有关。
TurboIMS
TurboIMS 同样是一款较为流行的 IMS 配置工具。
相比 Pixel IMS,TurboIMS 主要是在基础 IMS 配置功能上增加了 5G 相关配置支持。其操作界面更加简洁,但整体功能覆盖范围相比 Pixel IMS 略少。
对于只需要开启基础 IMS 功能,或需要额外配置 5G IMS 特性的用户,TurboIMS 也是一个不错的选择。
OneIms
OneIms 是一款较新的 IMS 配置工具,采用 Cursor 辅助开发。
这是我近期正在尝试使用的一款工具。相比 Pixel IMS,OneIms 在功能整合方面更加完善,但目前界面设计仍有一定优化空间,整体布局略显杂乱。
目前 OneIms 仍处于持续完善阶段,不过核心功能已经较为稳定,可以满足日常 IMS 配置需求。
相比传统 IMS 配置工具仅提供参数修改功能,OneIms 其更侧重于 IMS 状态检测和问题排查。其集成了较为丰富的诊断能力,可以帮助用户从多个方面分析 IMS 异常原因。
不过,目前该项目尚未公开源代码,且其通过 Shizuku 调用系统 API 完成,因此在使用时建议注意权限授予范围,并根据自身需求谨慎使用。
Carrier IMS for Pixel
Carrier IMS for Pixel是基于 TurboIMS 开发的一款 IMS 配置工具。
其功能与 TurboIMS 相似,但缺少 IMS User Agent 配置功能,而该配置项在后续 IMS 适配过程中较为关键。因此,在本文后续配置流程中并不推荐使用该工具。
不过 Carrier IMS for Pixel 仍具有一些特色功能,例如支持 5G 相关配置,以及提供修复 TikTok 无网络问题的功能。
如果用户仅需要基础 IMS 功能或特定功能修复,Carrier IMS for Pixel 仍可以作为一个备选方案。
三、IMS APN
根据帖子的描述:部分 Pixel 因为运营商配置中缺少 IMS APN,即便通过 IMS 配置工具强行开启,依然无法启用 Wi-Fi Calling。但在手动添加 IMS APN 后 WiFi Calling 功能即可恢复正常。
IMS APN 配置如下:
- APN 名称:IMS
- APN:IMS
- APN 类型:ims
- APN 协议:IPV4
- APN 漫游协议:IPV4
但是经过我的测试,发现该方法并没有成功开启 GiffGaff 的 WiFi Calling。
这此让我再次对 Pixel IMS 的实际效果产生了怀疑。于是我清除了 Pixel IMS 写入的全部配置,切换到 OneIms 写入相同的配置方案进行测试。
但测试结果并没有出现变化,依旧无法开启 GiffGaff 的 WiFi Calling。
通过 *#*#4636#*#* 查询 IMS 服务状态,发现任何 IMS 配置的修改都会导致 IMS 状态从已注册变成未注册。
四、OneIms 诊断与修复
借助 OneIms 的诊断与修复功能,经过多次调试我发现 ePDG 连接检测功能显示 已解析到对应 IP,但网络连接不可达。
经过查询了解到 ePDG 是 VoWiFi 网络架构中的关键组件,负责在用户设备与运营商 IMS 核心网络之间建立安全连接。
设备连接 WiFi 后需要通过 ePDG 建立 IPSec 隧道,进而连接到运营商的 IMS 网络才能完成 WiFi Calling 连接。
WiFi |ePDG |IPSec Tunnel |IMS Core |VoWiFi如果 ePDG 无法正常连接,设备就无法启用 WiFi Calling。这也正体现了 GiffGaff 对开启 WiFi Calling 网络的要求。
五、英国网络环境
软件代理的局限性分析
为适配英国网络环境,尝试在 Pixel 设备上启用全局代理,OneIms 的 ePDG 连接检测功能虽显示连接成功,但检查发现该检测机制存在缺陷。
通过分析代理日志发现:该检测功能基于 ICMP 协议实现,而代理软件采用 Fake IP 技术进行流量转发,导致 OneIms 实际探测的并非 GiffGaff ePDG 的真实 IP 地址,检测结果仅能反映与 GiffGaff ePDG Fake IP 的 ICMP 可达性,无法验证 ePDG 服务的真实可用性。
进一步了解发现,WiFi Calling 并非基于 TCP 协议,而是采用 UDP 协议,通过 IKE/IPSec 建立安全隧道,主要依赖 UDP 500 和 UDP 4500 端口进行数据传输。
并且 WiFi Calling 的 ePDG 流量属于系统层流量,而非应用层流量。因此在非 root 环境下,软件代理仅能拦截和转发应用层流量,无法对系统层流量进行代理。
因此 ePDG 连接检测功能仅能表示当前设备是否可以与 GiffGaff 的 IMS 核心网络进行连接,无法确认是否可以连接 WiFi Calling。
L3 网络层实现英国网络环境
鉴于软件代理的局限性,所以尝试构建 英国网络下的 L3 网络层环境。
最直接的方案是利用其他设备安装英国手机卡并开启热点共享漫游流量,Pixel 连接热点等于接入英国网络环境。
该方法可以完美解决软件代理无法转发 IKE/IPSec 流量的问题,理论上等同于设备直连英国原生网络。
若条件受限,亦可借助软路由或 Windows 端共享代理软件的tun网卡流量至热点网卡实现模拟英国网络环境。
切换到英国网络环境后 ePDG 检测结果显示连通正常,流量监控显示设备有访问 GiffGaff 的 ePDG 地址epdg.epc.mnc010.mcc234.pub.3gppnetwork.org,DNS 解析与数据响应均无异常。
流量监控还显示设备在不断访问 87.194.0.0/16 网段的 UDP 500 和 UDP 4500 端口,这标志着 ePDG 隧道建立流程已从 DNS 解析阶段正式进入 IKE 协商阶段。
但是经过多次测试还是无法成功 WiFi Calling 功能,这说明当前问题已经不再是 ePDG 域名解析或基础网络连通性问题,而是 IKE 协商或 IMS 注册鉴权环节存在问题。
六、IMS User Agent
于是我的排查方向重新回到了 GiffGaff 社区以及相关官方文档。
既然 GiffGaff 限制 Pixel 7 及后续版本才支持开启 WiFi Calling,那么运营商又是通过什么方式判断设备是否属于支持列表中的设备?
这时一个之前并未重点关注的配置项进入了我的视线——IMS User Agent。
IMS User Agent 让我联想到了浏览器访问网站时请求头中自带的 User Agent。服务器可以通过 User Agent 获取客户端的设备、系统等信息,虽然 User Agent 本身可以被修改,但仍然可以作为判断客户端类型的一种方式。
那么 IMS User Agent 是否也具有同样的作用?运营商是否会通过 IMS User Agent 判断设备型号,判断设备是否属于支持列表中的设备,从而开启 WiFi Calling?
于是打算使用 Pixel IMS 修改 IMS User Agent,其默认格式为:
#MANUFACTURER#_#MODEL#_Android #AV#_#BUILD#Pixel IMS 会在设备进行 IMS 注册时,根据设备当前的信息自动替换其中的变量:
- #MANUFACTURER# 会替换为设备制造商
- #MODEL# 会替换为设备型号
- #AV# 会替换为 Android 版本
- #BUILD# 会替换为当前系统 Build 版本
以运行 Android 16,Build 版本为 CP1A.260405.005 的 Pixel 6 Pro 为例 ,其 IMS User Agent 为:
Google_Pixel6Pro_Android16_CP1A.260405.005为了满足 GiffGaff 官方针对设备的要求,于是尝试模拟 Pixel 7 Pro 的 IMS User Agent。
因为 Pixel IMS 会自动替换模板中的变量,因此只需要修改 #MODEL# 参数,无需修改其他参数。
在修改过程中发现,Pixel IMS 提供的模板存在问题,Android 与 #AV# 之间多了一个空格。
因此修改 #MODEL# 为 Pixel7Pro,并删除 Android 与 #AV# 之间的空格即可。
#MANUFACTURER#_Pixel7Pro_Android#AV#_#BUILD#需要注意的是,OneIms 等其他工具不使用模板配置,需要完整填写 IMS User Agent。
Google_Pixel7Pro_Android16_CP1A.260405.005随后在 Pixel IMS 中点击重新注册 IMS,此时设备出现了无信号的情况。
于是打算开关飞行模式重置网络,但是开启飞行模式后意外发现设备开始产生大量请求 87.194.0.0/16 网段的 UDP 500 和 UDP 4500 端口。
于是我再次点击重新注册 IMS 后,信号栏也终于出现了久违的 GiffGaff WiFi Calling 标识。
通过 *#*#4636#*#* 查询 IMS 服务状态,确认 IMS 和 WiFi Calling 状态均为已注册。
这说明 GiffGaff 确实是通过 IMS User Agent 来识别设备是否在允许设备列表中的。
七、蜂窝注册与 IMS APN 的必要条件验证
在关闭飞行模式后发现设备仍有大量的 ePDG 连接,但是却始终无法成功启用 WiFi Calling。
但重新开启飞行模式后 WiFi Calling 即可恢复连接,这说明在当前环境下只有飞行模式才满足 WiFi Calling 启用条件。
结合 GiffGaff WiFi Calling 的开启条件表明:当检测到设备连接至非英国本地基站时,蜂窝网络与 WiFi Calling 存在冲突,GiffGaff 系统会禁止在此场景下启用该功能。
于是我重置了所有的 IMS配置 和 APN 设置并重启设备,尝试进一步分析连接 GiffGaff WiFi Calling 所需的必要条件。
重启后我立即开启了飞行模式,按照刚才的步骤重试连接,虽然能看到大量的 ePDG 连接,但是这次怎么都无法开启 WiFi Calling。
期间因为接码需要,我关闭了飞行模式,然后重新开启飞行模式时发现设备已经成功开启了 WiFi Calling。
这说明 Wi-Fi Calling 的开启并非仅依赖 ePDG 连接,更需以蜂窝网络注册与 IMS 信令交互为前提。
蜂窝注册后获取的 IMS 鉴权密钥(IK/CK)是生成 ePDG 隧道 EAP-AKA’ 凭证的关键,可防止身份盗用。
纯飞行模式下虽能产生 ePDG 流量,但因缺失鉴权密钥无法通过验证,故无法成功启用 WiFi Calling。
同时在未手动添加 IMS APN 的情况下成功开启 WiFi Calling 功能,表明 IMS APN 并非 GiffGaff WiFi Calling 的绝对必要条件。
但其他用户反馈 Pixel 8 Pro 手动添加 IMS APN 搭配英国网络即可启用,说明该配置的必要性高度依赖于设备型号、系统版本及运营商配置下发策略,存在明显的设备差异性。
八、总结
经实测验证,GiffGaff Wi-Fi Calling 的启用需同时满足以下四项核心条件:
- 设备兼容性:需要使用符合 GiffGaff 支持列表要求的设备,或通过自定义 IMS User Agent 模拟符合要求的设备
- 网络环境:必须处于纯英国网络环境,若存在非英国本地基站的情况下蜂窝网络与 WiFi Calling 存在冲突
- 激活流程:需先完成蜂窝网络注册以获取 IMS 鉴权密钥(IK/CK),再开启飞行模式建立 ePDG 隧道,纯飞行模式下因缺失鉴权凭证无法激活功能
- IMS APN 配置:部分设备需手动设置 IMS APN,该配置的必要性存在设备差异性
非商业用途可以使用,但必须注明出处;
若有改编需采用相同许可协议发布。