项目地址:https://github.com/TPClash/tpclash

二进制文件:https://github.com/TPClash/tpclash/releases/tag/v0.2.6

注意!

本教程中依赖原作者mritd的仓库的部分(如Docker容器部署),由于删库跑路的原因没有备份,恢复的工作量比较大,目前无法使用!

且教程中部分引用了原作者的仓库的GitHub Wiki,由于删库跑路的原因没有备份,无法提供原文内容!

一、TPClash 使用

1.1、直接启动

TPClash 只有一个二进制文件, 直接从 Release 页面下载二进制文件运行即可. TPClash 二进制内嵌入了目标平台的 Clash 二进制文件以及其他资源文件(All in one), 启动后会自动释放, 所以无需再下载 Clash.

注意: TPClash 默认会读取位于 /etc/clash.yaml 的 clash 配置文件, 如果 clash 配置文件在其他位置请自行修改.

1
./tpclash-premium-linux-amd64-v3 -c /etc/clash.yaml

1.2、Systemd 安装

除了直接运行之外, 针对于支持 Systemd 的系统 TPClash 也支持 install 命令用于将自身安装为 Systemd 服务; 安装时 TPClash 先将自身复制 到 /usr/local/bin/tpclash, 然后创建 /etc/systemd/system/tpclash.service 配置文件, 并且将附加参数也同步写入到 Systemd 配置中.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@tpclash ~ # ❯❯❯ ./tpclash-premium-linux-amd64-v3 install --config https://example.com/clash.yaml

████████╗██████╗ ██████╗██╗ █████╗ ███████╗██╗ ██╗
╚══██╔══╝██╔══██╗██╔════╝██║ ██╔══██╗██╔════╝██║ ██║
██║ ██████╔╝██║ ██║ ███████║███████╗███████║
██║ ██╔═══╝ ██║ ██║ ██╔══██║╚════██║██╔══██║
██║ ██║ ╚██████╗███████╗██║ ██║███████║██║ ██║
╚═╝ ╚═╝ ╚═════╝╚══════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
👌 TPClash 安装完成, 您可以使用以下命令启动:
- 启动服务: systemctl start tpclash
- 停止服务: systemctl stop tpclash
- 重启服务: systemctl restart tpclash
- 开启自启动: systemctl enable tpclash
- 关闭自启动: systemctl disable tpclash
- 查看日志: journalctl -fu tpclash
- 重载服务配置: systemctl daemon-reload

1.3、Docker 运行

注意: 从 v0.1.0 版本开始, 如果使用 Docker 运行或者宿主机安装了 Docker, TPClash 会自动尝试使用 nftables 进行修复; 如果宿主机不支持 nftables, 请自行使用 iptables -I DOCKER-USER -i src_if -o dst_if -j ACCEPT 命令修复.

如果想要在 Docker 中使用 tpclash, 只需要挂载外部配置文件即可:

1
2
3
4
5
6
docker run -dt \
--name tpclash \
--privileged \
--network=host \
-v /root/clash.yaml:/etc/clash.yaml \
mritd/tpclash

此命令假设配置文件位于宿主机的 /root/clash.yaml 位置, 其他位置请自行替换; 该镜像采用 Earthly 编译, Earthfile 存储在 autobuild 仓库.

1.4、容器化虚拟机部署

