起因
我经常碰到这种拧巴的情况:手机套餐流量挺多(甚至无限),但笔记本要上网时,开个人热点( Personal Hotspot )特别难受——
- 运营商能识别出「这是电脑在蹭手机流量」( tethering ),于是单独限速 / 单独计费 / 限额,明明套餐还剩一堆流量
- 热点那个 Wi-Fi 又费电又发热,还时不时掉
- 咖啡馆 / 酒店 / 高铁的公共 Wi-Fi 又慢又不放心
我想要的其实很简单:让 Mac 的流量从 iPhone 的蜂窝出去,但让它看起来就是手机自己在上网,而不是被当成热点共享。
折腾了一段时间,做出来了,叫 FastNet 。
它是什么
两个部分:
- Mac 上一个菜单栏 app
- iPhone 上一个 app (目前在 TestFlight )
连上之后,Mac 的全局流量会通过 iPhone 的蜂窝网络出去,出口 IP 就是 iPhone 的蜂窝 IP 。
怎么实现的
- Mac 侧:一个 root LaunchDaemon 开 utun ,用 split-default 路由(
0.0.0.0/1+128.0.0.0/1)把全局流量抓进来,转成本地 SOCKS5 -
传输层两条路:
- USB:走 usbmux (跟
iproxy一个原理),最稳,插线即用 - Wi-Fi Direct ( AWDL ):苹果设备之间那条点对点链路,不需要两边连同一个 Wi-Fi,无线但直连,自己跑了个 mux 多路复用上去(绕开 AWDL 单 peer ~256 条 NWConnection 的上限)
- USB:走 usbmux (跟
- iPhone 侧:跑一个本地 SOCKS5 + 多路复用 server ,把收到的流量用
requiredInterfaceType = .cellular强制从蜂窝发出去 - 关键点:它不是系统 VPN,没用
NEVPNManager/NEPacketTunnelProvider,不接管 iPhone 自己的流量。iPhone 只是当出口,所以发出去的就是手机原生蜂窝流量,不像热点那样被单独识别成 tethering - DNS 走 DoH ; Wi-Fi 全关也能用(纯 USB + 往 SCDynamicStore 注入 DNS )
几个会被问到的「这不就是 XX 吗」
- 和 USB 网络共享 / 系统热点的区别:那些会被运营商识别成 tethering 然后限速 / 限额; FastNet 的出口是手机原生蜂窝,规避的就是这个
- 和 VPN 的区别:VPN 把你流量绕到第三方服务器; FastNet 点对点,不经过我的任何服务器,我也拿不到你的数据
- 隐私:离线 Ed25519 license 验证,不收集数据,运行期不连我的后端(只有买的时候过一下 Stripe )
现状 & 想要的反馈
- macOS app 签名 + 公证好了,
.pkg双击装,一次管理员密码搞定(没有系统设置里那堆批准) - iPhone app 在 TestFlight
- 价格 $29 一次性买断,不是订阅
- 我一个人做的,每天挤一两个小时
来 V2EX 主要是想找几个愿意试的,尤其是:
- 用美国运营商( T-Mobile / Verizon / AT&T )、热点经常被限速的
- 经常带着 Mac 出门、但手机流量却用不完的
- 对 AWDL / Network.framework 这套实现感兴趣、想来吐槽实现的
落地页 + 下载: https://fastnet-site.vercel.app/?utm_source=v2ex&utm_medium=post&utm_campaign=launch
嫌贵、质疑、觉得哪里有坑,都欢迎直接喷