5. 入站与流量接管#


入站决定流量如何进入 Link1。本章按从简单到高级的顺序介绍。

入站总览#

字段/配置类型适合场景是否需要客户端显式配置
mixed-portHTTP + SOCKS5 混合代理本机浏览器、系统代理、局域网手动代理需要
portHTTP 代理只需要 HTTP proxy 的客户端需要
socks-portSOCKS5 代理支持 SOCKS5 的客户端需要
redir-portLinux REDIRECT 透明代理路由器透明接管 TCP不需要
tproxy-portLinux TPROXY 透明代理路由器透明接管 TCP/UDP不需要
tun虚拟网卡桌面端/路由器/移动端全局接管不需要或由系统 VPN/TUN 配置
app-proxy应用透明代理桌面端按应用/进程接管不需要或由平台授权
listeners协议服务端Link1 作为 VLESS/Hysteria2 服务端远端客户端需要配置协议

显式代理入口#

mixed-port#

mixed-port: 7890

含义:同一个端口同时接受 HTTP proxy 和 SOCKS5 请求。

实际影响:

port#

port: 7891

含义:只开启 HTTP proxy 入口。

实际影响:

socks-port#

socks-port: 7892

含义:只开启 SOCKS5 入口。

实际影响:

监听地址与局域网访问#

allow-lan: true
bind-address: '*'
authentication:
  - alice:password
skip-auth-prefixes:
  - 127.0.0.1/32
lan-allowed-ips:
  - 192.168.0.0/16
lan-disallowed-ips:
  - 192.168.9.99/32

字段影响:

字段含义实际影响
allow-lan是否允许局域网访问显式代理入口false 更安全;true 才能给其他设备用
bind-address监听地址127.0.0.1 仅本机;* / 0.0.0.0 对所有网卡开放
authenticationHTTP/SOCKS 用户名密码列表客户端需要提供认证,格式 user:pass
skip-auth-prefixes跳过认证的源 IP 段常用于本机或可信内网
lan-allowed-ips允许访问的源 IP 段缩小暴露面
lan-disallowed-ips禁止访问的源 IP 段黑名单优先用于排除设备

透明代理入口#

透明代理让客户端无需手动设置代理,由系统路由或防火墙把流量送进 Link1。

redir-port#

redir-port: 7893

含义:Linux REDIRECT TCP 透明代理入口。

实际影响:

tproxy-port#

tproxy-port: 7894

含义:Linux TPROXY 透明代理入口。

实际影响:

与 TUN 的冲突#

如果启用 TUN 的 auto-routeauto-redirect,再同时使用 redir-port/tproxy-port,可能发生重复接管。Link1 会在配置编译阶段检查这类冲突。

应用透明代理 app-proxy#

app-proxy:
  enable: true
  bypass-self: true
  fail-open: true

app-proxy 是面向桌面系统的按应用透明代理入口。它使用平台能力捕获应用发起的流量,把目标地址、进程名、进程路径、Bundle ID 等元数据交给 Link1 core,再由普通 rules 决定走哪个策略组或出站。

用户配置只感知 app-proxy 概念,不需要也不能指定底层 backend。Link1 会按运行平台选择内部实现:macOS/Darwin 使用 Network Extension,Windows 对齐 WinDivert,Linux 对齐 NFQUEUE。平台捕获层只负责把流量和进程元数据交给 core,不维护第二套规则引擎。

macOS App Proxy 需要宿主 App/Extension 具备 Apple Network Extension 相关 entitlement,例如 com.apple.developer.networking.networkextension 中的 App Proxy 能力。当前仓库的 Go core 已提供 app-proxy 接入、metadata 透传和自流量兜底保护;真正安装/授权 Network Extension 仍依赖 macOS App 打包与开发者账号配置。

字段影响:

字段含义默认/限制
enable开启应用透明代理桌面平台可用;具体捕获能力取决于平台 bridge 是否随构建链接
bypass-self启用 Spark 自身流量兜底保护默认 true;平台层仍应真正排除自身流量
fail-open平台 bridge 失败时优先恢复直连/网络可用默认 true;具体行为取决于平台 bridge

实际影响:

TUN 入站#

TUN 创建一个虚拟网卡,让系统把 IP 包交给 Link1。

显式代理只接管“愿意使用代理”的应用;TUN 则更像在系统里插入一张虚拟网卡。系统把原本要发往外网的 IP 包先发给这张虚拟网卡,Link1 再根据 DNS、Sniffer、规则和策略组决定怎么出站。它适合不支持代理设置的应用、手机/桌面全局接管、路由器网关模式。

为什么 TUN 经常要配合 DNS 劫持和 Fake-IP#

初学者最容易遇到的问题是:TUN 开了,网页也能访问,但 DOMAIN-SUFFIX 规则不命中。原因是 TUN 层看到的天然是 IP 包,里面通常只有“目标 IP:端口”,不一定有原始域名。

DNS 劫持和 Fake-IP 的作用可以这样理解:

应用查询 www.example.com
  -> Link1 DNS 返回一个 Fake-IP,例如 198.18.1.23
  -> 应用连接 198.18.1.23:443
  -> TUN 把连接交给 Link1
  -> Link1 用 Fake-IP 映射表还原成 www.example.com
  -> 域名规则可以命中

