Android IP路由策略和防火墙
Platform: RK3368
OS: Android 6.0
Kernel: 3.10.0
文章目录
- Android IP路由策略和防火墙
- ip route, ip rule, iptables简介
- ip route
- ip rule
- iptables
- Android路由策略
- Android路由策略优先级
- 命令查看当前路由策略
- Android路由表
- 命令查看路由表
- 命令查看所有路由表:
- 命令查看主路由表:
- Android防火墙
ip route, ip rule, iptables简介
ip route
ip route 是用于配置路由器静态路由的命令,在Linux系统中,它是iproute2工具套件的一部分,用于操作路由表。ip route命令的功能非常强大,可以显示、添加、删除、修改路由,以及清除整个路由表或路由缓存。使用ip route时,可以对多达255个路由表中的任何一个进行操作,而route命令则主要在主路由表(表254)上运行。
主要功能:
- 显示路由:通过
ip route show
命令可以查看当前的路由表信息。 - 添加路由:使用
ip route add
命令可以添加新的路由条目。 - 删除路由:通过
ip route del
命令可以删除路由表中的特定路由。 - 修改路由:虽然ip route命令本身没有直接的“修改”选项,但可以通过删除后重新添加的方式来实现路由的修改。
应用场景:
ip route命令在网络配置和管理中非常有用,特别是在需要手动设置路由规则的场景下,如跨网段通信、配置默认网关等。
ip rule
ip rule 命令用于设置路由策略数据库中的规则,以实现基于策略的路由(Policy Routing)。它允许网络管理员根据数据包的源地址、目标地址、服务类型等条件来设置路由规则,使得数据包可以按照不同的规则进行转发。
主要功能:
- 添加规则:使用
ip rule add
命令可以添加新的路由规则。 - 删除规则:通过
ip rule del
命令可以删除路由策略数据库中的特定规则。 - 查看规则:
ip rule show
命令用于显示当前的路由策略规则。
应用场景:
ip rule命令在需要实现复杂路由策略的场景下非常有用,如多出口网络、基于应用或用户身份的路由选择等。
iptables
iptables 是Linux下的防火墙软件,用于实现网络访问控制。它工作在L2、L3、L4层,可以对经过的数据包进行检测、转发、丢弃、修改、流控等操作。
主要功能:
- 包过滤:iptables可以根据规则对数据包进行过滤,允许或拒绝特定的数据包通过。
- 连接跟踪:iptables可以跟踪网络连接的状态,以便对后续的数据包进行更精细的控制。
- 网络地址转换(NAT):iptables可以实现源地址转换(SNAT)和目的地址转换(DNAT),用于隐藏内部网络地址或实现负载均衡等。
- 重整包头:iptables可以修改数据包的头部信息,如TTL值、TOS字段等。
表与链:
iptables定义了四种表和五种链,以实现对数据包流转的精细控制。四种表包括raw、mangle、nat和filter,它们按照优先级从高到低排列。五种链包括PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING,分别对应数据包进入和离开系统的不同阶段。
应用场景:
iptables在网络安全和管理中扮演着重要角色,可以用于构建防火墙、实现NAT、控制网络流量等。通过合理配置iptables规则,可以有效地保护网络安全,提高网络性能。
Android路由策略
Android路由策略优先级
代码位置:
system/netd/server/RouteController.cpp
较小的值表示更高的优先级
优先级编号 | 路由规则名称 | 描述 |
---|---|---|
10000 | RULE_PRIORITY_VPN_OVERRIDE_SYSTEM | VPN覆盖系统路由的优先级 |
10500 | RULE_PRIORITY_VPN_OVERRIDE_OIF | VPN覆盖特定输出接口的路由优先级 |
11000 | RULE_PRIORITY_VPN_OUTPUT_TO_LOCAL | VPN输出到本地的路由优先级 |
12000 | RULE_PRIORITY_SECURE_VPN | 安全VPN路由的优先级 |
13000 | RULE_PRIORITY_EXPLICIT_NETWORK | 显式网络路由的优先级 |
14000 | RULE_PRIORITY_OUTPUT_INTERFACE | 输出接口路由的优先级 |
15000 | RULE_PRIORITY_LEGACY_SYSTEM | 遗留系统路由的优先级 |
16000 | RULE_PRIORITY_LEGACY_NETWORK | 遗留网络路由的优先级 |
17000 | RULE_PRIORITY_LOCAL_NETWORK | 本地网络路由的优先级 |
18000 | RULE_PRIORITY_TETHERING | 网络共享(如热点)路由的优先级 |
19000 | RULE_PRIORITY_IMPLICIT_NETWORK | 隐式网络路由的优先级 |
20000 | RULE_PRIORITY_BYPASSABLE_VPN | 可绕过VPN的路由优先级 |
21000 | RULE_PRIORITY_VPN_FALLTHROUGH | VPN穿透(未匹配VPN规则时使用的)路由的优先级 |
22000 | RULE_PRIORITY_DEFAULT_NETWORK | 默认网络路由的优先级 |
23000 | RULE_PRIORITY_DIRECTLY_CONNECTED | 直接连接网络的路由优先级 |
32000 | RULE_PRIORITY_UNREACHABLE | 不可达路由的优先级(通常用于黑洞路由) |
命令查看当前路由策略
# ip rule list
0: from all lookup local
10000: from all fwmark 0xc0000/0xd0000 lookup legacy_system
10500: from all oif eth0 uidrange 0-0 lookup eth0
13000: from all fwmark 0x10063/0x1ffff lookup local_network
13000: from all fwmark 0x10064/0x1ffff lookup eth0
14000: from all oif eth0 lookup eth0
15000: from all fwmark 0x0/0x10000 lookup legacy_system
16000: from all fwmark 0x0/0x10000 lookup legacy_network
17000: from all fwmark 0x0/0x10000 lookup local_network
19000: from all fwmark 0x64/0x1ffff lookup eth0
22000: from all fwmark 0x0/0xffff lookup eth0
23000: from all fwmark 0x0/0xffff uidrange 0-0 lookup main
32000: from all unreachable
第 0 条规则为最高优先级,表示所有的连接,首先遍历 local 表,用ip route命令查看local表的具体规则:
# ip route show table local
broadcast 10.0.0.0 dev eth0 proto kernel scope link src 10.3.7.130
local 10.3.7.130 dev eth0 proto kernel scope host src 10.3.7.130
broadcast 10.255.255.255 dev eth0 proto kernel scope link src 10.3.7.130
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
Android路由表
命令查看路由表
使用ip route命令查看路由表:
ip route show table <table_name>
通过读取rt_tables文件查看当前系统有哪些路由表:
# cat /data/misc/net/rt_tables
255 local
254 main
97 local_network
98 legacy_network
99 legacy_system
1002 eth0
命令查看所有路由表:
# ip route show table all
default via 10.3.0.1 dev eth0 table eth0 proto static
10.0.0.0/8 dev eth0 table eth0 proto static scope link
10.0.0.0/8 dev eth0 proto kernel scope link src 10.3.7.130
broadcast 10.0.0.0 dev eth0 table local proto kernel scope link src 10.3.7.130
local 10.3.7.130 dev eth0 table local proto kernel scope host src 10.3.7.130
broadcast 10.255.255.255 dev eth0 table local proto kernel scope link src 10.3.7.130
broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1
unreachable default dev lo table 0 proto kernel metric 4294967295 error -101
unreachable default dev lo table 0 proto kernel metric 4294967295 error -101
unreachable default dev lo table 0 proto kernel metric 4294967295 error -101
unreachable default dev lo table 0 proto kernel metric 4294967295 error -101
fe80::/64 dev eth0 proto kernel metric 256
unreachable default dev lo table 0 proto kernel metric 4294967295 error -101
local ::1 dev lo table local proto none metric 0
local fe80::6bf:dfff:fe8c:675c dev lo table local proto none metric 0
ff00::/8 dev eth0 table local metric 256
unreachable default dev lo table 0 proto kernel metric 4294967295 error -101
命令查看主路由表:
ip route命令默认打印就是主路由表.
# ip route show table main
10.0.0.0/8 dev eth0 proto kernel scope link src 10.3.7.130
Android防火墙
命令查看防火墙:
/ # iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
bw_INPUT all -- anywhere anywhere
fw_INPUT all -- anywhere anywhere Chain FORWARD (policy ACCEPT)
target prot opt source destination
oem_fwd all -- anywhere anywhere
fw_FORWARD all -- anywhere anywhere
bw_FORWARD all -- anywhere anywhere
natctrl_FORWARD all -- anywhere anywhere
......