3. 安装、启动与验证#
本章只讲用户视角:如何准备配置、在 Link1 App 中导入和应用、直接运行内核时如何验证配置、如何确认代理可用。
推荐方式:用 Link1 App 管理#
普通用户建议通过 Link1 App 完成以下流程:
- 新建配置档案。
- 粘贴 YAML、导入本地文件,或填写订阅地址。
- 点击校验,确认没有字段错误或引用错误。
- 应用配置,等待内核启动完成。
- 在 App 首页确认运行状态、当前模式、实时速率和日志摘要。
- 打开系统代理、TUN 或路由器模式,让流量进入 Link1。
- 用连接列表、策略组和日志确认流量按预期转发。
App 会自动处理内部管理通道、状态同步和页面展示;用户通常不需要手写额外管理配置。
配置文件位置#
默认配置文件名是 config.yaml。如果你直接运行内核,可以用 -f 指定:
spark -f /path/to/config.yaml
工作目录用 -d 指定:
spark -d /path/to/workdir -f /path/to/config.yaml
实际影响:
- 相对路径会按配置文件所在目录或工作目录解析。
- provider 缓存、状态库、Fake-IP 持久化、订阅下载文件通常和工作目录有关。
- 路由器部署时建议固定工作目录,避免重启后相对路径变化。
- 如果使用 App,工作目录一般由 App 管理,你只需要关注配置档案本身。
用户常用命令行参数#
| 参数 | 含义 | 实际影响 |
|---|---|---|
-f | 指定配置文件 | 读取指定 YAML |
-d | 指定工作目录 | 影响相对路径、缓存、状态文件 |
-config | 使用 base64 编码的配置内容 | 适合 App 或外部配置管理器直接下发配置 |
-t | 测试配置并退出 | 不启动监听端口,只检查配置能否编译 |
-v | 输出版本 | 用于确认二进制版本 |
-m | 覆盖启用 geodata-mode | 临时切换 GeoData 模式 |
这些参数主要用于排障、路由器部署或开发调试。桌面用户优先使用 Link1 App 的配置导入和校验按钮。
第一步:写最小配置#
mixed-port: 7890
mode: rule
log-level: info
allow-lan: false
proxies:
- name: example-socks
type: socks5
server: 127.0.0.1
port: 1080
udp: true
proxy-groups:
- name: PROXY
type: select
proxies:
- example-socks
- DIRECT
rules:
- MATCH,PROXY
如果你暂时没有上游代理,也可以只用直连验证内核能启动:
mixed-port: 7890
mode: rule
log-level: info
rules:
- MATCH,DIRECT
第二步:验证配置#
在 App 里点击“校验配置”。如果直接运行内核:
spark -f config.yaml -t
如果配置错误,Link1 会尽量告诉你路径,例如:
compile config "config.yaml": proxies[0].server is empty
读法:
proxies[0]:proxies列表里的第 1 个节点。
.server is empty:这个节点缺少server。
常见错误和含义:
| 错误特征 | 常见原因 | 处理 |
|---|---|---|
is undefined | 规则或策略组引用了不存在的名称 | 检查 proxies、proxy-groups 和 rules 的名字是否一致 |
server is empty | 节点缺少服务器地址 | 补充 server |
invalid port | 端口不是 1-65535 | 检查 port 字段 |
unsupported | 写了不支持的协议或字段 | 对照出站协议章节删除或改写 |
tun / route 相关 | TUN 与平台或路由字段冲突 | 先关闭 TUN,用显式代理验证基础链路 |
第三步:启动 Link1#
在 App 中点击启动或应用配置。直接运行内核时:
spark -d . -f config.yaml
启动成功不等于代理已经可用,还要确认流量真的进入 Link1。
第四步:让客户端连接 Link1#
浏览器或系统代理#
填:
HTTP 代理:127.0.0.1:7890
HTTPS 代理:127.0.0.1:7890
SOCKS5 代理:127.0.0.1:7890
mixed-port 同时接受 HTTP proxy 和 SOCKS5。推荐第一次使用时只设置浏览器代理,避免系统全局代理影响其他应用。
curl 验证#
curl -x http://127.0.0.1:7890 https://www.example.com/
如果要验证 Cloudflare WARP:
curl -x http://127.0.0.1:7890 https://www.cloudflare.com/cdn-cgi/trace
不要把 --noproxy '*' 和 -x 混用;--noproxy '*' 会绕过代理。
App 侧验证#
请求发出后,在 Link1 App 中确认:
- 连接列表出现目标域名或目标 IP。
- 连接详情里能看到命中的规则。
- 出站显示为你预期的节点或策略组。
- 日志没有持续的 DNS、认证、握手或超时错误。
如果 curl 成功但 App 连接列表没有变化,通常说明请求没有经过 Link1,或你看的不是当前运行的配置档案。
局域网使用#
如果要让同一局域网内其他设备使用 Link1:
mixed-port: 7890
allow-lan: true
bind-address: '*'
lan-allowed-ips:
- 192.168.0.0/16
authentication:
- alice:password
实际影响:
- Link1 会监听所有网卡。
- 局域网设备可以把代理填成 Link1 主机 IP,例如
192.168.9.2:7890。
lan-allowed-ips限制哪些源 IP 可访问。
authentication要求客户端填写用户名密码。
风险:不要在公共 Wi-Fi 或不可信网络上无认证开放代理端口。
路由器使用#
路由器上常见做法:
- 显式代理:让设备手动填路由器 IP 和
mixed-port。
- 透明代理:使用
redir-port、tproxy-port或tun接管设备流量。
- DNS 接管:让局域网设备的 DNS 指向路由器,再由 Link1 DNS 处理。
如果你用 TUN:
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
tun:
enable: true
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
路由器场景的关键不是“内核是否启动”,而是三件事:
- 局域网设备的流量是否被路由器接管。
- 局域网设备的 DNS 是否进入 Link1。
- Link1 的出站是否能从路由器本身访问外网。
常见启动问题#
| 现象 | 常见原因 | 处理 |
|---|---|---|
| 端口被占用 | 旧 Link1 内核或其他代理仍在运行 | 换端口或停止旧进程 |
| 配置测试通过但客户端连不上 | 客户端代理地址填错、allow-lan=false、防火墙拦截 | 先本机 curl -x,再局域网验证 |
| 规则没有命中域名 | DNS 没进 Link1、Fake-IP 未启用、Sniffer 未启用 | 检查 DNS/TUN/Sniffer |
| App 显示无连接 | 客户端绕过代理、系统代理未生效、TUN 未接管 | 用浏览器代理或 curl 做最小验证 |
| Linux TPROXY 不工作 | 缺少系统路由/iptables/nftables 配合 | 优先用 TUN 或检查透明代理脚本 |
| HTTP Engine 无捕获 | 没开启 Capture、host 未命中、HTTPS 未配置 MITM | 检查 http-engine.capture 和 mitm.hosts |