前言:电脑挂了Clash再开热点,连上来的手机却在裸奔直连?本文拆解Windows热点NAT绕开代理的原理,给出Clash Verge Rev开启Service Mode与TUN模式的四步配置流程,并用SRC-IP-CIDR源IP分流实现指定出口,手机零配置即可共享代理上网。
前两天一个朋友来我这边蹭网,连上我电脑开的热点,刷了五分钟,抬头问我,你这网是不是有点问题,我那个App死活刷不出来。
我说不可能啊,我电脑上挂着Clash呢,节点好好的。
凑过去一看,好家伙,他手机连的是我的热点,而我的热点,压根不会把我电脑上的代理分给他。手机在裸奔。你敢信???
这一下给我整不会了。挂了代理的电脑开热点,连上来的设备居然是直连的,这事儿我用了这么多年电脑,居然是那天才反应过来。
为啥会这样呢,我后来去翻了下原理,其实就是Windows开热点的时候,系统里起了一个NAT转发,它只负责把流量从热点网卡丢出去,而你电脑上的Clash是应用层的东西,跟这个NAT半毛钱关系没有。流量绕开了Clash,自然就是直连。

以前的我,包括我猜屏幕前的很多人,用的都是土办法。在手机Wi-Fi详情里手动填代理,填电脑的IP,填10809那个端口。填完你会发现,浏览器是能走了,但一堆App根本不认这个代理,该直连还是直连。而且每换一个热点就得填一遍,填完还老忘记自己填过,回头网络出问题查半天。
我一直觉得,这种每次都要手动配置的方案,配得越多,欠的债越多。
真正的解法其实就一句话,把你的电脑,变成一台路由器。
你可能会说,直接买个能刷机的软路由不就完了。我理解,硬件方案确实更稳,但不是每个人家里都有这个预算和折腾的欲望,而且出差带一台路由器也不现实。电脑就在手边,能用的东西先用起来,不寒碜。
下面这些是我自己踩过一堆坑之后留下的一套流程,不成熟的地方你多担待,但每一步都是能直接照着做的。
先说最推荐的组合,Windows电脑加Clash Verge Rev。
原理我用人话讲一下。Clash有个TUN模式,打开之后,它会在你系统里虚拟出一块网卡,然后把整个系统的流量都劫持到这块网卡上来处理,不管流量是从哪个物理网卡进出的。你想想看,热点网卡也是网卡,那连热点上来的手机的流量,自然也会被它一把抓住。
抓到了,就归它管了。手机那边,什么都不用填。
具体怎么弄,我给你拆成四步。
1、装服务模式。打开Clash Verge Rev,左边Settings,找到Service Mode,点Manage,点Install,等那个图标变绿。这步是TUN能正常工作的底层前提,很多人TUN开了没效果,九成是这步漏了。我自己就踩过这个坑,一翻折腾半天,回头一看服务模式是灰的,一声叹息。
2、开TUN。Settings里把TUN Mode打开,点开TUN设置,Stack选gvisor或者mixed,这俩对热点流量的兼容性最好。
3、开热点。Windows设置,网络和Internet,移动热点,打开。
4、手机连上去。完了。就完了。手机浏览器打开ip.sb看一眼,出口IP已经变成你节点的IP了。
整个过程手机端零配置,连上就能用,跟连一个普通路由器没有任何区别。

