返回更新列表
新发布Sep 1, 2026

TrustTunnel v1.1.0

开源VPN协议,通过HTTPS隧道传输TCP、UDP和ICMP流量,绕过DPI和限速。支持分流隧道、SOCKS5代理、自定义DNS和跨平台客户端。

分享

TrustTunnel

客户端 · App Store (iOS) · App Store (macOS) · Play 商店


目录


简介

TrustTunnel 是一个现代化的开源 VPN 协议,最初由 AdGuard VPN 开发,现在任何人都可以使用和审计。

它提供快速、安全且可靠的 VPN 连接,无需通常的权衡取舍。 按照设计,TrustTunnel 流量与常规 HTTPS 流量无法区分, 使其能够绕过限速和深度包检测,同时保持 强大的隐私保护。

TrustTunnel 项目包括 VPN 端点(本仓库)、 客户端库和 CLI, 以及 GUI 应用程序。

服务端功能

  • VPN 协议:该库实现了兼容 HTTP/1.1、HTTP/2 和 QUIC 的 VPN 协议。通过模仿常规网络流量, 使其无法被检测和封锁。

  • 灵活的流量隧道:TrustTunnel 可以隧道传输客户端进出的 TCP、UDP 和 ICMP 流量。

  • 平台兼容性:服务端兼容 Linux 和 macOS。 客户端可用于 Android、Apple、Windows 和 Linux。

  • 订阅端点:可选地通过 HTTPS 提供每用户订阅 URL。当在 vpn.toml 中启用 [subscription] 时, 每个客户端可以使用 HTTP Basic Auth 通过 HTTPS 获取 自己的 JSON 配置(连接参数、凭据、DNS 上游 等),从而实现自助服务和自动刷新客户端配置, 无需手动重新分发文件。


客户端功能

  • 流量隧道:该库能够隧道传输客户端到端点 以及返回的 TCP、UDP 和 ICMP 流量。

  • 跨平台支持:它支持 Linux、macOS 和 Windows 平台, 在不同操作系统之间提供一致的体验。

  • 系统级隧道和 SOCKS5 代理:它可以设置为系统级 隧道,利用虚拟网络接口,也可以作为 SOCKS5 代理。

  • 分流隧道:该库支持分流隧道,允许用户 将某些域或主机的连接排除在通过 VPN 端点路由之外,或者反之,根据排除列表仅将通过端点的连接 路由到特定域或主机。

  • 自定义 DNS 上游:用户可以指定自定义 DNS 上游, 用于通过 VPN 端点路由的 DNS 查询。


快速开始

端点设置

安装端点

有一个安装脚本可用,可以通过以下命令运行:```bash curl -fsSL https://raw.githubusercontent.com/TrustTunnel/TrustTunnel/refs/heads/master/scripts/install.sh | sh -s -

安装脚本会从最新的 GitHub release 中下载适用于相应系统架构的预构建包,并将其解压到 `/opt/trusttunnel`。可以通过在上述命令末尾指定 `-o DIR` 标志来覆盖输出目录。

如果你想安装特定版本(而不是最新版本),请使用 `-V <version>`:```bash
curl -fsSL https://raw.githubusercontent.com/TrustTunnel/TrustTunnel/refs/heads/master/scripts/install.sh | sh -s - -V <version>

[!NOTE] 预构建包适用于 linux-x86_64、linux-aarch64 和 macos-universal(Intel 和 Apple Silicon)架构。

更新端点

安装脚本始终安装最新可用版本。 因此,要更新您的安装,请再次运行安装命令:```bash curl -fsSL https://raw.githubusercontent.com/TrustTunnel/TrustTunnel/refs/heads/master/scripts/install.sh | sh -s -

这会重新运行安装程序并替换安装目录中的二进制文件(默认为 `/opt/trusttunnel`,或你使用 `-o DIR` 指定的目录)。

> [!NOTE]
> 更新前别忘了停止端点:
>
> ```bash
> sudo systemctl stop trusttunnel
> ```
>
> 更新后重新启动端点:
>
> ```bash
> sudo systemctl start trusttunnel
> ```

#### 端点配置向导

有关如何配置端点的更详细文档,请参阅 [CONFIGURATION.md](https://github.com/trusttunnel/trusttunnel/blob/master/CONFIGURATION.md)。

安装目录中包含 `setup_wizard` 二进制文件,它有助于生成端点运行所需的配置文件:```bash
cd /opt/trusttunnel/
./setup_wizard -h

