Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

12 Commits

Folders and files

Repository files navigation

NetAccelerator

仅 Windows 版本,源码就在仓库根目录。安卓版本已移除(备份见 Older/NetAccelerator/NetAccelerator-Android-backup-20261009.zip,也仍可从 git 历史取回)。

NetAccelerator 是只保留 Github 与 国外验证码平台 的轻量 Watt Toolkit Hosts 模式实现。它本身不是全局 CONNECT 代理,也不会修改、停止或重启 Clash。

与 Watt Toolkit 相同的核心链路

  1. 本机反向代理监听 127.0.0.1:80 和 127.0.0.1:443。
  2. 仅在服务真实自检通过后,向 Hosts 写入带边界标记的目标域名映射。
  3. 浏览器访问目标域名时连接本机;上游使用现代 SocketsHttpHandler 连接池做应用层 HTTP 反向代理。
  4. ConnectCallback 自己完成 TCP 连接与 TLS 握手,因此 SNI 由规则决定而不是被强制成请求域名(见下节)。DNS 使用普通实时查询,并为 GitHub/API 增加多个地区视角的标准 EDNS 查询;成功地址优先复用,失败地址短期退避。
  5. 每个域名首次 Handler 生命周期为 10 秒,后续为 100 秒,旧连接延迟回收,避免失效连接长期驻留。
  6. 普通规则使用实时 DNS 和转发域名实时 DNS,Watt 缓存中的固定 IP 不再参与连接;现有 Clash 仅作为最后一级可选兜底,未运行时会被立即跳过。程序不修改 Clash 规则或系统代理。
  7. 退出时只删除 # NetAccelerator Start 至 # NetAccelerator End,不覆盖其它 Hosts 内容。

为什么以前老是 502(2026-10-09 修复)

本机网络按 TLS SNI 字符串 阻断部分域名,同时会丢弃相当比例的冷握手。旧实现的三个问题叠加起来,就表现为「总是 502 无法加速」:

  • SNI 被阻断的域名永远连不上。 raw.githubusercontent.com 只要 SNI 等于它自己就在握手阶段被 RST(换任何 IP 都一样);SocketsHttpHandler.SslOptions.TargetHost 是被忽略的,SNI 恒等于请求 URI 的主机名,所以旧代码根本无从更换 SNI。现在由 ConnectCallback 自己握手,规则可以指定替代 SNI,空值表示不发 SNI——raw.githubusercontent.com 因此改用空 SNI。
  • 只重试一次,且重试不换地址。 现在每个请求最多尝试 3 次,每次都会作废连接池、轮换候选地址并按可用性切换线路;同时限制「连接+TLS」整段时间,避免一个黑洞地址吃掉全部预算。
  • 带路径条件的规则匹配失败后直接放弃。 例如 google.com 的规则带 /recaptcha 条件,路径不含该片段时旧代码回到「直连」,而该域名在本机 DNS 被污染,必然失败。现在条件不匹配时仍使用该规则。

另外 watt-rules.tsv 新增第 6 列(替代 SNI),并修掉了会让该列被静默丢弃的解析 bug(Trim() 会吃掉表示空值的行尾制表符)。

目标域名来自当前 Watt Toolkit 中截图所示的两个启用组,完整清单位于 config/domains.txt,包括 Github Dev/API/Assets/Education/Resources/Uploads/UserContent、Git Push、Github App、Docker Hub、Github.io、Hugging Face、Greasy Fork,以及 Google reCAPTCHA、hCaptcha、Arkose Labs。

Hugging Face 与 Greasy Fork 在 Watt 中标记为 Beta,并依赖 Watt 后端签发的短期 X-Watt-Token。NetAccelerator 不读取或伪造 Watt 的账号令牌;这两项只能在可用传输路径下兼容转发。GitHub 与验证码项目不使用保存的固定 IP,每次 DNS 缓存过期后自动获取最新地址;运行时无需启动 Watt 或 Clash。

使用

双击 启动.bat。第一次启动会出现 UAC,并创建仅供本机反向代理使用的 NetAccelerator 根证书和覆盖目标域名的服务器证书。叶证书签发完成后会删除根证书私钥,只保留受信任公钥,避免运行期间继续签发其它证书。

Watt Toolkit 与 NetAccelerator 都需要占用 80/443,不能同时开启加速:

  • 当前 Watt 正在加速时,NetAccelerator 只显示端口冲突,不修改 Hosts,不停止 Watt,也不触碰 Clash。
  • 要改用 NetAccelerator,请由你在 Watt 界面手动停止加速服务,然后点击 NetAccelerator 的“重新开启加速”。无需退出 Watt,更不要关闭 Clash。

只有真实完成 本机 TLS → 可信 DNS → 上游 TLS → HTTP 2xx/3xx 自检后,托盘才会提示“加速已真实就绪”。自检同时覆盖 github.com 与 raw.githubusercontent.com——后者是 SNI 阻断的代表,只查前者会让坏掉的线路仍显示“已就绪”。

排障时可以用 --http-port / --https-port 指定非 80/443 端口、配合 --no-hosts 在不改动 Hosts、也不与 Watt 抢端口的前提下验证链路;--no-proxy 则跳过 Clash 兜底。正常启动不需要这些参数。

安全与恢复

  • 系统代理始终保持原状;Clash 的 127.0.0.1:7897 不会被覆盖。
  • 服务退出时自动恢复 Hosts。
  • 若进程异常终止,右键以管理员身份运行 恢复网络.bat;它只删除 NetAccelerator 自己的 Hosts 区块。
  • runtime/hosts-backup.txt 仅在服务生效期间生成,用于人工审计/紧急恢复;日志和状态也集中在 runtime/。

主要文件

  • src/NetAcceleratorServer.cs:可维护源码。
  • bin/NetAcceleratorServer.dll、bin/NetAcceleratorServer.runtimeconfig.json:基于本机 .NET 10 运行时的轻量服务。
  • src/build_core.ps1:无需安装 SDK,使用现有运行时重新编译服务。
  • config/domains.txt:两个加速组的精确域名清单。
  • config/watt-rules.tsv:从当前 Watt 本地缓存提取的转发目标、优选 IP 和服务器加速规则;第 6 列是可选替代 SNI(空值=不发 SNI,留空该列=使用真实域名)。
  • config/transport-proxy.txt:显式指定上游传输入口;当前为现有 Clash 的 http://127.0.0.1:7897,用于避免 UAC 提权进程读取到不同的用户代理环境。程序只连接该入口,不修改或关闭 Clash。
  • config/certificate-info.json、certificates/NetAcceleratorRootCA.cer:服务器证书指纹与仅含公钥的本地根证书。
  • scripts/setup_https.ps1:幂等证书准备。
  • scripts/tray.ps1、scripts/launch_tray.ps1、启动.bat:托盘与启动生命周期。
  • scripts/恢复网络.ps1、恢复网络.bat:异常退出后的定向恢复。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages