EasyTier / EasyTier/EasyTier

[feat] 设计一个分享网络配置的 URL Schema

Open
#1,352 3 comments 4 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
13.6k
Forks
1.4k
Avg merge
1d 9h
Merged PRs (30d)
34

Description

### 功能类别 / Feature Category

用户界面 / User Interface

### 使用场景 / Use Case

通过统一的 URL Schema ,为客户端(CLI、Android、Windows、Linux等)快速导入/创建网络配置,从而大大提高简化网络配置步骤,方便使用。

### 当前限制 / Current Limitations

我拥有多个不同型号、不同端侧的设备。

每次创建网络或更改配置,都需要在不同的设备中手动输入配置,特别繁琐。

### 建议的解决方案 / Proposed Solution

注册一个 URL Schema ,这个 URL Schema 承载网络配置,并可以通过命令行参数、粘贴导入、扫码导入等方式导入其他客户端。

具体说明如下:

## URL Schema

URL Schema 可以设置为:`easytier://`

支持以下 URL :
- 导入配置: `easytier://config-import?data={encoded-config}`
- `data` :网络配置数据

## 网络配置数据

使用 base64 编码、 gzip 压缩 toml 配置字符串,得到简短的编码后字符串。

具效果可参考 [https://www.zickty.com/texttogzip](https://www.zickty.com/texttogzip)

## 示例

编码前:

```
dhcp = true
listeners = [
"tcp://0.0.0.0:11010",
"udp://0.0.0.0:11010",
"wg://0.0.0.0:11011",
]
rpc_portal = "0.0.0.0:0"

[network_identity]
network_name = "name"
network_secret = "secret"

[[peer]]
uri = "tcp://1.1.1.1:11010"

[[peer]]
uri = "tcp://1.1.1.2:11010"

[flags]
latency_first = true
```

编码后:

```
H4sIAAAAAAAAA32QwQqDMAyG73kK6Xlou6OwJ5EipUZX1nUljYhvv1bnBoMtOST8308SMlxtrC4V04zgXWIMSCkLHVQ5BNvYNo2st2yVkkqK047m4Sdapi+iMtFA0fbxQWx8XiAOLgVAF5CXB916N2Bgx6uGQwnmjsVeqnirCS0hF33vyowuIpLWMJMrYD9d1Vu+7vvvOn9cozdT0uBNfohd+9FR4uNNT1uitI4zAQAA
```

组装成 URL:

```
easytier://config-import?data=H4sIAAAAAAAAA32QwQqDMAyG73kK6Xlou6OwJ5EipUZX1nUljYhvv1bnBoMtOST8308SMlxtrC4V04zgXWIMSCkLHVQ5BNvYNo2st2yVkkqK047m4Sdapi+iMtFA0fbxQWx8XiAOLgVAF5CXB916N2Bgx6uGQwnmjsVeqnirCS0hF33vyowuIpLWMJMrYD9d1Vu+7vvvOn9cozdT0uBNfohd+9FR4uNNT1uitI4zAQAA
```

二维码预览:

![qrcode](https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=easytier%3A%2F%2Fconfig-import%3Fdata%3DH4sIAAAAAAAAA32QwQqDMAyG73kK6Xlou6OwJ5EipUZX1nUljYhvv1bnBoMtOST8308SMlxtrC4V04zgXWIMSCkLHVQ5BNvYNo2st2yVkkqK047m4Sdapi%2BiMtFA0fbxQWx8XiAOLgVAF5CXB916N2Bgx6uGQwnmjsVeqnirCS0hF33vyowuIpLWMJMrYD9d1Vu%2B7vvvOn9cozdT0uBNfohd%2B9FR4uNNT1uitI4zAQAA)

## 导入流程

### 桌面端 GUI

- 在工具栏左侧添加一个按钮,按钮名称为“导入配置”
- 点击“导入配置”按钮后,弹出对话框
- 在对话框中粘贴配置 URL 并导入

### 移动端 GUI

- 在工具栏左侧添加一个按钮,按钮名称为“导入配置”
- 点击“导入配置”按钮后,弹出对话框
- 移动端支持粘贴导入和扫码导入,选择相应的导入流程并执行

### CLI

- 添加功能 `--config-url-decode url` ,这个功能能够解码 url ,并在命令行中输出解码后的 toml 配置信息
- 使用如 `./easytier-core --config-url-decode url >config.toml` 这样的命令保存配置信息为文件,即可直接使用

### 预期收益 / Expected Benefits

- 降低新用户学习成本
- 极大简化分享网络配置的流程

### 技术考虑 / Technical Considerations

- GUI 版本可以直接在前端实现此功能,无需修改 rust 端
- CLI 版本需要加入 gzip 解压库

### 备选方案 / Alternative Solutions

_No response_

### 实现优先级 / Implementation Priority

低优先级;可以由我实现

### 补充信息 / Additional Context

- clash 等相关应用均支持通过 url 导入,灵感由此而来。

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.