# 用 Vercel + DevSidecar 实现科学上网

> 本文灵感来自 [docmirror/dev-sidecar-doc](https://github.com/docmirror/dev-sidecar-doc)

由于本人翻墙时几乎只需要浏览网页，因此解除了封印的 DevSidecar（以下简称 DS）成为了我的首选翻墙工具。而且我听说 Vercel 对大陆线路做了优化，决定在 Vercel 上搭梯子。

> 如果你需要访问 HTTP 网站/用 WebSocket/其他 TCP 连接，还是老老实实用正儿八经的翻墙软件吧

## 安装 DevSidecar，并解除封印

下载地址：<https://github.com/docmirror/dev-sidecar/releases/latest>

按照提示运行一次并安装证书后退出 <abbr title="DevSidecar">DS</abbr>，打开 `<当前用户主目录>/.dev-sidecar/setting.json5`，将 `overwall: false` 改成 `overwall: true`，并保存。
![s:350x255 （不见图请开全局）setting.json5 文件](https://qwq.dsy4567.icu/blog/vercel-dev-sidecar-fq/image/json.png)

## 魔改 DS 代码（可选）

这一步会让 DS 将路径里两个斜杠替换成一个斜杠，以防止奇怪的问题出现。

> 如果你相信我不会作恶，可以点[这里](https://qwq.dsy4567.icu/files/app.asar)下载现成的 `app.asar` 文件。
>
> SHA256: `6714604f60f228b44221f0f8c653200c7c243109eebd045997fd2979acb3881d`

1. 找到 `<DS安装目录>/resources/app.asar` 并将其复制到顺手的目录。
2. 执行以下命令：
    ```bash
    cd <app.asar 所在目录>
    npm i -g @electron/asar
    asar e ./app.asar ./out
    ```
3. 用 VSCode 的搜索功能搜索 `dspassword`，按图示添加以下代码并保存。图中代码添加的位置在文件 `mitmproxy.js` 的第二行第 785337 个字符附近
   ![s:2388x337 （不见图请开全局）在 dspassword 后合适的位置添加代码](https://qwq.dsy4567.icu/blog/vercel-dev-sidecar-fq/image/edit.jpg)

    ```js
    ,l.pathname=b.pathname.replaceAll("//","/")
    ```

4. 执行以下命令：
    ```bash
    asar p ./out ./app.asar
    ```
5. 备份并替换原有的 `app.asar` ，启动 DS。

## 创建 Vercel 项目

[点这里](https://github.com/new) 新建一个**GitHub 私有仓库**，名字随便。

打开 `https://github.com/<用户名>/<仓库名>/new/main`，创建一个 `vercel.json` 文件，内容如下：

```json
// 保存前请删除所有注释
// 将 password1 改为任意一串字母和数字
{
    "rewrites": [
        // 去除访问根目录时传出 URL 中的两个斜杠
        {
            "source": "/password/:host:slash(/)?",
            "destination": "https://:host"
        },
        {
            "source": "/password/:host/:path*:slash(/)?:query(\\?.*)?",
            "destination": "https://:host/:path:slash:query"
        }
    ]
}
```

使用 GitHub 登录 Vercel，导入刚才创建的私仓，并在 settings > domains 里绑定你自己的域名。

## 配置 DS

![s:886x743 （不见图请开全局）DS 功能增强页](https://qwq.dsy4567.icu/blog/vercel-dev-sidecar-fq/image/ds.png)

启动 DS，在功能增强里面填好配置并保存：

> 域名：Vercel 绑的域名
>
> 端口：443
>
> 路径：你修改的 password
>
> 密码：留空

然后就可以愉快的科学上网了。

## 缺点

1. 少数网站存在部分资源无法加载的问题
2. 只支持 HTTPS，不支持 HTTP, WS，TCP 等协议
3. Vercel 会向目标网站告知你的真实 IP，带来的结果之一是使用上述魔法访问本文时仍然看到水文。

---

Enjoy!
