网络隔离
约 917 字大约 3 分钟
2026-04-26
网络隔离 在内核层面阻止指定应用的网络访问。被隔离的应用发起 IPv4/IPv6 网络连接时,内核直接返回 ECONNREFUSED(连接被拒绝),实现完全断网。默认关闭。
配置路径:设置页右上角功能按钮 → 网络隔离
工作原理
网络隔离基于 KernelPatch 的 SuperCall 机制,在内核系统调用层拦截出站网络请求。通过挂钩以下系统调用实现:
connect(syscall 203)— 拦截 TCP 连接建立sendto(syscall 206)— 拦截指定目标地址的 UDP 发送
当被隔离的 UID 尝试发起 IPv4 或 IPv6 网络连接时,内核直接返回 -ECONNREFUSED 并跳过原始系统调用,应用收到「连接被拒绝」错误。
与 iptables/netfilter 方案不同,网络隔离完全通过系统调用挂钩实现,不依赖任何网络协议栈组件。
过滤规则
| UID 范围 | 是否拦截 | 说明 |
|---|---|---|
| FolkPatch 自身 | 不拦截 | 管理器始终豁免,确保可正常操作 |
| 系统 UID (< 10000) | 不拦截 | Root、system 等系统进程不受影响 |
| 用户选定的应用 UID | 拦截 | 仅选中应用的出站网络请求被阻止 |
| 未选定的应用 UID | 不拦截 | 其他应用完全不受影响 |
使用方法
- 开启网络隔离开关
- 点击添加应用,从应用选择器中选择需要隔离的应用
- 被选中的应用将立即失去 IPv4/IPv6 出站网络访问能力
选中的应用会以卡片形式展示,支持快速移除。
覆盖范围
网络隔离 仅拦截出站网络请求,具体行为如下:
| 行为 | 是否拦截 | 说明 |
|---|---|---|
| TCP 连接(connect) | 拦截 | 被隔离应用无法建立 TCP 连接 |
| UDP 发送(sendto) | 拦截 | 被隔离应用无法向指定地址发送 UDP 数据 |
| 本地套接字(AF_UNIX) | 不拦截 | 本地进程间通信不受影响 |
| 蓝牙等其他协议 | 不拦截 | 非网络协议不受影响 |
| 入站连接(bind/listen/accept) | 不拦截 | 不影响应用监听端口 |
| 接收数据(recvfrom/recvmsg) | 不拦截 | 不阻止接收数据 |
提示
网络隔离是 UID 级别的全量拦截——不区分目标 IP、端口或协议版本(IPv4/IPv6 均被拦截)。如需更精细的网络控制,请配合使用其他网络工具。
自动应用
网络隔离配置由 apd 守护进程 在开机时(post-fs-data 阶段)自动读取并按以下顺序应用:
- 清空内核 UID 屏蔽列表
- 逐一添加配置中的 UID
- 最后开启网络隔离(确保所有配置就绪后再启用)
确保在任何应用启动前网络隔离已生效,无需手动打开管理器。
/data/adb/fp/netisolate
enabled# 启用标记文件
uids# 被隔离的 UID 列表(每行一个)
注意
- 最多支持隔离 256 个应用 UID
- 系统关键应用被隔离后可能导致设备功能异常,请谨慎选择
- 网络隔离基于内核层实现,需要 KernelPatch 内核支持
- 已卸载应用的 UID 不会自动清理,建议手动移除
相关功能
版权所有
版权归属:FolkPatch Team
