代理开了但只有部分应用能上网怎么办?
简答:代理开了但只有部分应用能上网,通常不是“节点一定失效”,而是不同应用没有使用同一种代理入口。先用全局模式或应用内代理做一次对照:如果故障应用恢复,重点检查规则分流和应用是否接管;如果仍失败,再检查监听端口、DNS、IPv4/IPv6、节点和本地网络。
定义:“部分应用能上网”是指代理客户端显示连接成功,但不同应用因代理接管方式、分流规则、DNS或自身网络设置不同,出现只有部分应用可访问的情况。
结论速查:先看是哪一类问题
不要一开始就反复换节点。先关闭代理确认普通网络是否正常,再让故障应用单独走代理,并观察客户端连接日志中有没有该应用的请求。
| 现象 | 优先怀疑 | 先做什么 |
|---|---|---|
| 浏览器能用,Git或命令行不能用 | 应用不读取系统代理,或环境变量未设置 | 给 Git、curl 设置应用级代理,再测试 |
| 浏览器能用,游戏或聊天软件不能用 | 应用不支持系统代理,或需要TUN/应用内代理 | 检查应用自身代理入口;没有入口时再对照TUN |
| 只有部分网站打不开 | 规则命中DIRECT、DNS解析或IPv4/IPv6差异 | 看请求命中的策略,临时切全局模式比较 |
| 所有应用都打不开 | 节点、监听端口、本地网络或代理配置错误 | 先测试直连、节点日志和本地端口 |
| 手机浏览器能用,单个App不能用 | 分应用代理、App自带网络策略或DNS设置 | 检查代理客户端的应用范围和系统网络设置 |
最短判断:故障应用的请求如果没有出现在客户端连接日志里,先解决“应用没有被接管”;如果请求已经出现但被标为DIRECT或连接失败,再处理规则、DNS、节点或协议问题。
前置条件:修改前先保留可恢复状态
- 记录当前代理客户端的运行模式、节点、DNS和TUN状态;修改前导出或复制配置,避免多个变量同时变化。
- 准备一个可重复访问的测试地址、一个普通网站和一个故障应用。不要只用单个网站判断整个代理链路。
- 准备客户端连接日志或请求列表。菜单名称会随客户端和版本变化,本文中的“连接日志”“请求列表”“规则命中”是功能类别,不是固定菜单名称。
- 不要把订阅链接、代理密码、访问令牌直接粘贴到命令行、截图或公开日志中。
Windows 的系统代理入口位于“设置 > 网络和 Internet > 代理”,系统代理支持自动检测、脚本和手动代理配置;如果代理只配置在VPN连接中,还需要单独检查该连接的代理设置。可参考 Microsoft 的 Windows 代理说明。
macOS 可在“系统设置 > 网络 > 具体网络服务 > 详细信息 > 代理”中检查自动发现、PAC、HTTP、HTTPS、SOCKS和绕过列表。可参考 Apple 的 Mac 代理设置说明。
最短流程:4步定位应用为什么没走代理
- 确认普通网络没有先坏掉。完全退出或暂停代理,测试同一网络下的浏览器和故障应用。如果直连也无法使用,先处理Wi-Fi、移动网络、路由器或DNS问题;Windows 可按 Microsoft 的建议检查代理设置、更新IP配置并刷新DNS缓存,参考 Windows Wi-Fi连接排查。直连正常后再继续。
- 确认应用请求是否进入客户端。保持代理开启,打开客户端的连接列表或日志,立刻在故障应用中发起一次新请求。没有任何相关请求,说明应用没有读取系统代理、被分应用规则排除,或需要应用内代理、环境变量或TUN接管;出现请求但显示DIRECT,则是规则或绕过列表问题。
- 做一次临时全局对照。在规则模式下把当前策略临时切到全局模式,或让故障应用临时使用同一个代理节点,只测试一个应用。若全局模式恢复,优先修正规则、策略组、域名后缀、IP规则或应用绕过列表;若全局模式仍失败,继续检查DNS、节点和应用自身协议。测试完成后恢复规则模式,不要把全局模式当成长期修复。
- 一次只改一个变量并验证。依次切换一个节点、关闭或对比TUN、暂时调整DNS、分别测试IPv4和IPv6,然后重新打开故障应用。每次修改后记录“应用是否有请求、命中什么规则、错误发生在哪一步”,恢复时按相反顺序撤销。
成功标准不是“客户端显示已连接”,而是:故障应用产生请求;请求命中预期策略而非DIRECT;DNS能解析目标;连接可以完成;关闭代理后配置也能恢复正常。
按应用类型处理:系统代理不等于所有应用都代理
| 应用类型 | 常见原因 | 处理方式 |
|---|---|---|
| 浏览器 | 浏览器可能同时受系统代理、扩展、独立DNS设置影响 | 检查浏览器代理扩展和安全DNS。Chrome 的安全DNS支持自动、指定提供商或关闭;遇到解析错误时可按 Chrome官方说明暂时对比设置,完成后恢复原配置。 |
| Git、curl、开发工具 | 通常使用自己的配置或环境变量,不一定跟随系统代理 | Git 可检查 git config --global --get http.proxy;需要设置时使用 git config --global http.proxy http://127.0.0.1:PORT,撤销用 git config --global --unset http.proxy。Git 官方文档说明了 http.proxy、环境变量以及按远程仓库配置代理的方式,见 Git配置文档。 |
| 命令行和脚本 | 没有读取客户端的系统代理,或NO_PROXY绕过了目标域名 | 先用占位端口测试:curl -x http://127.0.0.1:PORT https://example.com。也可检查 http_proxy、HTTPS_PROXY、ALL_PROXY和NO_PROXY。curl 官方文档说明,命令行的 --proxy可覆盖环境变量,NO_PROXY会让匹配的域名直连,见 curl代理环境变量说明。 |
| 游戏、聊天和桌面应用 | 不读取系统HTTP代理,使用UDP、QUIC或独立网络组件 | 先查应用内是否支持HTTP、SOCKS或代理服务器;没有入口时,再根据客户端能力对比TUN或分应用VPN。若日志完全没有请求,不要只换节点。 |
| Docker Desktop | 容器网络与宿主机浏览器不是同一层 | 在Docker Desktop的代理设置中检查系统代理或手动配置;官方文档说明可在设置的Resources/Proxies区域配置HTTP、HTTPS或SOCKS5,见 Docker Desktop网络说明。 |
应用内代理、系统代理、TUN的选择原则:应用内代理最明确,适合只处理一个应用;系统代理适合能读取系统设置的浏览器和桌面程序;TUN适合需要更广泛接管、但应用不支持代理设置的场景,启用前应确认客户端、权限、DNS和分应用规则均支持,并保留关闭TUN的回退路径。
Windows、macOS、Android、iOS的分层排错
Windows
- 检查“设置 > 网络和 Internet > 代理”是否开启了旧的手动代理、自动脚本或错误的绕过列表。
- 如果浏览器正常、Git或脚本异常,优先检查应用自己的代理配置和环境变量,而不是重复修改系统代理。
- 可在命令提示符中运行
ipconfig /flushdns清理DNS缓存;这只影响本机缓存,不会修复错误规则或失效节点。
macOS
- 检查当前实际使用的网络服务,不要只修改未连接的Wi-Fi配置。
- 核对PAC、HTTP、HTTPS、SOCKS以及“绕过这些主机与域”的列表;错误的绕过域名会造成只有部分目标直连。
- 终端工具仍可能使用自己的环境变量或应用配置,使用curl带明确代理参数做对照。
Android
- 检查代理客户端的应用范围、分应用代理和TUN状态。
- Android支持将私人DNS设为关闭、自动或指定提供商,排查时按需对比,完成后恢复原配置;私人DNS只保护DNS查询与响应,不会自动代理所有应用。入口和选项可参考 Android网络高级设置。
- 如果只有一个App失败,先排除该App自身的网络权限、内置DNS、IPv6或应用服务器问题,不要直接认定节点故障。
iOS
- iOS应用通常由代理客户端的VPN配置或应用自身能力决定是否被接管,不能仅凭Safari能访问来判断所有App都走同一链路。
- 检查客户端的分应用范围、VPN状态和DNS配置;如果安装过配置描述文件,可在“设置 > 通用 > VPN与设备管理”中核对。删除配置文件会同时删除它提供的相关设置,操作前先确认来源和用途,参考 Apple的iPhone配置文件说明。
- 最后才考虑“还原网络设置”,因为这会移除部分已保存的网络和VPN设置,需要重新连接网络,参考 Apple的iPhone网络设置说明。
DNS、IPv4/IPv6与规则问题:如何判断不是节点失效
如果客户端日志显示请求已进入代理,但应用仍打不开,重点看解析和连接阶段。先比较同一域名在浏览器、curl和故障应用中的结果;再分别观察是否命中不同DNS、是否返回IPv6地址、是否只在IPv6连接阶段失败。
- 规则误分流:请求显示DIRECT或命中直连规则,临时全局模式恢复,说明优先修规则或策略组。
- DNS差异:浏览器可能使用自己的安全DNS,应用则使用系统DNS;Chrome官方说明其安全DNS可以使用自动模式或自定义提供商,出现解析错误时可暂时关闭或改回自动进行对比,见 Chrome安全DNS说明。
- IPv6差异:如果IPv4可用、IPv6失败,不要立即反复更换节点;先在客户端或系统中做IPv4/IPv6对照,并恢复原配置。
- Fake-IP或本地DNS模式:不同客户端实现和菜单名称可能不同,必须以当前客户端日志、DNS查询结果和规则命中记录为准,未核实的字段不要照抄。
一次只改变DNS、IPv6或规则中的一个项目。若修改后成功,保留复现记录;若无变化,立即恢复再进入下一层。
验证与回退:确认问题真的解决
- 关闭全局模式,恢复原来的规则模式。
- 重新启用原先的DNS、TUN、系统代理和分应用范围。
- 分别测试浏览器、一个命令行请求、一个原本故障的应用,并记录是否产生代理请求。
- 检查本地网络资源是否恢复,例如公司内网、打印机或局域网地址是否仍按预期直连。
- 如果仍失败,整理最小故障信息:系统与版本、客户端版本、运行模式、测试时间、故障应用、节点名称、连接日志中的错误阶段,以及是否全局模式有效。隐藏订阅凭证、账号、密码和完整访问令牌。
如果全局模式有效而规则模式失败,问题大概率在规则或策略选择;如果所有模式都失败,优先查节点、监听端口、本地网络和DNS;如果只有一个应用没有请求,优先查应用接管方式,而不是继续修改线路。
边界与延伸:什么时候应停止继续改配置
代理客户端显示“已连接”只代表客户端建立了某种连接,不等于每个应用、每个协议和每个域名都已经通过代理。系统代理也不等于所有应用都会读取;命令行、游戏、容器和部分移动应用可能有独立网络路径。
如果直连失败、全局模式失败、节点切换无变化,且多个设备或多个网络都出现相同结果,应把问题交给服务端或网络管理员核验,不要通过关闭证书校验、长期关闭安全功能或公开敏感配置来“修复”。本文没有实测线路、速度、延迟或可用性结论,只提供可复现的核验框架。
常见问题
Q1:代理客户端显示已连接,为什么浏览器能用但Git不能用?
因为Git可能使用自己的HTTP代理配置或环境变量,不一定读取系统代理。先运行 git config --global --get http.proxy,再根据实际监听地址设置临时或全局代理;测试完成后删除不再需要的配置。Git的代理字段和覆盖关系以 Git官方配置文档为准。
Q2:切到全局模式后能上网,能不能一直保持全局模式?
不建议把一次对照测试当成长期方案。全局模式只能证明规则或分流可能参与了故障,不能说明所有应用和协议都适合走同一路径。应查看请求命中记录,修正规则、策略组或应用范围后恢复规则模式。
Q3:Android排查时是否应该始终开启私人DNS?
不能把“始终开启”当作所有排查场景的统一要求。Android支持关闭、自动和指定提供商三种选项;排查DNS冲突时可以逐项对比,完成后恢复原配置。私人DNS只处理DNS查询与响应,不会让所有应用自动经过代理,具体选项见 Android官方说明。
Q4:浏览器能用但某个网站打不开,是不是节点失效?
不一定。先看该域名是否命中DIRECT、是否使用不同DNS、是否优先连接IPv6,以及客户端日志是否出现请求。只有在多个应用、多个目标和不同节点都复现时,才更适合继续核验节点或上游网络。
Q5:为什么curl加了代理参数仍然失败?
先确认代理类型和监听端口匹配。HTTP代理、SOCKS代理和带远程解析的SOCKS配置不能随意互换;同时检查环境变量中的NO_PROXY是否把目标域名排除了。curl的 --proxy会覆盖环境变量,详细行为以 curl官方文档为准。
常见问题
代理客户端显示已连接,为什么Git或命令行不能用?
Git和命令行可能使用独立代理配置或环境变量,不一定读取系统代理。检查Git的http.proxy以及http_proxy、HTTPS_PROXY、ALL_PROXY和NO_PROXY,再用curl的--proxy参数做单独对照。
全局模式能用,是否说明节点一定没问题?
只能说明全局模式下链路暂时可用,不能证明规则、DNS或所有应用都正确。应查看请求命中记录,修正规则或应用范围后恢复规则模式。
Android排查时是否必须一直开启私人DNS?
不是。Android支持关闭、自动或指定提供商,排查DNS冲突时按需对比,完成后恢复原配置。私人DNS只处理DNS查询与响应,不会自动接管所有应用。
浏览器正常但游戏或聊天软件不能用怎么办?
先检查应用是否支持HTTP或SOCKS代理;不支持时,再根据客户端能力对比TUN或分应用代理,并观察连接日志中是否出现该应用请求。
部分网站打不开是不是节点失效?
不一定。先检查规则是否命中DIRECT、DNS是否不同、IPv4/IPv6是否存在差异,再切换节点做对照。
相关阅读
参考资料
- Microsoft Support:在Windows中使用代理服务器
- Microsoft Support:修复Windows中的Wi-Fi连接问题
- Apple Support:更改Mac上的代理设置
- Android Help:管理Android手机的高级网络设置
- Google Chrome Help:管理Chrome安全与隐私设置
- Git Documentation:git-config
- curl Documentation:代理环境变量与使用方法
- Docker Docs:Docker Desktop网络与代理配置
- Apple Support:在iPhone上安装或移除配置描述文件
- Apple Support:将iPhone设置还原为默认值