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

Android WireGuard VPN客户端中OkHttp请求未走VPN的问题排查

Android WireGuard VPN下Retrofit请求不路由问题解决

核心问题

Android系统默认会将发起VPN的应用自身流量排除在VPN路由之外,这就是为什么你的Retrofit请求不走VPN,但其他应用(如浏览器)正常的原因。

解决步骤

1. 允许本应用流量通过VPN

在你的WireGuard VPN服务初始化代码中,显式添加当前应用包名到允许列表:

val vpnBuilder = VpnService.Builder()
    // 已有的配置:设置地址、DNS、路由等
    .addAllowedApplication(packageName) // 关键:允许本应用流量走VPN
    // 完成其他配置并启动VPN连接

2. 绑定OkHttpClient到VPN接口

如果第一步后问题仍存在,需要让OkHttpClient使用VPN创建的网络Socket:

// 在你的VPN服务实例中获取受保护的SocketFactory
val vpnSocketFactory = run {
    val socket = Socket()
    vpnService.protect(socket) // 保护Socket使其走VPN
    socket.factory
}

// 构建OkHttpClient时使用该SocketFactory
val httpClient = OkHttpClient.Builder()
    .socketFactory(vpnSocketFactory)
    .build()

3. 强制刷新连接(可选)

若存在旧连接复用问题,禁用连接池确保每次请求使用新连接:

val httpClient = OkHttpClient.Builder()
    .connectionPool(ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
    .build()

验证

修改后重新启动VPN,调用getPublicIPAddress()方法,此时返回的IP应该是VPN服务器的IP,与浏览器请求结果一致。

内容的提问来源于stack exchange,提问作者Ehab24

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:55:07