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 条离线断言,无需真机
This commit is contained in:
@@ -15,7 +15,10 @@ INSTALL_DIR=/opt/cellular-proxy
|
||||
LOG_DIR=/var/log/cellular-proxy
|
||||
|
||||
# ---- 数据网卡(代理出口强制绑定)----
|
||||
# 留空则自动探测 wwan/usb/enx 等;建议手动填准
|
||||
# 留空则自动探测(优先 ModemManager bearer,其次驱动/名称打分);建议手动填准
|
||||
# 注意:不要填本机对上游主机暴露的 USB gadget 网卡(常见名 usb0/rndis0,驱动
|
||||
# configfs-gadget/g_ether)。那是「本机 -> PC」的下行链路,绑上去所有出站都会超时,
|
||||
# SOCKS5 会返回 rep=0x01。脚本会拒绝这类网卡并自动重新探测。
|
||||
CELLULAR_IFACE=
|
||||
# 元数据:数据侧当前源 IPv4(generate/watch 会更新;默认不写入 sing-box)
|
||||
CELLULAR_SOURCE_IP=
|
||||
@@ -25,8 +28,9 @@ CELLULAR_SOURCE_IP=
|
||||
BIND_SOURCE_IP=false
|
||||
# 数据网卡不存在则不启动(推荐 true,避免代理静默从 WiFi 出)
|
||||
REQUIRE_CELLULAR_IFACE=true
|
||||
# 自动探测关键词(逗号分隔)
|
||||
CELLULAR_IFACE_PATTERNS=wwan,wwp,usb,enx,ppp,cdc
|
||||
# 自动探测关键词(逗号分隔)。仅作弱启发式,权重低于驱动判定。
|
||||
# 刻意不含 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 日志为主)
|
||||
|
||||
Reference in New Issue
Block a user