安装向导支持交互模式,因此你可以运行它,它会询问端点配置所需的数据。```bash cd /opt/trusttunnel/ sudo ./setup_wizard

> [!NOTE]
> 需要 `sudo` 才能正确管理 TLS 证书。

向导将询问以下字段,其中一些字段有默认值,您可以安全地使用:

- **监听地址** - 指定端点监听的地址。对于原生部署,使用 `0.0.0.0:443`(在所有接口上启用 HTTPS)。
  如果使用 Docker 端口映射 `443:8443`,请将其设置为 `0.0.0.0:8443`。
- **凭据文件路径** - 存储用户授权凭据的路径。
- **用户名** - 用户用于授权的用户名。
- **密码** - 用户的密码。
- **再添加一个用户?** - 如果要添加更多用户,选择 `yes`;如果要继续配置过程,选择 `no`。
- **规则文件路径** - 存储过滤规则的路径。
- **连接过滤规则** - 您可以添加端点用于根据以下条件允许或禁止用户连接的规则:
    - 客户端 IP 地址
    - TLS 随机前缀
    - 带掩码的 TLS 随机值

  按 `n` 允许所有连接。
- **存储库设置的文件路径** - 存储主端点配置文件的路径。
- **证书选择** - 选择获取 TLS 证书的方式:
    - **签发 Let's Encrypt 证书**(需要公共域名) - 安装向导内置 ACME 支持,可以自动从 Let's Encrypt 获取免费的、受公开信任的证书。您需要:
        - 一个指向您服务器 IP 地址的已注册域名
        - 可从互联网访问的 80 端口(用于 HTTP-01 挑战),或者
        - 能够添加 DNS TXT 记录(用于 DNS-01 挑战)
    - **生成自签名证书** - CLI 客户端和 Flutter 客户端均支持。生成的证书会自动嵌入到导出的客户端配置中。
    - **提供现有证书的路径** - 使用您从其他 CA 或 [certbot][certbot] 等工具获取的自己的证书文件。
- **存储 TLS 主机设置的文件路径** - 存储 TLS 主机设置文件的路径。

此时,所有必需的配置文件都已创建并保存到磁盘上。

[certbot]: https://eff-certbot.readthedocs.io/en/stable/

#### Let's Encrypt 证书生命周期

安装向导可以在初始设置期间获取 Let's Encrypt 证书,但您有责任确保其长期有效(续期和服务重新加载/重启)。

如果您使用 Certbot 管理证书并自动续期,请遵循 [CERT_RENEWAL.md](https://github.com/trusttunnel/trusttunnel/blob/master/CERT_RENEWAL.md) 中的指南。

#### 运行端点

安装的软件包包含 systemd 服务模板,名为
`trusttunnel.service.template`。

此模板可用于将端点设置为 systemd 服务:

> [!NOTE]
> 模板文件假定 TrustTunnel Endpoint 二进制文件及其所有
> 配置文件位于 `/opt/trusttunnel` 中,并使用默认
> 文件名。如果您使用了不同的路径,请修改模板。```bash
cd /opt/trusttunnel/
cp trusttunnel.service.template /etc/systemd/system/trusttunnel.service
sudo systemctl daemon-reload
sudo systemctl enable --now trusttunnel

导出客户端配置

端点二进制文件可以生成两种格式的客户端配置:

深链接格式(默认)

生成适用于二维码和移动应用的紧凑 tt://? URI:```shell

<client_name> - name of the client those credentials will be included in the configuration

- ip, ip:port, domain, or domain:port that the client will use to connect

If only ip or domain is specified, the port from the listen_address field will be used

cd /opt/trusttunnel/ ./trusttunnel_endpoint vpn.toml hosts.toml -c <client_name> -a

Or explicitly specify the format:

./trusttunnel_endpoint vpn.toml hosts.toml -c <client_name> -a

--format deeplink

这会输出一个 `tt://?` 深度链接 URI,可用于:

- 直接与移动客户端共享
- 与 [CLI 客户端][trusttunnel-client] 或 [TrustTunnel Flutter 客户端][trusttunnel-flutter-client] 配合使用

你还可以提供额外选项:

- `--name <display_name>`:在客户端应用中为服务器设置自定义显示名称。
- `--dns-upstream <dns_upstream>`:为客户端指定 DNS 上游。可以是 IP 地址
  或安全 DNS URI(例如 `tls://1.1.1.1`、`https://dns.google/dns-query`)。
  此标志可多次使用以提供 DNS 上游列表。

使用自定义名称和 DNS 上游的示例:```shell
./trusttunnel_endpoint vpn.toml hosts.toml -c <client_name> -a <address> \
    --name "My Secure VPN" \
    --dns-upstream 1.1.1.1 --dns-upstream tls://8.8.8.8

当使用 --generate-client-random-prefix 时,端点还会将生成值的允许规则追加到 vpn.toml 引用的 rules.toml 文件中。

注意:如果你的证书由受信任的 CA(例如 Let's Encrypt)签名,它将 自动从深度链接中省略以保持紧凑。自签名 证书会自动包含。

TOML 格式(用于 CLI 客户端)

生成传统的 TOML 配置文件:```shell cd /opt/trusttunnel/ ./trusttunnel_endpoint vpn.toml hosts.toml -c <client_name> -a <public_ip> --format toml

这会输出一个适用于 CLI 客户端的 TOML 配置文件。

##### 订阅 URL

该端点可以通过 HTTPS 提供按用户区分的订阅 URL。当在 `vpn.toml` 中启用
`[subscription]` 部分时,每个客户端都可以通过 HTTPS 获取自己的
JSON 配置——连接参数、凭据、DNS 上游、自定义
SNI 以及客户端随机前缀——使用 HTTP Basic Auth 对
`credentials.toml` 进行认证。这使得客户端可以从单个 URL 直接向端点
配置和刷新其配置,而无需手动重新分发文件。

当启用 `[subscription]` 时,客户端配置导出(包括
`--format toml` 和 `--format deeplink`)还会额外包含一个
`subscription_url` 字段,其形式为:```text
https://<username>:<password>@<host><path>

嵌入的凭据属于由 -c <client_name> 指定的客户端(从 credentials.toml 读取);主机和路径来自 [subscription] 部分的 hostname 和 path 键(默认为 /subscription)。RFC 3986 非保留字符集之外的字符会被百分号编码,因此即使用户名或密码包含 :、@、/ 或其他保留字符,URL 仍保持有效。

要覆盖基础 URL——例如,当端点通过反向代理或不同的公共主机名可达时——请传入 --subscription-url <base_url>:```shell ./trusttunnel_endpoint vpn.toml hosts.toml -c <client_name> -a


--format toml --subscription-url https://sub.example.org/my-sub

仅覆盖基础 URL(scheme、host 和 path);凭据始终从 `credentials.toml` 中嵌入。

分类