小米VPN与系统级代理设置冲突解决

系统集成 / 1人浏览

“又断了!”

凌晨两点十七分,我盯着屏幕上那个旋转的蓝色菊花图标,第无数次骂出了声。窗外是北京初冬的雾霾,屋里是路由器散热孔发出的微光,以及我面前这台刚换了硅脂的台式机——它正忠实地执行着一条命令:curl -x socks5://127.0.0.1:1080 https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT。

但返回的不是价格,而是curl: (7) Failed to connect to 127.0.0.1 port 1080: Connection refused。

我揉了揉干涩的眼睛,看了眼旁边的手机,上面显示着OKX的实时行情,比特币刚刚突破了69000美元,又回落了300。我错过了最佳挂单点,因为我的系统级代理和小米手机上的VPN,正在我的电脑上打一场无声的“代理战争”。


事件起因:一台手机引发的“血案”

事情要从三天前说起。为了在手机上看一眼被墙的Uniswap界面,我在小米14 Pro上开启了一个商业VPN。那个VPN做得不错,有全局模式和分应用模式。我选了分应用,只让TokenPocket和Twitter走代理。

但问题出在“系统级”这三个字上。小米的MIUI有个非常“贴心”的功能:当你开启VPN时,它会自动把系统代理设置为127.0.0.1:1080(或者某个随机的高端口),并且强制所有应用读取这个设置,除非应用本身支持ignoreProxy。

我的电脑和手机连的是同一个Wi-Fi。电脑上跑着一个本地代理客户端(Clash Verge),监听7890端口。我本来想让电脑上的脚本通过Clash的混合端口访问币安API。

但诡异的是,我电脑上的流量莫名其妙地开始走小米手机上的那个VPN了。我检查了电脑的网络设置,代理是关闭的。可curl的流量就是会超时,然后回退到直连,再被防火墙重置。

最后我找到了罪魁祸首:小米路由器。我的路由器是小米AX9000,它内置了一个“游戏加速器”功能,这个功能本质上是一个L2TP/IPSec VPN客户端。而它在某些固件版本下,会劫持整个局域网的DNS解析,并且把tun0接口的流量优先级提到最高。更阴险的是,它会在DHCP的option 252里下发一个PAC文件地址,让所有客户端自动配置代理。

也就是说,我的电脑虽然“代理关闭”,但它的系统配置里,被小米路由器硬塞了一个“自动代理配置脚本”。而这个脚本指向的,正是手机VPN所在的网关IP。


冲突根源:三层的“代理套娃”

为了解决这个问题,我花了一整天时间,拆解出了这起冲突的三个层次。如果你也遇到类似情况,不妨按这个顺序排查。

第一层:DHCP下发的PAC脚本(最隐蔽)

打开你的电脑终端,输入:

bash ipconfig /all # Windows networksetup -getproxyautodiscovery Wi-Fi # macOS

看输出里有没有WPAD或者Proxy Auto-Config的字段。如果有,且指向一个内网IP,比如http://192.168.31.1:8080/proxy.pac,那么恭喜你,你被路由器“劫持”了。

解决方案:

在Windows上,打开“设置” -> “网络和Internet” -> “代理”,把“自动检测设置”和“使用设置脚本”都关掉。但注意,小米路由器可能会在每次DHCP续约时重新下发,所以更彻底的办法是:

  1. 登录路由器后台(192.168.31.1)。
  2. 找到“高级设置” -> “VPN” -> “游戏加速器”,直接关闭该功能。
  3. 如果找不到,就检查“DHCP服务器”设置,把“DNS”和“默认网关”都改成手动指定,避免它插入额外参数。

第二层:系统级代理与VPN的“端口抢占”

这层是核心冲突。当你的小米手机开启VPN时,如果VPN应用使用了tun模式(虚拟网卡),它会在手机内部创建一个路由表,把所有流量导向tun0接口。但如果你同时开启了系统级代理(比如在Wi-Fi设置里手动填写了代理IP和端口),那么VPN的tun模式会覆盖掉这个代理设置,因为tun模式是网络层(L3)的,而代理是应用层(L7)的。

但问题在于,小米手机上的某些VPN应用,为了兼容某些游戏,会同时开启“系统代理”模式。这会导致它监听一个本地端口(比如1080),然后告诉系统“所有流量走这个代理”。如果你电脑上的Clash也监听7890,且你手动把电脑的代理设置成了127.0.0.1:7890,那么你的电脑流量会先到Clash,Clash再转发到远端服务器。

但,如果你的手机VPN和电脑Clash不在同一台设备上,且路由器开启了“端口转发”或“DMZ主机”指向手机,那么电脑的流量有可能被路由器转发到手机的VPN端口上。这听起来不可思议,但在小米AX9000的某些固件里,确实存在“NAT回环”和“代理劫持”的Bug。

