首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓如何知道它必须将允许的虚拟专用网络应用定向到tun0

安卓如何知道它必须将允许的虚拟专用网络应用定向到tun0
EN

Stack Overflow用户
提问于 2019-03-02 10:51:29
回答 1查看 1.1K关注 0票数 3

这是一个Android内部问题。

我想清楚的了解一下,当vpn通道只允许使用builder.addallowedapplication()方式通过的时候,会发生什么情况。

这类似于如何通过openvpn选择要处理的应用程序。

它是如何告诉tun0这些应该通过你的?它改变了什么类型的规则,或者它在过程中进行了什么类型的函数调用或api调用。

请帮帮我。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-04 19:41:49

这是基于策略路由的。Linux内核可以使用多个路由表和规则,这些规则定义了使用特定路由表的流量。如果您的系统上有可用的iproute2,则可以使用ip rule查看这些规则。特定表中的路由可以使用ip route list table <nr/name>列出(使用all作为名称可以查看所有表中的路由)。

规则可以匹配与网络分组(或其组合)相关联的不同属性,例如IP地址、入/出接口、Netfilter标记或进程的UID。后者尤其用于排除/包括特定的应用程序。每个应用程序都由具有自己的UID的唯一用户运行。这允许控制特定应用程序是否使用将流量定向到TUN设备的路由表。

例如,将VPN专门用于三个应用程序会添加具有以下选择器的规则:

代码语言:javascript
复制
... uidrange 10010-10010 lookup 1049 
... uidrange 10062-10062 lookup 1049 
... uidrange 10094-10094 lookup 1049 

路由表1049 (这针对每个新的VPN实例而改变)包含将业务引导到TUN设备的路由。

另一方面,如果将相同的三个应用程序排除在VPN之外,则选择器为:

代码语言:javascript
复制
... uidrange 0-10009 ...
... uidrange 10011-10061 ...
... uidrange 10063-10093 ...
... uidrange 10095-99999 ...

如您所见,来自所有UID(在0-99999范围内)的流量(前面看到的三个UID除外)都指向TUN设备的路由表。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54954779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档