让 GitHub 和 npm 恢复正常访问(dev-sidecar)

dev-sidecar 是一款用 JavaScript 写的开源桌面代理工具,通过本地代理、DNS 优选和请求拦截,加速 GitHub、Stack Overflow、npm 等站点的访问,支持 Windows、macOS 和 Linux。这篇文章梳理它的运行机制、拦截配置写法、安全模式与默认模式的差别,以及它带来的系统代理代价,并列出用户实际踩过的坑,帮你判断它值不值得装在自己的机器上。

国内开发者对这个场景不陌生:git clone 卡在 Receiving objects 不动,GitHub 页面一直转圈,release 包下到九成断掉。dev-sidecar 处理的就是这一类访问问题,它在本机跑一个代理服务,把发往 GitHub、Stack Overflow、npm 等站点的 https 请求转到可用的加速通道上。项目名取自 service-mesh 里的 sidecar(边车),含义是给开发者打辅助的伴生进程。

dev-sidecar 是一款用 JavaScript 写的桌面代理工具,支持 Windows、macOS、Linux,把 GitHub、Stack Overflow、npm 等站点的请求经本地代理转到加速通道,让打不开的页面和下载恢复正常。

它面向不打算买付费代理、只想让 GitHub 系资源能正常用的开发者。装完要做两件事:安装一份本地生成的根证书,打开系统代理开关。之后 GitHub 网页、git clone、release 下载、npm 安装都会走加速通道。

它面向不打算买付费代理、只想让 GitHub 系资源能正常用的开发者。装完要做两件事:安装一

仓库地址是 github.com/docmirror/dev-sidecar,许可证为 MPL-2.0,主要语言是 JavaScript(仓库语言占比里 JavaScript 51.6%、Vue 42.4%),目前有 24333 stars、2989 forks。作者在 README 里把定位写得很直接:本应用主要目的在于直连访问 github,如果你已经有飞机了,那建议还是不要用这个自行车。

它怎么做到的

启动后,dev-sidecar 会在本机拉起一个代理服务,并自动改写系统代理设置,让浏览器和命令行的流量先经过它。mac 下的排查文档里出现的监听地址是 127.0.0.1 31181。

https 想被改写就得先解密。应用在本地随机生成一份根证书,第一次打开时提示你装进系统的受信任根证书颁发机构列表;证书是本地生成的,官方说明里声明不收集用户信息,也可以在加速服务设置里换成自己 PEM 格式的证书与私钥。

解密后的请求进入拦截环节。配置里每个域名挂一组 url 正则,命中后按动作处理:redirect 把请求临时重定向到镜像站,proxy 把请求代理到加速地址而 url 不变,abort 直接取消请求(针对被完全封锁又找不到替代的资源,快速失败省时间),success 伪装成功返回,cacheDays 控制 GET 请求的缓存天数。针对 github.com,默认配置把 .* 的 proxy 指向 github.com,同时把 sni 改成别的域名,用修改 SNI 的方式绕过握手阶段的拦截。

DNS 是另一条独立线路。应用从配置好的 DNS 服务取回域名的 IP 列表,逐个测速挑最快的用,避开那些在特定时段基本不可用的机房。远程配置由哪台服务器下发、内容如何校验,仓库未展开说明,README 只提醒不要使用来源不明的服务或远程配置地址。

几个关键设计

拦截规则与镜像备份

拦截配置写在【加速服务-拦截设置】里,结构是「域名 → url 正则 → 动作」。一个动作可以带 backup 数组,主地址失败或超时后自动切到备用镜像;带 test 的会先探测可用性。这套结构解决的是镜像站会失效、会限速的问题。

{
  "github.com": {
    "/.*/.*/releases/download/": {
      "redirect": "download.fastgit.org"
    },
    ".*": {
      "proxy": "github.com",
      "sni": "baidu.com"
    }
  },
  "ajax.googleapis.com": {
    ".*": {
      "proxy": "ajax.loli.net",
      "backup": ["ajax.proxy.ustclug.org"],
      "test": "ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"
    }
  }
}

两个注意点:没有配置域名的不会被拦截;options 字段可以让 OPTIONS 请求直接返回成功,README 说明该功能存在一定风险,请谨慎使用。

DNS 优选与测速

某些域名解析出来的 IP 本身就不好用,比如 api.github.com 被解析到新加坡的机器,上午还行、晚上卡死。配置里用 dns.mapping 把域名固定到某个 DNS 服务,应用再对该服务返回的 IP 列表测速。

{
  "dns": {
    "mapping": {
      "api.github.com": "cloudflare",
      "gist.github.com": "cloudflare",
      "*.githubusercontent.com": "cloudflare"
    }
  }
}

限制是暂时只支持 IPv4 解析,被彻底封杀的域名加进来也没用。

改 SNI 直连 GitHub