TPClash 一开始的目标就是作为一个稳定可靠的、可以直接托管配置的内网网关使用, 虽然 TPClash 可以兼容大多数系统, 但特殊系统环境例如 OpenWrt 等可能会出现 一些兼容性问题;为了统一部署环境和更方便使用, 目前已增加了纯容器化系统 Flatcar 系统支持, 该系统支持直接使用单个配置文件完成引导和自动化部署, 且后台自动 滚动升级; 可以持续维持系统的最新状态并且可安全回滚; 以下是在 ESXi 中直接部署说明:

  • 1、下载项目内的 flatcar.butane.yaml
  • 2、调整配置文件内的 IP 地址和网关地址, DNS 一般不需要修改
  • 3、调整配置文件内 TPClash 的启动命令, 一般需要指定远程 clash 配置文件地址
  • 4、参考 butane 官方文档安装 butane 工具
  • 5、执行 butane --pretty --strict flatcar.butane.yaml | base64 -w0 生成 base64 编码格式的 Ignition 配置(yaml名称自行替换)
  • 6、下载对应系统的 ova 系统部署文件
  • 7、在 ESXi 内创建虚拟机选择从 OVA 部署
  • 8、部署时 其他设置/OptionsIgnition/coreos-cloudinit data 填写第 5 步生成的 base64 字符串, Ignition/coreos-cloudinit data encoding 填写 base64
  • 9、最后启动完成, 一个容器化、不可变的可靠 TPClash 网关就启动了

关于这个系统以及其配置文件限于篇幅无法做过多说明, 推荐阅读博客文章.

1.5、设置流量转发

TPClash 启动成功后, 将其他主机的网关指向当前 TPClash 服务器 IP 即可实现透明代理; 对于被代理主机请使用公网 DNS.

请不要将其他主机的 DNS 也设置为 TPClash 服务器 IP, 因为这可能导致一些不可预测的问题, 具体请参考 Clash DNS 科普.

1.6、升级 TPClash

对于二进制文件部署的用户, 可以使用以下命令升级到最新版本:

1
root@tpclash ~ # ❯❯❯ tpclash upgrade

如果想要升级到特定版本也可以指定版本号:

1
root@tpclash ~ # ❯❯❯ tpclash upgrade v0.1.10

升级前请确保关闭了 tpclash 服务, 升级时默认使用 https://mirror.ghproxy.com 进行加速, 如果不想使用可以通过 --with-ghproxy=false 选项关闭.

1.7、网页控制面板

TPClash 自带与内核相适配的网页控制面板,您只需要访问 IP:9090/ui 后,再将 Clash 后端地址填入 (默认提供的 example.yaml 设置模板的 RESTful API 地址是 IP:9090 ) 即可访问。

三、TPClash 配置

默认情况下 TPClash 会读取 /etc/clash.yaml 配置文件启动 Clash; TPClash 首先会读取该文件并进行模版解析, 解析成功后 TPClash 会将其写入到 Home 目录的 xclash.yaml 中 (默认为 /data/clash/xclash.yaml), 然后再使用该配置启动 Clash. 由于 TPClash 只是一个辅助工具, 实际代理处理还是由 Clash 完成, 为了避免错误配置导致代理不工作, TPClash 对 Clash 配置文件进行了必要性的配置检测. 下面是一些推荐的配置样例:

2.1、TUN 模式配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 需要开启 TUN 配置
tun:
enable: true
stack: system
dns-hijack:
- any:53
# - 8.8.8.8:53
# - tcp://8.8.8.8:53
auto-route: true
auto-redir: true
auto-detect-interface: true

# 开启 DNS 配置, 且使用 fake-ip 模式
dns:
enable: true
listen: 0.0.0.0:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
default-nameserver:
- 223.5.5.5
- 119.29.29.29
nameserver:
- 223.5.5.5
- 119.29.29.29

2.2、TUN 配合 eBPF 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 请指定自己实际的接口名称(ip a 获取)
interface-name: ens160

tun:
enable: true
stack: system
dns-hijack:
- any:53
# - 8.8.8.8:53
# - tcp://8.8.8.8:53
# auto-route 与 ebpf 冲突, 不能同时使用
#auto-route: true
#auto-redir: true
#auto-detect-interface: true

# ebpf 需要指定物理网卡
ebpf:
redirect-to-tun:
- ens160

# ebpf 需要配置 mark
routing-mark: 666

# 开启 DNS 配置, 且使用 fake-ip 模式
dns:
enable: true
listen: 0.0.0.0:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
default-nameserver:
- 223.5.5.5
- 119.29.29.29
nameserver:
- 223.5.5.5
- 119.29.29.29

