Files
cellular-proxy/config/settings.conf.example
T
Hermes 88f2ff44aa fix(detect): never bind USB gadget iface as proxy egress
设备把自己当 USB 网卡挂给上游主机时会出现 usb0(驱动 configfs-gadget.g1,
IP 192.168.68.1)。该链路只通向 PC,被当成出口后所有出站都 context
deadline exceeded,客户端看到 socks connect failed rep=0x01。

误选原因:score_iface_as_cellular 给 usb0 与真出口 wwan0 都打 175 分。
usb0 靠名称命中 patterns 里的 usb(+80)与非默认路由(+40);wwan0 的
bam-dmux 驱动不在白名单里,白丢 +100。detect_cellular_iface 用 -gt 比较,
list_ifaces 按名排序让 usb0 先入选,平分下无法被顶替。

改动:
- lib.sh 新增 iface_is_usb_gadget(),按驱动名与 gadget 总线路径识别,
  并并入 is_virtual_or_skip_iface(usb0 评分 175 -> 0)
- 驱动白名单补 bam-dmux/bam_dmux/qcom-ipa/ipa_wan;名称权重 80 -> 40,
  确保驱动证据始终压过名称猜测
- 新增 detect_cellular_iface_via_mm(),把 ModemManager bearer 的
  interface: 作为第 0 步权威来源
- detect_cellular_iface / resolve_cellular 全链路拒绝 gadget 网卡,
  取不到真出口时按 REQUIRE_CELLULAR_IFACE 直接失败而不是绑错
- generate/install/upgrade/watch/detect/verify 各入口独立设闸,
  verify.sh 发现出口是 gadget 时直接 exit 4 并给出修复命令
- 默认 CELLULAR_IFACE_PATTERNS 去掉 usb/enx;upgrade.sh 与根 install.sh
  就地迁移已有 settings.conf,旧机器升级即修复
- 新增 tests/detect-gadget.sh:18 条离线断言,无需真机
2026-08-23 18:39:34 +08:00

94 lines
4.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# cellular-proxy — 轻量「代理出口 = 数据流量」
# 512MB 友好;无 frp;本机/局域网 HTTP+SOCKS;中文 Web 面板
#
# 语义(请按这个理解):
# · 系统默认路由仍可走 WiFi
# · 只要客户端走本代理,出口一律绑数据网卡(运营商流量)
# · 不做「部分域名走 WiFi、部分走数据」的应用层分流
#
# 复制:cp config/settings.conf.example config/settings.conf
# =============================================================================
# ---- 安装路径 ----
INSTALL_DIR=/opt/cellular-proxy
LOG_DIR=/var/log/cellular-proxy
# ---- 数据网卡(代理出口强制绑定)----
# 留空则自动探测(优先 ModemManager bearer,其次驱动/名称打分);建议手动填准
# 注意:不要填本机对上游主机暴露的 USB gadget 网卡(常见名 usb0/rndis0,驱动
# configfs-gadget/g_ether)。那是「本机 -> PC」的下行链路,绑上去所有出站都会超时,
# SOCKS5 会返回 rep=0x01。脚本会拒绝这类网卡并自动重新探测。
CELLULAR_IFACE=
# 元数据:数据侧当前源 IPv4generate/watch 会更新;默认不写入 sing-box)
CELLULAR_SOURCE_IP=
# 是否把源 IP pin 进 sing-box inet4_bind_address
# false(默认,推荐):只 bind_interface=网卡名 → WWAN 重拨换私网 IP 时通常无需 regenerate
# true:额外写 inet4_bind_address(需 watch/rebind 同步,否则易 stale → SOCKS rep=0x01
BIND_SOURCE_IP=false
# 数据网卡不存在则不启动(推荐 true,避免代理静默从 WiFi 出)
REQUIRE_CELLULAR_IFACE=true
# 自动探测关键词(逗号分隔)。仅作弱启发式,权重低于驱动判定。
# 刻意不含 usb/enx:会命中 USB gadget 网卡 usb0,导致出口绑到 PC 侧链路。
CELLULAR_IFACE_PATTERNS=wwan,wwp,ppp,cdc,rmnet,ccmni,mbim,qmi
# 后台监控(推荐开):网卡改名/掉线/无 IPv4 时自动 rebind;默认开启 long-running watch
ENABLE_CELLULAR_WATCH=true
# watch 轮询兜底间隔秒(事件驱动 ip monitor + ModemManager 日志为主)
WATCH_INTERVAL_SEC=60
# 以 ModemManager 日志为「重拨/重注册」标准(零公网流量,只读本机 journal)
# 命中 home→searching / attached→detached / bearer 断连等后:settle → 等 IPv4 → generate/restart
WATCH_MM_EVENTS=true
WATCH_MM_UNIT=ModemManager
# 事件后先等几秒再查数据面(避免刚 detached 就 generate
WATCH_MM_SETTLE_SEC=5
# 等待 wwan IPv4 / MM home 的最长时间
WATCH_MM_READY_TIMEOUT_SEC=90
WATCH_MM_READY_POLL_SEC=2
# 同一轮抖动合并窗口(searching→registering→home 只恢复一次)
WATCH_MM_COALESCE_SEC=20
# ---- 代理监听(局域网其它设备用 0.0.0.0)----
# mixed = 同一端口同时支持 HTTP 代理 与 SOCKS5
PROXY_LISTEN_HOST=0.0.0.0
PROXY_MIXED_PORT=7890
# 代理鉴权(局域网强烈建议设置;留空=无鉴权)
# 7890 代理鉴权(空=无密码)。也可用: cpxy auth --user u --pass p 或面板 UI
PROXY_USER=
PROXY_PASS=
# ---- 中文 Web 面板(内置静态页 + Clash API----
PANEL_LISTEN_HOST=0.0.0.0
PANEL_PORT=9090
# 面板密钥(浏览器里填;务必修改)
PANEL_SECRET=please-change-me
# 是否启用内置 DNS(推荐 true;DNS 查询也从数据出口出,减少漏到 WiFi)
ENABLE_DNS=true
# 日志:info / warn / error / debug(低内存建议 warn
LOG_LEVEL=warn
# ---- sing-box ----
# auto = 优先 Gitea 预置包(整包/分片),失败再走 GitHub 代理
# gitea | github | local | auto
SING_BOX_SOURCE=auto
SING_BOX_VERSION=1.11.7
SING_BOX_BIN=
# Gitea 预置包 Releasepublish-binaries-to-gitea.sh 上传)
GITEA_BASE=https://gitea.chickliu.fun
GITEA_OWNER=Hermes
GITEA_REPO=cellular-proxy
# 默认 tag: bin-v{SING_BOX_VERSION}
SING_BOX_RELEASE_TAG=
# 维护端从 GitHub 拉包、安装端回退 GitHub 时使用;置空则直连
GITHUB_PROXY=https://git.86482425.xyz
# 进程内存上限(MB,0=不限制)。512MB 设备建议 64~96
MEMORY_MAX_MB=96
# ---- 验证 ----
EGRESS_CHECK_URL=https://ifconfig.me
# 可选:填数据侧公网 IP 后,verify 会严格比对
EXPECTED_CELLULAR_PUBLIC_IP=