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

高手技术对接

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

① 安装仅定位模式

不安装代理核心、不创建代理入站、不开放端口、不改 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 中转或链式代理?请看 前置配置指引