验证方法:

在电脑上执行:

bash netstat -ant | grep 1080

如果看到大量ESTABLISHED连接到192.168.31.xxx:1080(这个IP是你的手机),那么说明你的电脑流量确实被路由到了手机VPN上。

解决方案:

  • 在路由器上,把手机的IP设为静态,然后关闭“UPnP”和“端口转发”。
  • 在电脑上,用iptables或route命令强制指定curl的流量走Clash的端口:

bash route add -host 192.168.31.1 gw 192.168.31.1 dev eth0 curl --proxy http://127.0.0.1:7890 https://api.binance.com

第三层:DNS污染与分流规则冲突

最后这层,是虚拟币玩家的噩梦。即使你解决了代理端口问题,你可能还会遇到“能ping通但无法访问”的情况。这是因为DNS解析被污染了。

小米手机上的VPN,如果开启了“防DNS泄漏”功能,它会强制所有DNS查询走VPN隧道。但你的电脑上,Clash的DNS配置可能是fake-ip模式。这会导致:

  1. 电脑请求api.binance.com,Clash返回一个假的IP(比如198.18.0.1)。
  2. 但这个请求如果被路由器劫持,路由器会把这个“假IP”请求发给手机VPN。
  3. 手机VPN的远端服务器收到这个假IP,无法解析,返回超时。

解决方案:

在Clash的配置文件中,把DNS改为redir-host模式,并添加国内DNS服务器:

yaml dns: enable: true ipv6: false enhanced-mode: redir-host nameservers: - 223.5.5.5 - 119.29.29.29 fallback: - 8.8.8.8 - 1.1.1.1

同时,在小米路由器上,关闭“DNS缓存”和“智能DNS加速”。


实战演练:一个完整的“币安API”修复脚本

为了让你有代入感,我把我最终的修复方案贴出来。这串代码我跑了一晚上,成功抓到了BTC的插针行情。

第一步:清理系统代理残留

bash

reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /f reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /f reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL /f

重启网络适配器

netsh winsock reset netsh int ip reset ipconfig /flushdns

第二步:强制curl走本地Clash

bash

定义代理变量

export httpsproxy=http://127.0.0.1:7890 export httpproxy=http://127.0.0.1:7890 export all_proxy=socks5://127.0.0.1:7891

测试连接

curl -x socks5://127.0.0.1:7891 --connect-timeout 5 https://api.binance.com/api/v3/ping

如果返回{},说明代理通了。如果报错,检查Clash是否监听7891端口。

第三步:修改Clash的分流规则

在config.yaml里,把币安相关域名加入PROXY规则,而不是DIRECT:

yaml rules: - DOMAIN-SUFFIX,binance.com,PROXY - DOMAIN-SUFFIX,okx.com,PROXY - DOMAIN-SUFFIX,coinbase.com,PROXY - MATCH,DIRECT

第四步:禁用小米路由器的“智障”功能

登录路由器后台,把“游戏加速器”和“智能VPN客户端”全部关闭。然后在“DHCP服务器”里,把“默认网关”改成你自己的电脑IP(如果你想让电脑当网关),或者改成路由器的IP但关掉“强制代理”选项。


后记:虚拟币玩家的“网络洁癖”

这起冲突解决后,我反思了一下。为什么只有虚拟币玩家会遇到这种破事?因为普通用户看视频,断流了顶多刷新一下。但炒币的人,每一秒的延迟都可能是真金白银。

我最后做的决定是:彻底抛弃小米路由器作为主网关。我把它改成了AP模式,用一台老旧的软路由(刷了OpenWrt)作为主路由。在OpenWrt里,我设置了iptables规则,把tun接口的流量全部标记,然后强制走Clash的透明代理。

从此,我的电脑上再也没有“系统代理”和“VPN”的冲突了。因为透明代理工作在L2层,不会和任何L7代理冲突。而我的小米手机,依然开着那个VPN,但它的流量只影响它自己,不会波及电脑。

至于那台小米AX9000?它现在安安静静地躺在弱电箱里,当个无线AP。偶尔我会想起那个凌晨,它和我的手机联手,差点让我爆仓。

最后送你一句忠告: 如果你在虚拟币交易中,发现你的网络延迟忽高忽低,或者curl返回Connection refused,先别急着骂交易所,检查一下你家的路由器,是不是正在偷偷给你“加戏”。

版权声明:

作者: 最新小米VPN免费节点分享

链接: https://xiaomivpn.com/system-integration/xiaomi-vpn-proxy-setting-conflict-resolution.htm

来源: xiaomivpn.com

文章版权归作者所有,未经允许请勿转载。

最新文章

归档

标签