了解 networkextension 框架中提供的 api,这些 api 让你的 app 能够灵活地扩展系统的核心网络功能 — 例如实现网络内容过滤器、创建和管理 vpn 配置等。在 ios、ipados 和 macos 26 中,你现在可以构建更为强大的内容过滤器,让它根据整个 url (而不仅是主机名) 来做出流量决策,同时确保隐私和安全丝毫不受影响。我们将首先简要介绍 networkextension 框架的一些主要用例,包括网络中继和 vpn。然后,我们将深入探讨这一全新的 url 过滤器 api 及其关键组件,包括 private information retrieval、privacy pass 等。
此文章由AI生成,可能存在错误,如有问题,请联系djs66256@163.com
利用 NetworkExtension 优化网络流量过滤与隧道技术
概述
NetworkExtension 框架为开发者提供了一系列强大的 API,用于扩展和定制 Apple 平台的核心网络功能。在 iOS、iPadOS 和 macOS 26 中,该框架引入了全新的 URL 过滤器 API,使得开发者能够基于完整 URL 而不仅仅是主机名来进行流量过滤决策,同时确保了用户的隐私和安全。
NetworkExtension 框架简介
NetworkExtension 是一个功能丰富的框架,允许开发者构建能够扩展和定制 Apple 平台网络能力的应用。该框架与整个网络堆栈紧密集成,包括 Network 框架、CFNetwork、WebKit 和 Sockets API,同时也与系统级组件如路由、流量策略和各类系统管理深度整合。
主要功能
NetworkExtension 框架支持多种网络定制方式:
- Wi-Fi 管理和热点 API(仅 iOS):允许应用配置 Wi-Fi 设置并与 Wi-Fi 热点交互
- 本地推送 API:适用于无法访问 Apple 推送通知服务的网络环境
- DNS 配置和代理 API:用于构建保护 DNS 流量免受攻击的安全应用
- 透明代理 API(仅 macOS):可将特定网站流量重定向至云端安全服务
- 远程资源安全访问:通过隧道技术保护网络流量
- 内容过滤:实现对网络流量的监控和过滤
远程资源访问技术
NetworkExtension 提供了两种主要的方法来实现安全的远程资源访问:
网络中继
网络中继适合需要隧道传输 TCP 或 UDP 流量以访问特定应用的场景。MASQUE 协议提供了安全代理且性能优化,平台内置支持无需额外扩展。
基于 IP 的 VPN
IP VPN 适合企业将公司网络扩展至远程员工,或高安全要求的组织需要将所有管理设备流量通过企业网络传输。
开发者可以通过以下方式创建 IP VPN 隧道:
- 使用 NEVPNManager API 内置协议(IKEv2/IPsec)
- 使用 NEPacketTunnelProvider 实现自定义隧道协议
重要注意事项:
- NetworkExtension 是构建 VPN 应用的唯一官方支持 API
- 禁止使用 Packet Filter 或直接修改 Mac 路由表
- NEPacketTunnelProvider 仅应用于 IP 层流量隧道传输
内容过滤技术
NetworkExtension 的内容过滤 API 允许开发者检查设备流量进行监控或过滤决策。传统的内容过滤器存在以下局限:
- 只能基于流量级信息(如主机和端口)做决策
- HTTPS 加密导致无法获取 URL 详细内容
- 无法精准过滤特定资源
iOS 26 全新 URL 过滤器
iOS 26 引入了全新的 URL 过滤器功能,允许基于完整 URL 进行内容过滤决策。该技术具有以下特点:
应用场景
- 家长控制应用屏蔽有害网站
- 学校应用限制社交媒体/赌博等内容
- 企业屏蔽与工作无关的内容
隐私保护设计
- 采用最先进加密技术
- URL 敏感信息不会泄露给应用
- 后端服务器查询完全匿名化
- Apple 和服务器都无法获取内容与身份信息
技术实现四大支柱
- Bloom 过滤器:快速预过滤(可能假阳性但无假阴性)
- 私有信息检索 (PIR):使用同态加密实现加密查询
- 隐私通行证 (Privacy Pass):匿名认证机制
- 无感 HTTP 中继 (Oblivious HTTP Relay):隐藏客户端 IP 地址
实现步骤
开发者可以通过以下步骤实现 URL 过滤器:
- 设置 PIR 服务器
- 构建 Bloom 过滤器
- 构建 URL 过滤应用
- 构建应用扩展
示例代码:1
2
3
4
5
6
7
8let manager = NEURLFilterManager.shared
try await manager.loadFromPreferences()
try manager.setConfiguration(
pirServerURL: URL(string:"https://pir.example.com")!,
pirPrivacyPassIssuerURL: URL(string:"https://privacypass.example.com")!,
pirAuthenticationToken: "1234",
controlProviderBundleIdentifier: "com.example.myURLFilter.extension")
manager.prefilterFetchInterval = 86400 // 每日更新
总结
NetworkExtension 框架为开发者提供了强大的工具,使其能够:
- 使用网络中继安全访问 TCP/UDP 流量
- 构建完整的 VPN 解决方案
- 通过 URL 过滤 API 创建强大的内容过滤器
开发者可以立即查看相关示例和文档开始开发工作。
相关视频
文档资源
按 URL 过滤流量
NEHotspotManager
Network Extension
NEURLFilterManager
PIRService
TN3120:网络扩展包隧道提供商的预期用例
TN3165:包过滤器不是 API
verdict(for:))