设备把自己当 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 条离线断言,无需真机
94 lines
4.1 KiB
Plaintext
94 lines
4.1 KiB
Plaintext
# =============================================================================
|
||
# 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=
|
||
# 元数据:数据侧当前源 IPv4(generate/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 预置包 Release(publish-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=
|