当然,事情不会永远这么顺利。如果手机连上之后提示无法上网,或者测出来还是本地IP,别慌,大概率是下面两种情况。
第一种,热点网卡的流量没被TUN抓到。回到配置文件里,确认tun这块底下auto-route和auto-detect-interface都是true,尤其后者,它是让内核自己去找热点网卡的关键。改完保存,重新激活配置。
第二种,懒人但接近100%成功的兜底方案。按Win加R,输入ncpa.cpl回车,找到Clash虚拟出来的那块网卡,右键属性,切到共享标签,勾上允许其他网络用户通过此计算机的Internet连接来连接,下面选你的热点网卡。这是Windows系统级的网络共享,等于把Clash的出口直接焊到热点上,流量想绕都绕不开。
还有一个特别阴的坑。Windows更新之后,偶尔会把热点网段从192.168.137.x改成别的,比如192.168.135.x。所以记得连上热点之后,去手机Wi-Fi详情里瞄一眼自己拿到的IP,网段对不上,后面要用的规则就得跟着改,不然规则写得再漂亮也是空的。
顺着上面的再聊聊。上面这套弄完,你的热点已经是个透明代理热点了。但前阵子有个朋友的需求更进一步,他说我不想要节点的出口,我手上有一个自己买的HTTP代理,我要连热点的手机,出口必须是我这个代理的IP,而且电脑自己的流量不能受影响。
这个也能配,而且思路特别优雅,用源IP分流。
Windows热点有个特点,它给连上来的设备分配的IP,默认都落在192.168.137.x这个网段里。这就等于给手机流量打了一个天然的标签,Clash看一眼源IP,就知道这是热点设备的流量。
配置用Merge扩展配置做,不动你原来的订阅。在Clash Verge Rev的Profiles里新建一个Merge,里面写三样东西。
第一样,你的HTTP代理节点,type填http,server填代理IP,port填端口,有帐号密码就加上username和password。
第二样,一个select类型的策略组,把刚才那个代理节点放进去,再留一个DIRECT备用,万一代理挂了还能切回直连救急。
第三样,也是最关键的一样,一条prepend-rules规则,写成SRC-IP-CIDR,网段192.168.137.0/24,动作指向你那个策略组。prepend的意思是插到你所有规则的最顶上,优先级最高,谁也别想抢在它前面。
保存,启用这个Merge,重新激活主配置,TUN保持开启。
这时候整个链路是这样的。手机连热点,流量被TUN抓住,Clash一看源IP,192.168.137网段的,命中规则,全部打包丢给你那个HTTP代理。电脑自己的流量,源IP不在网段里,走原来的规则,该干嘛干嘛。
一台电脑,两个出口,互不干扰。手机连上热点什么都不用填,但在外面看,它的出口IP就是你那个代理。
验证也简单,手机浏览器开ip.sb,看到的IP是你的代理IP,就成了。
那如果热点源不是电脑,是另一台安卓手机呢,比如出门在外,就一台手机有网。
坦率的讲,安卓这边没有电脑那么顺滑,因为手机系统原生就不把VPN和代理共享给热点设备,这是写死在系统里的限制。
已Root的手机有个神器叫VPN Hotspot,GitHub上就有。开好你的代理,开系统热点,然后在VPN Hotspot里把热点网卡的开关打开,它会在底层写iptables规则,把热点流量强制塞进VPN隧道。接入的设备同样零配置,这是安卓端能做到的最接近透明代理的形态。
没Root的话,可以试试NetShare这类App,原理是建一个虚拟的Wi-Fi直连组来接管流量,但部分接收端手机得额外配证书,体验打折。还有个更轻的Every Proxy,能在发射端起一个HTTP代理服务,但接收端还是得手动填IP和端口,那就又回到手动配置的老路了,我个人不太推荐。
至于iPhone当热点源的,我就直说了,别折腾,iOS的封闭性决定了这条路基本走不通,换电脑或者换台安卓吧。= =
对了,得给你打个预防针。这套东西第一次配,快的话二十分钟,慢的话折腾一两个小时都有可能,而且中途会有那么几个瞬间,你会怀疑人生,会想不如还是手动填代理算了。我的建议是撑住,因为配置这东西是一次性的痛苦,手动填代理是每次连热点都要重复的痛苦,这两种痛苦根本不是一个量级的。另外Windows这玩意儿更新起来六亲不认,哪天热点网段一变,规则就静悄悄失效了,你还得回头排查。所以别指望一劳永逸,把它当成一次性的折腾加偶尔的维护,心态会好很多。
写到这儿,我突然想起来一个事儿。
路由器这个东西,最开始就是一台电脑。上世纪八十年代,斯坦福的一对夫妇,Leonard Bosack和Sandy Lerner,为了把两栋楼之间的实验室网络连起来,把路由软件刷进计算机里搞定的,后来这事儿变成了公司,叫cisco,名字取自San Francisco。你现在家里那个闪着绿灯的盒子,往上倒四十年,祖师爷就是一台刷了特殊系统的个人电脑。

所以你在自己笔记本上点几下,让它变成一台带透明代理的软路由,真不算什么黑魔法,你只是回到了路由器最初的样子。
最后把行动点给你捋一遍,今天就能做。
装Service Mode,开TUN,Stack选gvisor,开热点,手机连上验证ip.sb。不通就看auto-route和auto-detect-interface,再不行上系统共享兜底。想指定出口的,写一条SRC-IP-CIDR的Merge规则,网段记得跟实际的对上。安卓热点源的上VPN Hotspot,iPhone的,换设备。
我自己这套也还在摸索,可能有些想法还不成熟,你要是配的时候卡在哪一步,评论区说一声,我看到都会回。
技术这东西,说到底就是把别人眼里的黑盒,一层一层拆开,拆到最后你会发现,里面没有什么魔法,只有一些特别朴素的想法,和把它们认真实现出来的人。
连上热点,什么都不用填,直接就能用的那一刻,你会懂我说的这种感觉。
太爽了。
/ 注意,本项目仅在 SyncMein 的500人小群分享。
/ 谢谢你看完了我的文章,我们下次再见吧。
/ 作者:明察
/ 投稿或爆料,请联系邮箱:mingcha@gqmg.com














暂无评论内容