Forwarded from 𝐄𝟓 𝟖𝟔 𝟗𝟓 (𝐄𝟓 𝟖𝟔 𝟗𝟓)
sing-box eBPF 入站:更轻量的透明代理方案
本分支现已加入实验性的 eBPF 入站支持,可在 Linux 与 Root Android 上通过内核 eBPF 程序接管网络连接,无需创建 TUN 设备,也不依赖传统的 iptables/nftables REDIRECT 或 TPROXY 规则。
主要特性:
本机透明代理:通过 cgroup eBPF 接管本机 TCP、UDP 流量
热点共享代理shared_network 模式可代理 Android 热点下游设备的 IPv4/IPv6 流量
热点动态识别:热点接口尚未出现时不会阻止 sing-box 启动,开启或关闭热点后可自动更新挂载状态
DNS 防泄漏:支持 dns_mode: hijack/offhijack 会优先接管 TCP/UDP 53,避免 DNS 请求被绕过规则提前放行
规则集绕过:可根据路由规则集生成 eBPF CIDR 绕过策略,让直连流量尽早在内核侧放行
真实来源信息:为路由规则与 Clash API 保留原始源地址,避免所有连接都显示为 127.0.0.1
自动内部端口:运行时分别为本机和热点数据路径分配内部端口,无需用户管理监听地址或端口
防止循环代理:代理自身创建的连接会被标记并绕过,避免流量再次进入 eBPF 入站
低配置侵入:不需要额外维护防火墙规则,退出时会清理已挂载的 eBPF 程序和相关资源
与 TUN 相比,eBPF 入站省去了虚拟网卡、路由表和用户态 IP 栈等环节;与 Redirect/TPROXY 相比,不需要修改整套防火墙规则。流量在内核较早阶段完成识别、绕过或重定向,更适合需要长期运行透明代理的 Root Android 设备与 Linux 主机。
示例配置:
{
  "type": "ebpf",
  "tag": "ebpf-in",
  "dns_mode": "hijack",
  "shared_network": {
    "enabled": true,
    "include_interface": [
      "wlan2"
    ]
  }
}

编译时需启用 with_ebpf,并开启 CGO。运行环境需要 Root/CAP_BPF 等必要权限,以及支持相关 cgroup、socket 与 TC eBPF 能力的 Linux 内核。其他原理及配置细节请查看本分支文档。
该功能目前仍属于实验性实现,建议升级前保留可回退版本,并欢迎反馈不同 Android 内核、热点实现及标准 Linux 发行版上的兼容性与性能表现。