默认模式下 github 的直连靠修改 sni 实现,握手时对外呈现的是另一个域名,从而绕开针对 SNI 的拦截。这条路径不经过镜像站,能不能连上取决于当前 IP 的可用性。作者在 README 里注明,这个思路来自 fastGithub。

安全模式与默认模式

安全模式关闭拦截与增强、不使用远程配置,只保留 dns 优选和测速,不需要安装证书,能力也最弱,效果接近手动查 IP 改 hosts,能不能连上取决于是否测出可用的绿色 IP。默认模式开启拦截、使用远程配置、需要安装证书,覆盖 dns 优选、请求拦截、github 加速和 Stack Overflow 加速。两种模式之外还有实验性插件,v2.1.0 起 free eye 插件作为实验性功能回归,它的具体能力仓库未展开说明。

主要功能

  • DNS 优选:根据网络状况解析出较优的域名 IP,缓解部分网站和库打不开或访问慢的问题。被彻底封杀的域名无效;建议把打开较慢的国外网站域名加进 dns 设置里试试。
  • 请求拦截与镜像切换:把打不开的站点代理到加速镜像,可配置多个镜像站作为备份,访问失败或超时后自动切换,让目标服务保持可用。
  • GitHub 加速:覆盖 release、source、zip 下载,clone,头像,gist,raw/blame,以及 README 里图片引用加载不出来的问题;也修了 git push 偶尔要求输入账号密码的毛病(报错为 fatal: TaskCanceledException encountered 或 fatal: HttpRequestException encountered)。其中一部分能力由作者打包在本地的 X.I.U 油猴脚本实现,可以在 加速服务->基本设置->启用脚本 里关掉,改用浏览器里自行安装的最新版脚本。
  • Stack Overflow 加速:把 ajax.google.com 代理到加速 CDN,recaptcha 图片验证码一并加速。
  • npm 加速:支持开启 npm 代理,官方与淘宝 registry 一键切换;某些用 cnpm 也装不上的包,可以打开代理再试。v2.0.2 起 npm、yarn、pip 的镜像仓库可以在共享或个人远程配置里指定。
  • ECH 加密 SNI(v2.3.0 新增):对指定域名启用 ECH,实现基于 DNS HTTPS/SVCB 记录、HPKE 和自实现的 TLS 1.3 客户端,失败时自动回退原生 TLS。默认关闭,需要在配置里按域名开启。
  • 连接层增强(v2.3.0 新增):上游返回 500 或连接失败时自动重试,并支持缓存小请求体;用 tlsVersionMapping 按域名设置 TLS 版本;默认启用 TLS 1.3,可切换为允许 TLS 1.2。
  • 根证书自定义:可以在加速服务设置里换成自己 PEM 格式的证书与私钥。

这样设计的代价

  • 解密要求信任一份本地 CA。火狐浏览器不走系统根证书,需要在选项里手动添加;证书的安装与信任本身也是敏感操作。
  • 应用启动会自动修改系统代理,因此它与其他代理软件冲突。要和 Watt Toolkit(原 Steam++)共用时,后者必须以 hosts 模式启动;与 TUN 网卡模式运行的游戏加速器可以共用。
  • 意外退出可能来不及恢复系统代理,结果是彻底上不了网。重新打开应用即可恢复,也可以设为开机自启规避。electron 无法监听 Windows 的关机事件,直接重启电脑会撞上这个问题,README 说已在 1.8.9 版本解决。
  • 覆盖面有限。默认只开 https 加速,http 站点要在【系统代理】里手动打开【代理HTTP请求】;被完全封杀的域名无效。
  • DNS 优选暂时只支持 IPv4 解析。
  • 平台与打包有约束。Linux 的 AppImage 未做测试、不保证能用;v2.2.0 起由于 macOS 构建问题不再提供 universal 包,需要按机型选 x86-64 或 arm64。
  • 默认模式依赖远程配置。README 提醒不要使用来源不明的服务或远程配置地址,有隐私和账号泄露风险,介意的话用安全模式。

对你的实际影响

安装走 release 页:Windows 选 DevSidecar-x.x.x-windows-universal.exe,Mac 选 DevSidecar-x.x.x-macos-universal.dmg,Debian 系选 DevSidecar-x.x.x-linux-[架构].deb,其他 Linux 用 AppImage。仓库没有说明包管理器或应用商店的安装方式。由于没有购买应用证书,安装时会提示未知发行者,选择保留即可;Mac 上还要在系统偏好设置的安全性与隐私里解锁并允许安装。装完按提示安装根证书,再打开代理服务与系统代理两个开关。

它需要常驻。作者的推荐用法就是一直开着,这会占一份 Electron 进程的资源,也意味着机器要能长期挂着。Mac 上如果系统代理开关打不开,多半是 networksetup 这条命令没有执行权限,提示为 ** Error: Command requires admin privileges.,需要取消「访问系统偏好设置需要管理员密码」的勾选。