如果不接管 DNS,应用可能先从系统 DNS 拿到真实 IP,再直接把真实 IP 发进 TUN。Link1 仍然可以按 IP 规则处理,也可以尝试用 Sniffer 从 TLS SNI/HTTP Host/QUIC SNI 里补域名,但这不是每条连接都可靠:有些应用会加密 SNI、复用连接、直接访问 IP,或在 UDP/QUIC 阶段让嗅探失败。

因此,TUN 的推荐组合是:

不适合 Fake-IP 的域名应写进 fake-ip-filter,例如路由器管理域名、局域网发现、打印机、投屏、.local / .lan 等。否则应用拿到 Fake-IP 后可能无法完成局域网发现。

最小 TUN 示例#

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16

tun:
  enable: true
  backend: auto
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

TUN 核心字段#

字段含义实际影响
enable开启 TUN创建/使用虚拟网卡接管 IP 流量
backendTUN 后端,auto/native/packet-tunnelauto 会按平台选择;packet-tunnel 只适合 Darwin 平台
deviceTUN 设备名Linux/native 常用;为空时平台可能自动命名
mtu虚拟网卡 MTU默认 1500;过大/过小会影响分片和吞吐
auto-route自动配置路由让系统默认路由进入 TUN
auto-detect-interface自动检测出口网卡减少手写物理网卡名
strict-route更严格地约束路由降低流量泄漏风险,但可能影响局域网访问
dns-hijack劫持 DNS 查询让设备 DNS 进入 Link1,提高域名规则命中率
udp-timeoutUDP NAT 映射超时,秒默认 300;影响 UDP 会话保持
endpoint-independent-nat端点独立 NAT改变 UDP NAT 复用语义

TUN 路由字段#

字段含义实际影响
route-address要接管的 CIDR只把这些目标网段导入 TUN
route-exclude-address排除的 CIDR避免内网、保留地址或特殊服务走 TUN
route-address-set引用 ipcidr 规则集作为接管网段适合维护大量 CIDR
route-exclude-address-set引用 ipcidr 规则集作为排除网段适合维护大量排除 CIDR
inet4-address / inet6-addressTUN 网卡自身地址不写 IPv4 时会从 Fake-IP 网段推导
inet4-route-address / inet6-route-address按 IP 族接管路由分开控制 IPv4/IPv6
inet4-route-exclude-address / inet6-route-exclude-address按 IP 族排除路由分开控制 IPv4/IPv6 排除

默认排除会保护常见内网/保留地址,例如 10.0.0.0/8192.168.0.0/16127.0.0.0/8 等,避免把管理流量错误送入 TUN。

TUN 选择器字段#

这些字段只影响哪些本地流量进入 TUN,主要用于 Linux/Android:

字段含义
include-interface / exclude-interface按网卡包含/排除
include-uid / include-uid-range按 UID 包含
exclude-uid / exclude-uid-range按 UID 排除
exclude-src-port / exclude-src-port-range按源端口排除
exclude-dst-port / exclude-dst-port-range按目标端口排除
include-android-userAndroid 用户 ID 包含
include-package / exclude-packageAndroid 包名包含/排除

如果 auto-route=false,这些路由选择器会被归零或不生效,因为 Link1 不负责自动路由。

Linux policy routing 字段#

字段含义默认/限制
iproute2-table-indexLinux 路由表编号默认 2022,不能用保留表 253/254/255
iproute2-rule-indexLinux rule 优先级默认 9000
auto-redirect自动 redirect 规则Linux/Android 相关
auto-redirect-input-mark入站 mark默认跟 table index 相关
auto-redirect-output-mark出站 mark默认跟 table index 相关
auto-redirect-iproute2-fallback-rule-indexfallback rule index必须小于 iproute2-rule-index

Sniffer#

Sniffer 从连接内容里识别域名。

sniffer:
  enable: true
  override-destination: true
  force-dns-mapping: true
  parse-pure-ip: true
  sniff:
    HTTP:
      ports: [80, 8080]
      override-destination: true
    TLS:
      ports: [443]
    QUIC:
      ports: [443]
  force-domain:
    - '+.example.com'
  skip-domain:
    - '+.lan'
  skip-src-address:
    - 192.168.0.0/16

字段影响:

字段含义
enable开启嗅探
override-destination嗅探到域名后是否覆盖实际出站目标;关闭时仍可记录 SniffHost 供规则匹配/观测
force-dns-mapping尽量结合 DNS 映射恢复域名
parse-pure-ip是否解析纯 IP 目标
sniffing兼容字段,声明启用的嗅探协议
port-whitelist只在指定端口嗅探
sniff.HTTP/TLS/QUIC.ports分协议指定端口
force-domain命中已有目标域名时仍强制嗅探;不绕过 override-destination
skip-domain跳过嗅探的域名模式
skip-src-address按源地址跳过
skip-dst-address按目标地址跳过

协议 listeners#

listeners 让 Link1 自己作为服务端接收协议连接。目前配置校验接受:mixedhttpsocksredirtproxytunvlesshysteria2。实际服务端协议重点是 VLESS 和 Hysteria2。

详见 出站协议配置:入站协议监听器