2.3、Meta 用户

注意: Meta 版本暂时没有经过严格的测试, 作者并没有使用 Meta 版本的需求.

v0.0.16 版本开始支持 Clash Meta 分支版本, Meta 用户需要在配置文件中关闭 iptables 配置, 其他配置与默认的 Permium 版本相同:

1
2
iptables:
enable: false

2.4、订阅用户

如果期望完全不修改订阅配置实现透明代理, 可直接使用 --auto-fix=tun 参数启动, 该参数将会自动修补远程配置来实现透明代理, 同样带来的 后果是一些参数将会被硬编码:

1
root@tpclash ~ # ❯❯❯ tpclash --auto-fix tun -c https://exmaple.com/clash.yaml

三、高级配置

3.1、远程配置加载

为了方便使用, 在 v0.0.19 版本开始支持远程配置加载; 从 v0.0.22 版本开始进一步优化远程配置加载功能, 目前使用方式如下:

  • 1、使用 -c 参数指定 http(s) 远程配置文件地址, 例如 -c https://example.com/clash.yaml
  • 2、使用 -i 参数指定检查间隔时间, TPClash 会按照这个时间频率去检查远程配置是否与本地一致, 不一致则更新并自动重载
  • 3、使用 --http-header 参数设置下载远程配置的 http 请求头, 用于支持下载公网带认证的托管配置, 例如 --http-header "Authorization=Basic YWRtaW46MTIz"
  • 4、使用 --config-password 参数设置配置文件的密码, 改密码用于解密配置文件, 主要用于将配置文件存储在可公共访问的地址(防止泄密)

注意: 如果远程配置修改了端口等配置, 那么仍需要重新启动 TPClash, 因为 TPClash 重载无法照顾到底层的端口变更.

3.2、使用加密的配置文件

v0.1.6 版本开始支持配置文件加密, 现在可以使用以下命令对明文的 yaml 配置进行加密:

1
./tpclash enc --config-password YOUR_PASSWORD clash.yaml

加密完成后将在本地生成一个被加密过的 clash.yaml.enc 文件, 该文件可以直接托管到任何可公共访问的 http 地址(也可以本地使用).

当 TPClash 指定了远程 http 配置, 同时 --config-password 选项不为空的情况下, 则认为远程地址的配置文件是被加密的, TPClash 将会自动完成解密并加载:

1
./tpclash --config-password YOUR_PASSWORD -c https://exmaple.com/clash.yaml.enc

3.3、使用模版引擎

为了应对单配置文件多实例的部署情况, TPClash 内置了一些模版函数, 这些函数可以辅助配置生成完成自动化配置:

  • {{IfName}}: 自动解析为当前主机的主网卡
  • {{DefaultDNS}}: 自动获取当前主机默认的上游 DNS

模版函数可能随后续更新继续添加, 使用方法请参考项目内的 example.yaml 配置.

3.4、Premium Tracing

v0.1.8 版本开始提供 Premium 核心的 Tracing Dashboard 自动部署, 此功能需要宿主机安装有 Docker, TPClash 会调用 Docker API 自动创建容器.

对于采用 Systemd 部署的用户, 宿主机安装好 Docker 后无需其他特殊操作; 对于采用 Docker 部署的用户, 需要增加一个挂载:

1
2
3
4
5
6
7
docker run -dt \
--name tpclash \
--privileged \
--network=host \
-v /root/clash.yaml:/etc/clash.yaml \
+ -v /var/run/docker.sock:/var/run/docker.sock \
mritd/tpclash

然后需要在配置文件中开启 Tracing:

1
2
profile:
tracing: true

最后启动 TPClash 时增加 Tracing 选项即可:

1
./tpclash-premium-linux-amd64-v3 --enable-tracing -c /etc/clash.yaml

启动完成后可访问 http://TPCLASH_IP:3000 查看 Tracing Dashboard, 其默认账户密码均为 admin.