排查问题看日志,默认在 ~/.dev-sidecar/logs/,Issue 里也要求反馈测试结果时上传这个目录下的文件。有用户提过日志占空间,希望指定存储位置、限制备份数量并压缩,这条需求已经被处理。

几个用户实际踩过的坑:

  • Windows 上开着 DS 重启电脑后无法上网。当前状态:已解决。原因是系统代理未恢复而 DS 代理服务没有启动,重新打开应用即可恢复,设为开机自启可以规避,README 说 1.8.9 版本已修复。
  • 安装证书并开启默认模式后 iCloud 无法下载文件,提示云操作未在超时时间结束之前完成。当前状态:已解决。
  • 打开 npm 直接报错 Api invoke error Error invoking remote method 'apiInvoke': Error: /bin/sh: npm: command not found。当前状态:待解决。
  • 手机端(安卓和 iOS)支持。当前状态:待解决,项目目前只提供桌面端。

同类桌面工具横向对照

表格里的两个项目同样是 Electron 桌面应用,与本项目只在技术形态上同赛道,解决的问题并不相同,列在这里是给做同类选型的读者一个参照。第三行的项目资料未逐一核实,相关格子里如实标注。

项目适合谁部署方式主要限制什么情况下选它更合适项目地址
dev-sidecar每天要 clone 仓库、下载 release、装 npm 包,又不打算买付费代理的国内开发者从 release 页下载安装包,支持 Windows/macOS/Linux,首次打开需安装根证书启动即改系统代理,与其他代理软件冲突;被完全封杀的域名无效;DNS 优选只支持 IPv4只想让 GitHub 系资源能正常打开和下载dev-sidecar
EchoMusic想在桌面端使用酷狗概念版的用户仓库没有说明它是桌面音乐播放器,不提供代理或加速能力;它不接管系统代理,也就不会带来重启后上不了网这类副作用你要的是一个本地播放器,而不是网络加速EchoMusic
DSH-Desktop-EAC未逐一核实未逐一核实未逐一核实未逐一核实DSH-Desktop-EAC

这两项都不能替代 dev-sidecar,它们和本项目重合的部分只在「Electron 桌面应用」这一层。单看副作用,EchoMusic 这类纯客户端不改系统代理,不会出现重启电脑后上不了网的情况;dev-sidecar 要装根证书、要接管系统代理,这是它换取加速能力付出的代价。真要替换它,该找的是别的代理或加速工具,而不是客户端软件。

适合谁用,什么情况下别用它

适合每天要 git clone、下载 release、装 npm 包,又不打算买付费代理的国内开发者;手上有一台能长期开机的电脑;系统是 Windows、macOS 或 Ubuntu 桌面版。

已经有稳定代理工具的人不必再装,README 自己就说了有飞机别骑自行车;需要手机端加速的暂时用不上;只访问被完全封杀域名的,它帮不上;同时在跑多个端口代理类软件的,冲突会比加速本身更烦人。

它会在本机解密经过的 https 流量,请只安装在你自己拥有或已获授权的设备上,用来加速自己账号的访问。把根证书装到单位统一管控的终端、或在别人的设备上长期驻留,可能违反设备管理规定;用它代理或转发不属于自己的流量,可能触及法律与平台规则,后果由使用者承担。

焚评:这个项目的量化评分

本项目的选题来自 焚.com(一个按公开公式给 GitHub 项目打分的站)。焚评当前总分 9.3 分(满分 10)。下表是各维度的得分:

评分维度得分
热度动量(权重 25%)10.0 / 10
开发活跃(权重 25%)8.1 / 10
社区响应(权重 15%)10.0 / 10
文档质量(权重 15%)8.5 / 10
发布节奏(权重 10%)10.0 / 10
风险控制(权重 10%)10.0 / 10

评分口径、权重与计算方式见焚.com 的评分方法页;数据随 GitHub 指标刷新,具体数值以焚.com 当前页面为准。本文正文为诀.com 独立撰写,评分数据由焚.com 授权引用。

内容核验说明

dev-sidecar 的可留存处,是把 GitHub、npm 常见访问故障拆成可配置的本地代理、DNS 优选和拦截动作,并交代了安全模式与默认模式的取舍。文中仓库数据与焚评评分来自原作者公开披露,诀.com 未独立验证;根证书、系统代理和远程配置都涉及信任与隐私,装前需权衡。适合国内日常拉仓库、下 release、装 npm 包的开发者对照参考。

文中的 stars、forks 等仓库指标来自 GitHub 公开页面,焚评评分由焚.com 提供,诀.com 未独立验证;用户踩坑与配置示例来自 README 和仓库 Issue,效果因网络环境而异,不保证复现。

项目来源与说明

开源项目:docmirror(docmirror)

本文由诀.com 编辑基于该项目的公开信息独立撰写,属原创解读,不是对项目文档的翻译或转载;文中提到的功能与参数以官方仓库为准,代码与文档版权归原作者所有。

查看项目仓库