Android iptables 说明文档
Android 底层基于 Linux,使用 iptables 操作内核 netfilter 子系统;必须 Root 权限才能修改规则。
Android 由 netd 守护进程维护系统网络规则,会生成很多自定义链;规则全部内存生效,重启手机全部丢失。
IPv6 使用 ip6tables;Android 12+ 部分设备逐步迁移到 nftables。
目录
基础说明
- 执行环境:
adb shell → su 获取root
- 路径:一般
/system/bin/iptables
- 规则结构:表 → 链 → 规则,从上向下匹配,命中即执行动作。
- Android 系统存在大量 netd 创建的自定义链(
natctrl_*、oem_*),不要随意全部清空,会破坏热点、VPN、网络策略。
表 Table
| 表名 |
用途 |
Android说明 |
filter |
数据包过滤(允许/丢弃) |
默认表,控制本机入站、出站、转发流量 |
nat |
网络地址转换 DNAT/SNAT/REDIRECT |
热点共享、透明代理、端口重定向高频使用 |
mangle |
修改报文TTL、打mark标记 |
透明代理、流量标记常用 |
raw |
关闭连接跟踪 |
高级调优,普通场景很少使用 |
不指定 -t,默认使用 filter 表。
内置链 Chain
filter 表
| 链 |
作用 |
INPUT |
发给本机的入站数据包 |
OUTPUT |
本机APP进程发出的出站数据包 |
FORWARD |
设备热点:经过本机转发的数据包 |
nat 表
| 链 |
作用 |
PREROUTING |
数据包刚到达,做DNAT端口映射 |
OUTPUT |
本机进程发出报文NAT/REDIRECT(透明代理主要用这条链) |
POSTROUTING |
报文离开本机,SNAT/MASQUERADE(热点共享上网) |
Android 特有要点
-m owner --uid-owner <UID>:Android独有高频模块,按APP的UID匹配流量,实现单APP流量拦截/重定向。
- netd 服务会动态重写iptables,部分场景手动添加规则会被系统覆盖。
- 开启Wi‑Fi热点,系统自动大量写入nat/filter规则,不要直接
iptables -F全量清空,会导致热点失效。
- 网络接口名:移动数据一般
rmnet0,Wi‑Fi一般wlan0。
- IPv6需要独立使用
ip6tables,iptables完全不处理ipv6流量。
命令语法格式
iptables [-t 表名] 命令选项 [链名] [匹配条件] -j 动作