搜索 K
Appearance
第一,Android 的热点流量和 VPN 流量天生不在同一条路由决策链上。热点走的是 tether 网络命名空间与独立路由表,VPN 客户端建立的是基于 UID/fwmark 的 TUN 通道,二者默认互不相干。所以你"手机上梯子通了,Switch 还是连不上 eShop",这不是客户端 BUG,是 Linux 网络栈的正常行为。
第二,免 Root 方案只能解决"支持手动填 HTTP 代理"的设备。Switch 的代理设置只对 eShop、系统更新、内置浏览器一类的 HTTP/HTTPS 流量生效,游戏联机的 UDP 报文完全绕过代理;Wear OS 智能手表干脆没有代理设置入口。想做到真·全网接管,Root + TUN 转发是唯一稳定的工程解。
第三,如果你不想折腾 Root,最务实的路径是"手机开热点 + 一台支持 TUN 的旁路设备",或者把手机上的代理客户端换成支持 tun + 局域网入栈 的现代内核(mihomo / sing-box)。
要理解这个问题,得先看懂 Android 的三层网络抽象。
第一层是 netd 与路由表分离。 当系统开启热点(Tethering)时,netd 会创建一组独立的策略路由规则,把来自热点接口(wlan1 / ap0 / rndis0 / bt-pan)的报文打上特定 fwmark,然后引导到 tether 相关的路由表(通常在 table 60 附近),最终出接口是移动数据 rmnet_data0 或 rmnet0。
第二层是 VPN 的 UID 路由。 现代 Android 的 VPN 不再是简单地把 0.0.0.0/0 塞进主路由表,而是通过 ip rule 按 UID 匹配,把"允许走代理的应用"的报文引入 TUN 接口。这是 Per-App VPN 的实现基础,也决定了——热点客户端的报文不属于任何本地 App UID,因此天然命中不了这些规则。
第三层是命名空间隔离。 部分厂商 ROM 会把 Tethering 的转发逻辑放进独立的 netns,配合 tether_offload_disabled 相关的硬件卸载开关。这种隔离让"全局透明代理"更加困难,因为你的 iptables 规则可能压根不在那个命名空间里生效。
所以真实的数据流向是:
Switch → WiFi 热点(wlan1) → tether 路由表 → rmnet_data0 → 运营商 → 互联网
↑
(VPN 的 TUN 通道完全没被经过)而 Root 方案要做的事情,本质上就是在 mangle 表里把热点转发链的报文重新打标,让它们也命中 TUN 的策略路由,同时用 MASQUERADE 做二次源地址伪装,再用 MSS clamping 处理 MTU 塌陷。这也是 VPNHotspot 这类工具的核心工作原理。
0.1% 以下,而公网中转在晚高峰 20:00–23:00 丢包可能飙到 3%~8%。这与热点共享的叠加关系是"乘法"——手机上行本来就是瓶颈,再叠一层丢包,Switch 联机立刻掉线。| 评估维度 | Root + TUN 转发 | 免 Root HTTP/SOCKS 代理 | 旁路由/软路由方案 |
|---|---|---|---|
| 覆盖协议 | TCP + UDP + ICMP | 仅 TCP(HTTP/SOCKS5 部分支持 UDP) | TCP + UDP 全量 |
| Switch 游戏联机 | ✅ 可用 | ❌ 无效 | ✅ 可用 |
| Switch eShop/更新 | ✅ | ✅ | ✅ |
| Wear OS 手表 | ✅ 全接管 | ❌ 无代理入口 | ✅ |
| 单跳延迟增量 | +2~6ms | +1~4ms | +3~10ms |
| 吞吐上限(受手机 SoC) | 80~220Mbps | 90~230Mbps | 150~400Mbps |
| 配置复杂度 | 中高(需 Root + 命令) | 低 | 高 |
| 断流恢复能力 | 中 | 高 | 高 |
| 多设备并发稳定性 | 中(依赖 ROM) | 高 | 高 |
| 推荐指数(临时应急/长期) | ★★★★ / ★★★★ | ★★★ / ★★ | ★★★ / ★★★★★ |
| 客户端 | 内核 | TUN 模式 | Allow LAN | UDP 转发 | Root 辅助 | 备注 |
|---|---|---|---|---|---|---|
| mihomo (Clash Meta) | mihomo | ✅ | ✅ | ✅ | 部分支持 | 需手动设 allow-lan: true |
| FlClash | mihomo | ✅ | ✅ | ✅ | ❌ | UI 友好,跨平台 |
| sing-box for Android | sing-box | ✅ | ✅ | ✅ | ❌ | 规则引擎更强 |
| v2rayNG | Xray | ✅(VPN) | ✅ | 部分 | ❌ | 老牌稳定 |
| Surfboard | 自研 | ✅ | ❌ | ✅ | ❌ | 无局域网入栈 |
| NekoBox / SagerNet | sing-box 系 | ✅ | ✅ | ✅ | ❌ | 高级参数多 |
关键提醒:
Allow LAN打开后,客户端会在0.0.0.0:7890监听 HTTP 入栈、0.0.0.0:7891监听 SOCKS5。这两个端口只对主动配置代理的客户端有意义,不会自动接管热点内所有设备的流量。
场景 A:只想要 Switch 上 eShop、看 YouTube、系统更新。 走免 Root 路线。手机热点保持开启,客户端打开 Allow LAN,Switch 里填 HTTP 代理。成本 5 分钟,成功率极高。
场景 B:要 Switch 联机加速(Splatoon、大乱斗、马车)。 必须 Root + TUN。核心不是"能不能连",而是 NAT 类型。手机 4G/5G 本身在运营商 CGNAT 后面,热点再叠一层 NAT,Switch 网络测试大概率报 Type C 甚至 D。只有把热点流量导入 TUN,并由落地侧提供 Full-Cone NAT + 独立出口,才有机会回到 B。
场景 C:Wear OS 手表(Pixel Watch、Galaxy Watch)。 手表不支持手动代理,WiFi 共享依赖手机蓝牙 PAN。只能靠 Root 方案,或者让手表连家里已经做好透明代理的 WiFi。
场景 D:一台手机带多台设备(iPad、电视盒子、笔记本)。 建议放弃手机做网关,改用旁路由。手机热点只当 WAN,所有设备接旁路由的 WiFi。稳定性提升是数量级的。
配置文件里确保:
allow-lan: true
bind-address: "*"
lan-allowed-ips:
- 192.168.43.0/24
- 192.168.232.0/24
- 192.168.137.0/24192.168.43.x 是原生 Android 热点常见网段,192.168.232.x ��见于小米/HyperOS,192.168.137.x 是 Windows 移动热点网段。先把热点连上一台设备,看它拿到什么 IP,再决定写哪个网段,这是最常见的翻车点。
然后 Switch 上操作:
192.168.43.1)7890这里必须泼一盆冷水:Switch 的代理设置走的是 HTTP CONNECT,游戏联机的 UDP 流量不会经过它。你在《斯普拉遁 3》里该掉线还是掉线,但 eShop 会秒开。
核心思路是三条规则:打标、路由、伪装。
先确认热点接口名:
adb shell ip link show | grep -E "wlan1|ap0|swlan0|rndis0|bt-pan"Root 后用 su 执行(不同 ROM 的 table 号与链名有差异,务必先 ip rule show 确认):
# 1. 让 tether 表来的流量查 VPN 的路由表
ip rule add from all fwmark 0x0/0xffff iif wlan1 lookup main pref 11000
# 2. 转发伪装
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# 3. MSS 钳制,解决 MTU 塌陷
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu实测中,VPNHotspot 这个开源工具会自动完成上述逻辑,并且能在 Android 11–15 上枚举当前 TUN 与 tether 接口。它的免 Root 模式只能做 HTTP 代理中继,Root 模式才是完整方案——这也直接戳破了市面上大量"免 Root 全局热点代理"的宣传。
±5ms 恶化到 ±40ms,联机游戏直接判死刑。adb shell settings put global tether_offload_disabled 1 可以关闭热点硬件卸载,部分机型上能改善 NAT 行为,但它不会让 VPN 接管热点,不要被某些教程误导。# 查看策略路由(判断 VPN 是否在规则链里)
adb shell ip rule show
# 查看所有路由表(找 tether 表号)
adb shell ip route show table all | grep -E "tether|wlan1"
# 查看连通性状态机
adb shell dumpsys connectivity | grep -A5 "TETHER"
# 查看网络命名空间
adb shell ip netns list
# MTU 探测(1472 + 28 = 1500,逐级下调找分片点)
adb shell ping -M do -s 1472 -c 3 1.1.1.1
adb shell ping -M do -s 1372 -c 3 1.1.1.1
# macOS 侧接热点时诊断 DNS
scutil --dns
netstat -rn | head -20
# 路径质量(丢包定位)
mtr -rwzc 100 1.1.1.1
tcping -t 5 1.1.1.1 443| 症状 | 高概率原因 | 验证方法 | 处置 |
|---|---|---|---|
| 手机能上,热点设备不能 | VPN 未接管 tether 表 | ip rule show 无 tether 相关规则 | Root 加规则或用 HTTP 代理 |
| HTTPS 能开,游戏掉线 | UDP 未转发 | 抓包看是否有 UDP 出栈 | 换 TUN 内核,关闭 UDP over TCP |
| eShop 转圈后超时 | 代理端口/网段写错 | 热点设备 ping 网关 | 确认网关 IP 与 allow-lan |
| 大文件下载卡在 99% | MTU 分片 | ping -M do -s 1472 失败 | 调低 TUN MTU 至 1400 |
| 时通时断,切换 App 后断流 | 单一 UDP 会话被 QoS | mtr 看第 3-5 跳丢包 | 换入口节点或走 TCP 回退 |
| DNS 解析到内网 IP | 运营商 DNS 劫持 | nslookup google.com | 改用 DoH / FakeIP |
| Switch NAT Type D/F | 双重 CGNAT | Switch 网络测试 | 需 Full-Cone 出口或换方案 |
| 宣传话术 | 真相 | 识别方法 |
|---|---|---|
| "免 Root 全局热点代理" | 绝大多数只是 HTTP 代理中继 | 问客服是否支持 Switch UDP 联机 |
| "支持 Switch 加速" | 可能只支持 eShop | 要求提供 NAT Type 测试截图 |
| "无限流量不限速" | 通常有公平使用策略 | 查看 TOS 里的 FUP 条款 |
| "解锁 Netflix / Disney+" | 可能只是 DNS 解锁,非原生 IP | 用 whoer 之类的工具查 IP 归属 |
| "全网唯一 IPLC" | 多为公网中转伪装 | 看延迟曲线是否晚高峰劣化 |
| "共享 10 台设备无压力" | 单账号并发连接数受限 | 实测多设备同时拉流 |
| "支持 ChatGPT 原生" | 需要住宅 IP 或特定出口 | 实测登录与对话是否触发验证 |
补充一条工程经验:判断机场是否真的支持 UDP,最快的方法是开一局 Switch 联机,同时 mtr 打落地 IP。如果全是 ICMP 通但 UDP 端口不通,那它