android - 开启 VPN 时端口无法访问
问题描述
我有一个 Android 应用程序,它打开一个通信端口。该应用程序充当服务器。
安卓 9:
- 当打开 VPN 并且我的应用程序正在运行时,我的应用程序的开放端口仍然可以通过本地 IP 地址访问。
nmap
将我的应用程序的端口显示为通过本地网络 IP 地址打开
安卓 10:
- 当打开 VPN 并且我的应用程序正在运行时,无法再通过本地 IP 地址访问打开的端口。该端口仍处于打开状态,但没有请求进入我的应用程序。
tcpdump
通过本地 IP 地址显示服务器没有任何响应。我的应用程序仍然可以通过 VPN 的 IP 地址访问。 nmap
将我的应用程序端口显示为通过本地网络 IP 地址过滤
当 VPN 开启时,对于 Android 9 和 Android 10,本地网络 IP 和 VPN 网络 IP 地址都会分配给设备。我的服务器客户端正在尝试使用本地 IP 地址访问设备。
注意:我收到了多个导致相同行为的 VPN 应用程序的报告。当用户从 Android 9 -> Android 10 更新他们的设备时,我的应用程序不再工作。
Android 10 中是否有任何更改会改变这种行为?我的应用程序是否需要请求任何额外的权限?
任何帮助,将不胜感激。
解决方案
在 Android 9 上创建 VPN 连接的允许列表功能似乎无法按预期工作。
我的测试
安卓 9:
- 使用OpenConnect设置 VPN 连接
- 确保我的应用在应用过滤器中
- 开始我的申请
- 测试从同一本地网络上的另一台设备到我的应用程序的连接
- 我的应用程序有效,但它不应该(它不在通过 OpenConnect 的应用程序过滤器允许的列表中)
安卓 10:
- 使用OpenConnect设置 VPN 连接
- 确保我的应用在应用过滤器中
- 开始我的申请
- 测试从同一本地网络上的另一台设备到我的应用程序的连接
- 我的应用程序端口被过滤,因此我无法连接到我的应用程序
- 从应用过滤器中删除我的应用
- 我的应用程序按预期工作
我的理解是,根据文档,我的应用程序在 Android 10 上运行的方式是正确的,但是我在 Android 9 上运行的应用程序无需更新 VPN 应用程序的允许列表或禁止列表是不正确的。这导致我试图弄清楚这是否基于权限等,因为我希望我的应用程序在 Android 10 上的工作方式与在 Android 9 上的工作方式相同。
推荐阅读
- .net - 什么套接字方法将 Xamarion.IOS 应用程序与 Windows 上的远程 .NET-Standard 应用程序连接起来?
- c# - 为什么自动属性验证不适用于继承集合的模型?
- indexing - 为什么我们需要使用双引号来调用全局变量_G的索引?
- shopify - Shopify REST API:发送具有特定语言环境的发票
- docker - docker从cron选项卡组成不起作用
- powerbi - Powerbi Measure 忽略负数中的小数
- django - 值 Decimal(0.00) 的 Django Decimal 字段在 Django Admin Inline 中显示为 0E-10
- python - 如何在 django 中使用 login_required 装饰器时禁用下一个 URL 参数?
- python - Python 上的霍夫曼
- javascript - Vue 3:ref、reactive 和 computed 的全局导入