You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Emulator中Cisco AnyConnect VPN Split DNS失效问题求助

Android Emulator 适配Cisco AnyConnect Split DNS 可行方案

问题根因

Android Emulator 默认在启动时固化读取宿主机DNS配置,自带的虚拟路由层不会正确识别宿主机Cisco AnyConnect下发的Split DNS规则,既不会把对应内网域名的解析请求转发到VPN隧道的内网DNS,也不会正确路由模拟器内部VPN应用的DNS请求,这也是宿主机连VPN后重启模拟器、模拟器内直接装AnyConnect两种方案都失效的核心原因。

实测可用方案

方案1:命令行启动时手动指定内网DNS(成功率最高)

  • 先在宿主机上正常连接Cisco AnyConnect VPN,查询VPN下发的内网DNS地址:
    • Windows:执行ipconfig /all,找到Cisco AnyConnect虚拟适配器对应的DNS服务器地址
    • macOS:执行scutil --dns,找到匹配企业内网域名后缀的nameserver地址
    • Linux:执行resolvectl status,找到VPN对应网络链接的DNS服务器地址
  • 完全关闭所有Android Emulator进程,包括Android Studio托管的后台模拟器进程,确保无残留
  • 打开终端/命令提示符,通过命令行带参数启动模拟器,不要直接点Android Studio的模拟器启动按钮:
    # Windows示例
    %LOCALAPPDATA%\Android\Sdk\emulator\emulator.exe -avd <你的模拟器AVD名称> -dns-server <内网DNS1地址>,<内网DNS2地址>
    
    # macOS/Linux示例
    ~/Library/Android/sdk/emulator/emulator -avd <你的模拟器AVD名称> -dns-server <内网DNS1地址>,<内网DNS2地址>
    
  • 模拟器启动完成后直接测试内网域名访问,绝大多数场景下可直接正常解析。

方案2:模拟器内静态指定DNS(绕开虚拟路由转发)

如果方案1受VPN路由策略限制未生效,可直接修改模拟器内网络配置:

  • 启动目标模拟器,进入设置 -> WLAN,长按已连接的AndroidWifi网络,选择「修改网络」
  • 将IP分配模式从DHCP改为静态,IP地址、网关、子网掩码保持原有DHCP分配的值不变,仅将DNS1、DNS2字段手动填写为之前查到的VPN内网DNS地址,保存配置
  • 等待网络重连完成后即可测试内网域名访问,该方案直接让模拟器向指定内网DNS发起解析请求,绕开了模拟器虚拟路由的DNS转发逻辑。

方案3:修复模拟器内AnyConnect连接失效问题

如果需要在模拟器内部直接发起VPN连接,可按以下步骤修复配置:

  • 带可写系统参数启动模拟器:
    emulator -avd <你的模拟器AVD名称> -writable-system
    
  • 执行adb命令获取root权限并写入DNS配置:
    adb root
    adb shell setprop net.dns1 <内网DNS1地址>
    adb shell setprop net.dns2 <内网DNS2地址>
    
  • 打开模拟器内安装的Cisco AnyConnect正常发起VPN连接,连接完成后不要切换网络,即可正常解析内网域名。

常见避坑提示

  • 尽量使用稳定版(32.1.12及更早版本)的Android Emulator,33.x之后的Canary/Dev版本存在虚拟网络栈和宿主机VPN的兼容bug,会导致DNS路由异常
  • Apple Silicon芯片的Mac设备上,Rosetta转译运行的x86_64模拟器存在DNS路由缺陷,建议更换arm64-v8a架构的模拟器镜像测试

内容的提问来源于stack exchange,提问作者Joel Broström

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:09:15