⚙ 高手 · 仅定位模式 · 自管代理核心

高手技术对接

你已经能独立维护自己的代理核心与路由。仅定位修改器模式只安装定位修改器、证书与接线示例,由你把自己的入站接入。实现不限定代理协议或核心,本页使用一套现成配置作为可验证示例。

① 安装仅定位模式

不安装代理核心、不创建代理入站、不开放端口、不改 UFW、不写 TCP 调优——只装回环定位修改器、城市识别与选点、私有 CA 与 iOS 描述文件、hle 运维命令,以及一份代理核心接线示例。

curl -fsSL https://raw.githubusercontent.com/Loading886/Home-Location-Endpoint/v0.3.0/install.sh \
  | sudo env HLE_VERSION=v0.3.0 bash -s -- --mode modifier-only
⚠️

同一台机器后续只能用相同模式重跑安装器,不会在 full、advanced 与 modifier-only 间自动迁移,以免覆盖你自管的代理配置。

安装输出会给你:CA 描述文件与 SHA-256、回环监听地址 127.0.0.1:10451、以及接线示例文件路径。不生成代理节点链接。

📲

把 CA 描述文件装到手机的方式与新手一致:交互式安装完成后会自动启动一次性令牌链接(默认 100 分钟、下载一次即失效)。以后需要重新生成时运行 sudo hle profile serve;如需覆盖入口地址,使用 --host 手机可访问的地址。详见 新手教程第 4 步

② 数据面:拦截器在哪一环

你的代理核心负责解密与承载手机流量;本项目负责「定位域名 → 回环拦截器」这一小段。

📱手机全隧道 你的代理入站 解密 + sniffing routeOnly: true 按域名路由 其它流量 → 你的正常出站 保持原目的地址,不受影响 定位域名 TCP/443 → 拦截器 127.0.0.1:10451 改写坐标 定位域名 UDP/443(QUIC) → blackhole,迫使回退 TCP
两条规则:定位域名的 UDP/443 丢弃促使 QUIC 回退 TCP;TCP/443 送入回环拦截器。其它一切保持不变。

③ 承载手机流量的入站要开 sniffing

必须启用嗅探,并只把嗅探结果用于路由routeOnly: true),否则会改写真实目的地址、破坏其它流量。

"sniffing": {
  "enabled": true,
  "destOverride": ["http", "tls", "quic"],
  "routeOnly": true
}

④ 加入两个出站

把示例文件里的两个 outbound 原样并入你现有的 outbounds,tag 必须保持为 location-interceptorblock-location-quic

{
  "tag": "location-interceptor",
  "protocol": "freedom",
  "settings": {
    "domainStrategy": "AsIs",
    "redirect": "127.0.0.1:10451",
    "finalRules": [
      { "action": "allow", "network": "tcp",
        "ip": ["127.0.0.1/32"], "port": "10451" }
    ]
  }
},
{ "tag": "block-location-quic", "protocol": "blackhole", "settings": {} }

不要把代理的外层加密连接直接 DNAT 到 10451。定位修改器无法解析外层传输协议——它只处理解密后、指向定位域名的内层 TCP。

⑤ 加入两条路由规则(注意顺序)

把这两条规则按原顺序放在任何可能提前匹配 Apple 域名的宽泛规则之前。第一条只阻断定位域名的 UDP/443;第二条才把 TCP/443 送到回环拦截器。

{
  "type": "field", "network": "udp", "port": "443",
  "domain": [
    "full:gs-loc.apple.com",
    "full:gs-loc-cn.apple.com",
    "regexp:^gspe85(-[0-9]+)?(-cn)?-ssl\\.ls\\.apple\\.com$"
  ],
  "outboundTag": "block-location-quic"
},
{
  "type": "field", "network": "tcp", "port": "443",
  "domain": [
    "full:gs-loc.apple.com",
    "full:gs-loc-cn.apple.com",
    "regexp:^gspe85(-[0-9]+)?(-cn)?-ssl\\.ls\\.apple\\.com$"
  ],
  "outboundTag": "location-interceptor"
}
⚠️

删掉第一条 UDP 规则会重新引入未改写的 QUIC 直出;把域名集合扩大则会误伤普通流量。保持原样最安全。

⑥ 为什么需要回环安全例外

新版 Xray 默认阻止来自 VLESS 入站、指向私网/保留地址的 freedom 连接。定位出站必须访问回环拦截器,因此配置只显式放行这一个本地服务:

{ "action": "allow", "network": "tcp",
  "ip": ["127.0.0.1/32"], "port": "10451" }

普通 direct 出站没有增加 allow-all,因此仍保留 Xray 对私网目标的默认保护。

⑦ 用其它代理核心?对接的等价能力

示例以一种常见代理核心展示,但任何核心只要具备下面这组等价能力都可以接入:

🔌

定位修改器与代理核心相互独立:它只监听 127.0.0.1:10451。把解密后的 Apple 网络定位 TCP 流量交给它即可,其余流量保持原来的出站。

⑧ 验证

合并配置后,先用你自己核心的配置检查命令校验并重启,然后:

sudo hle verify
sudo hle status
sudo journalctl -u home-location-endpoint --since '10 minutes ago'

hle verify 只能验证定位修改器与接线示例本身,无法证明你已把片段正确合并进第三方配置。所以务必:从客户端真实发起一次定位请求,确认日志出现 TRANSLATE / WIFITILE_TRANSLATE;并确认普通网站没有进入定位拦截器日志。

🧪

默认 fail-closed:解析不确定时拦截器不会悄悄返回真实坐标,而是返回错误。排障时留意 TRANSLATE_FAIL_CLOSED / WIFITILE_FAIL_CLOSED

⏸️

暂停改写:sudo hle pause 会保留你的代理核心、路由和回环拦截器,只把 Apple 原始响应直接返回;sudo hle resume 恢复改写。两者都无需重启代理核心,状态跨重启和重复安装保留。

⑨ 作用域清单与边界

改写的定位域名gs-loc.apple.com, gs-loc-cn.apple.com, gspe85(-\d+)?(-cn)?-ssl.ls.apple.com
回环拦截器127.0.0.1:10451(仅本机,不对公网开放)
叶证书 SAN两个 gs-loc 域名 + *.ls.apple.com
处理内容Apple 网络定位响应中的坐标;普通网站和其它 App 流量不经过定位修改器
暂停行为hle pause 后使用手机请求的原始 Apple host,并返回未改写响应;代理流量不中断

其余安全边界与完整模式一致:叶私钥位于落地机、Apple 仍收到原始请求、只覆盖网络定位、需全隧道否则绕过。详见 安全与局限仓库 MODIFIER-ONLY 文档 ↗

➡️

落地机在 NAT 后、需要 Realm 中转或链式代理?请看 前置配置指引

常见问题

最新版 iOS 支持吗?

支持。如果使用时遇到问题,主要原因通常是网络定位权重不够高,或 iPhone 仍在使用旧定位缓存。

使用问题排查与解决

先确认使用的是项目最新版,然后按顺序操作:

  1. 远离窗边,不要在室外;否则 GPS 可能主导定位。进入 设置 → 隐私与安全性 → 定位服务,关闭顶部的「定位服务」。
  2. 通常不需要重启。如需清理旧缓存,最多重启一次即可。
  3. 开机后尽快用全局模式连接运行本项目的落地机,避免系统先生成更多旧定位缓存。
  4. 重新开启「定位服务」。
  5. 打开 Apple 地图,检查位置是否已经变成新地点。
  6. 如果没变,强制退出地图,再关闭「定位服务」,等待 5–10 秒。
  7. 重新开启「定位服务」,再次打开 Apple 地图。

做到第 6 步仍未成功,怎么看现象?

状态 A:有定位蓝点,但仍是真实位置

状态 B:定位蓝点消失,地图重新加载后空白

这通常说明已经成功了一半:旧定位缓存正在与服务器下发的新定位竞争。退出地图后重新进入,主动触发几次刷新,让系统更快清理旧缓存并接受新定位。

为什么等一会儿又会正常?

实测 iOS 的 locationd 本地 AP 缓存龄约为 14.5 分钟。快时一两分钟即可生效;如果什么也不做,通常等待约 15 分钟也会逐渐切换到新地点。

使用手机流量 + VPN 时需要打开 Wi-Fi 吗?

需要。Wi-Fi 可以不连接任何无线网络,但 Wi-Fi 开关必须保持开启,否则系统可用的网络定位信息会不足。

怎样选择尽量收不到 GPS 的室内位置?

GPS 定位通常需要同时获得至少 4 颗卫星,而 GPS 在地面的信号本来就非常微弱,并且依赖较好的天空视野。

土层、墙体和楼板会让信号进一步衰减。

因此,关键不是“找一面墙挡住手机”,而是让手机从各个方向看到的天空范围尽可能接近零。

位置避免 GPS 接收的效果选择要点
大型建筑 B2、B3 或更深的地下空间中央★★★★★地下停车场、地下商场、深层地铁站;必须远离车道坡口、出口和采光井
地下无窗房间或地下商业层的最内侧区域★★★★★上方和四周都有混凝土,附近没有贯通室外的开口
大型商场、医院、办公塔楼低层的中央内区★★★★☆靠近建筑核心区,但不要处于中庭、电梯厅大开口或玻璃穹顶附近
低层商场里的电影院、内部仓库、无窗服务走廊★★★★☆前提是电影院不是位于建筑顶层,且远离外墙
普通钢筋混凝土住宅或办公室的无窗内间★★☆☆☆ 至 ★★★★☆效果取决于建筑厚度和离窗户的距离,通常远离窗户的室内就足够屏蔽信号,达到可以使用本项目的基本条件
靠外墙、窗边、玻璃幕墙附近★☆☆☆☆即使人在室内,手机仍可能从窗口方向收到多颗卫星
顶层、阁楼、玻璃顶、中庭、采光井附近☆☆☆☆☆上方天空暴露较多,通常最不适合
仅仅躲在屋檐下、桥下或两栋楼之间★☆☆☆☆只能挡住部分天空,剩余方向通常仍有卫星可见