11. Link1 App 管理#
Link1 的用户管理入口是 App,而不是让用户直接操作底层内核。App 的职责是把配置、运行状态、策略组、连接、日志和 HTTP 捕获整理成可理解的页面,帮助你完成“导入 → 校验 → 启动 → 观察 → 排障”的闭环。
App 与内核的分工#
| 能力 | Link1 App | Link1 内核 |
|---|---|---|
| 配置档案 | 导入、编辑、校验、切换、展示错误 | 编译 YAML,生成运行时结构 |
| 运行状态 | 启动/停止、显示当前配置、展示速率 | 监听端口、创建 TUN、维护连接 |
| 策略组 | 展示成员、手动切换、触发测试 | 按组类型选择节点并拨号 |
| Provider | 展示订阅来源、刷新状态、节点数量 | 下载、解析、过滤、健康检查 |
| 连接 | 展示目标、规则、出站、流量 | 接收连接并转发数据 |
| 日志 | 搜索、过滤、复制错误 | 输出配置、DNS、规则、拨号、协议错误 |
| HTTP 捕获 | 展示 flow、body 预览、重放入口 | 执行 Capture、MITM、改写和 Mock |
用户需要关注的是“页面上的信息代表哪一层出了问题”,而不是底层如何暴露这些信息。
配置档案#
配置档案是一份可启动的网络行为说明书。它通常包含:
- 入站:例如
mixed-port、tun。
- DNS:例如
dns.nameserver、fake-ip-range。
- 出站:
proxies或proxy-providers。
- 策略组:
proxy-groups。
- 规则:
rules、rule-providers。
- 高级能力:HTTP Engine、Sniffer、设备发现等。
App 中配置档案的典型操作:
| 操作 | 什么时候用 | 实际影响 |
|---|---|---|
| 导入 | 从订阅、本地文件或剪贴板添加配置 | 新增一个可校验的配置档案 |
| 校验 | 启动前确认配置能编译 | 不启动网络监听,只检查字段和引用 |
| 应用 | 让当前配置成为运行配置 | 内核会按这份配置重新启动或热切换 |
| 复制 | 做实验前保留原配置 | 避免误改可用配置 |
| 导出 | 迁移到其他设备 | 保存 YAML 和相关文件引用 |
建议:每次做较大改动前复制一份配置档案;出问题时可以快速回退。
首页与运行状态#
首页应帮助你回答四个问题:
- 当前内核是否正在运行。
- 当前使用哪份配置档案。
- 当前上行/下行速率是否符合预期。
- 是否存在持续错误日志。
常见状态含义:
| 状态 | 含义 | 下一步 |
|---|---|---|
| 未运行 | 内核没有启动 | 应用配置或查看启动错误 |
| 启动中 | 正在编译配置、监听端口、创建 TUN | 等待或查看日志 |
| 运行中 | 入口与数据面已就绪 | 用连接列表验证流量 |
| 运行但无连接 | 内核可用,但客户端未进入 Link1 | 检查系统代理、TUN、路由器接管 |
| 错误 | 配置、权限、端口或协议失败 | 复制错误并按章节排障 |
连接列表#
连接列表是排障最重要的页面之一。每条连接至少要理解这些字段:
| 字段 | 含义 | 用来判断什么 |
|---|---|---|
| 源地址 | 谁发起连接 | 是本机、局域网设备还是某个入站用户 |
| 目标 | 域名或 IP + 端口 | Link1 是否拿到了正确目标 |
| 网络 | TCP/UDP | UDP 不通时要看协议是否支持 UDP |
| 入站 | 从哪个入口进入 | 是否符合你的预期接管方式 |
| 命中规则 | 哪条规则返回 action | 规则顺序是否正确 |
| 出站 | 最终使用哪个节点/组 | 是否走了预期线路 |
| 速率/流量 | 当前连接数据量 | 判断是否真的在传输 |
| 错误 | 连接失败原因 | 判断 DNS、拨号、握手还是远端断开 |
排障时优先看“目标”和“命中规则”。如果目标只有 IP,没有域名,域名规则不命中通常不是规则写错,而是 DNS/Fake-IP/Sniffer 没有提供域名信息。
策略组#
策略组页面用于查看和切换出口。
| 组类型 | App 中的用户动作 | 注意事项 |
|---|---|---|
select | 手动选择成员 | 选择通常会持久化,重启后仍保持 |
url-test | 查看延迟结果,必要时手动触发测试 | 只代表测试 URL 的延迟,不等于所有网站体验 |
fallback | 查看当前可用主备 | 排在前面的可用节点优先 |
load-balance | 查看成员健康状态 | 单个连接通常不会同时走多个节点 |
smart | 查看质量反馈 | 选择结果可能随网络质量变化 |
relay | 查看多跳链路 | 任一跳不可用都会影响整条链路 |
如果规则 action 指向策略组,最终出站取决于策略组当前选择;如果 action 直接指向节点,则策略组页面不会改变这条连接的出口。
Provider 与订阅#
Provider 是节点或规则的来源。常见类型:
| 类型 | 用途 | App 中应关注 |
|---|---|---|
| HTTP proxy provider | 从订阅地址拉取节点 | 更新时间、下载错误、节点数量、过滤结果 |
| File proxy provider | 从本地文件加载节点 | 文件路径是否存在、格式是否正确 |
| Inline proxy provider | 在主配置内写节点 | 配置校验错误和节点名称 |
| WARP provider | 自动物化 WARP/WireGuard/MASQUE 候选 | 账号/私钥、候选节点、健康检查 |
| Rule provider | 从文件或远端加载规则集 | 规则数量、更新失败、行为类型 |
| Hosts provider | 从外部加载 hosts | 域名映射是否符合预期 |
Provider 出问题时,症状通常是策略组成员为空、规则集不可用、规则命中失败或节点一直不可用。
规则测试#
规则测试用于在不真正访问网络的情况下,检查一条“假想连接”会命中什么规则。你通常需要填写:
| 输入 | 示例 | 影响 |
|---|---|---|
| 目标 host | chat.openai.com | 影响 DOMAIN/GEOSITE 规则 |
| 目标 IP | 1.1.1.1 | 影响 IP-CIDR/GEOIP/IP-ASN 规则 |
| 端口 | 443 | 影响 DST-PORT 规则 |
| 网络 | tcp/udp | 影响 NETWORK 规则 |
| 入站类型 | mixed/tun | 影响 IN-TYPE/IN-NAME/IN-PORT 规则 |
| 源 IP | 192.168.9.10 | 影响 SRC-IP-CIDR/SRC-GEOIP 规则 |
| 进程名 | Safari | 影响 PROCESS 规则,取决于平台能力 |
规则测试的结果应包括:命中的规则、最终 action、是否触发 DNS 解析、是否落到 MATCH。如果测试结果正确但真实连接不正确,通常说明真实连接的元数据和你测试输入不同。
DNS 与 Fake-IP 观察#
DNS 页面或相关日志用于回答:
- 域名是否由 Link1 解析。
- 使用了哪个 nameserver。
- 返回了真实 IP 还是 Fake-IP。
- Fake-IP 是否能反查回域名。
- fallback 或 nameserver-policy 是否按预期生效。
典型问题:
| 现象 | 可能原因 |
|---|---|
| 域名规则不命中 | DNS 没进 Link1,连接只有 IP |
| 国内站点解析到海外 IP | nameserver/fallback 策略不合适 |
| TUN 下访问失败 | DNS hijack 未生效,系统仍用外部 DNS |
| Fake-IP 后局域网服务异常 | 内网域名应加入 fake-ip-filter 或 hosts |
日志#
日志不是越详细越好。建议:
| 场景 | 建议日志级别 |
|---|---|
| 日常使用 | info |
| 启动失败 | debug 或复制启动错误 |
| DNS 问题 | 临时提高到 debug |
| 协议握手失败 | 查看节点名称、远端地址、TLS/认证相关错误 |
| HTTP Engine 调试 | 只对目标 host 开启,并限制 body 大小 |
读日志时先看“错误属于哪一层”:配置编译、入站监听、DNS、规则、策略组、provider、出站协议、HTTP Engine。
HTTP 捕获与重放#
开启 HTTP Engine Capture 后,App 可以展示 HTTP flow:
- 请求方法、host、path、状态码。
- 请求/响应 header 摘要。
- body 预览或完整 body 的保存位置。
- 命中的 HTTP Engine 规则。
- 修改前后的视图差异。
重放用于复现某个已捕获请求,适合调试改写规则或 Mock 规则。注意:重放可能再次访问真实目标服务,也可能带上敏感 header/body,使用前应确认目标和内容。
安全边界#
- 只在可信设备上保存配置档案和证书。
- 不要把代理入口无认证暴露到不可信网络。
- HTTP Engine MITM 只对必要域名开启,CA 私钥不要外泄。
- 订阅地址、节点密码、WireGuard 私钥、企业 VPN 凭据都属于敏感信息。
- 复制日志给别人前,先检查是否包含节点地址、用户名、token、私钥或内网域名。