tpclash透明网关安装和配置
项目地址: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 | root@tpclash ~ # ❯❯❯ ./tpclash-premium-linux-amd64-v3 install --config https://example.com/clash.yaml |
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 | docker run -dt \ |
此命令假设配置文件位于宿主机的 /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、部署时 其他设置/Options 中
Ignition/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 | # 需要开启 TUN 配置 |
2.2、TUN 配合 eBPF 配置
1 | # 请指定自己实际的接口名称(ip a 获取) |
2.3、Meta 用户
注意: Meta 版本暂时没有经过严格的测试, 作者并没有使用 Meta 版本的需求.
从 v0.0.16
版本开始支持 Clash Meta 分支版本, Meta 用户需要在配置文件中关闭 iptables 配置, 其他配置与默认的 Permium 版本相同:
1 | iptables: |
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 | docker run -dt \ |
然后需要在配置文件中开启 Tracing:
1 | profile: |
最后启动 TPClash 时增加 Tracing 选项即可:
1 | ./tpclash-premium-linux-amd64-v3 --enable-tracing -c /etc/clash.yaml |
启动完成后可访问 http://TPCLASH_IP:3000
查看 Tracing Dashboard, 其默认账户密码均为 admin
.