本文介绍如何使用 clash 搭建透明代理。

概述

Clash 是一款网络代理工具。阅读本文前请先阅读 官方文档,本文主要涉及:

  • 官方文档中容易忽略的事项以及周边技术资料。
  • 如何使用 TPClash 搭建局域网内的透明代理。

代理服务器

proxy-groups 可以方便的对代理进行组合:

  • relay:多个代理服务形成中继链来处理代理请求。
  • utl-test:clash 通过多方面测试选择最适合的代理服务器。
  • fallback:选择第一个返回测试响应的服务器。
  • load-balance: 对代理服务器进行负载均衡。
  • select:手动选择代理服务器。

proxy-provides 使用户能够动态加载代理服务器列表,而不是将它们硬编码在配置文件中。

proxy-groups 搭配 proxy-providers 可聚合(多个)机场提供的代理资源,以及自建的代理服务器,详见下面的 TPClash 配置。

代理规则

代理规则 的基本语法是:

TYPE,ARGUMENT,POLICY(,no-resolve)

其中 POLICY 可以使以下取值:

  • DIRECT: 不走代理,也不查询系统路由表,直接通过配置的网卡接口访问。
  • REJECT: 不可访问。
  • Proxy: 通过指定的代理服务器访问。
  • Proxy Group: 通过指定的代理服务器组访问。

需要注意的是:代理规则支持 PROCESS-NAME/PROCESS-PATH,可以用来直接对指定程序设置代理,在没有设置透明代理的情况下,对于那些不提供代理设置的应用程序(比如 discord)简直是福音。

rule providers 可以让我们方便的使用别人配置好的代理规则,我们也可以自己利用 Github 仓库编写 provider,方便在各个客户端同步,参见下面配置中 myProvider 的不分。

透明代理

DNS 劫持

如果系统 DNS 使用的内网地址,比如 ubuntu 使用 systemd-resolved,该服务在 127.0.0.53:53 自建了 DNS 服务,这导致 clash 的 DNS 劫持没有生效,具体原因参见 github 相关的讨论

这种情况下,需要关闭 systemd-resolved 服务,并修改系统默认的 DNS 配置:

注意:tun.dns-hijack 部分最好不要设置成 any:53,以免影响本机上的其他服务。比如我机器上还部署了 k8s,这会影响 k8s 集群的 dns 解析。

配置

TProxy 是 Linux 一种用于支持透明代理的,常见的实现方式是 iptables 以及 nftables。

clash 与透明代理相关的配置:

TPClash 是一款基于 clash Premium 的辅助工具,将配置透明代理的工作量降到了最低,但是目前对 HTTP 类型的 proxy provider 支持不够好:不能解析机场返回的代理资源,这个应该是一个 bug,希望作者可以进行修正。

TPClash 配置:

看到 github.com 的域名解析已经变为198.18.0.3,说明 clash 配置的 DNS 劫持已经生效。

开机启动

TPClash 通过 systemd 进行管理:

可通过 yacd( http://{{external-controller}}/ui ) 对 clash 进行管理。

TPClash 启动成功后,当前机器的透明代理就搭建完成了。

局域网网关

路由转发

该主机要作为局域网内的网关,需要开启 kernel 路由转发功能:

临时开启:

sudo sysctl -w net.ipv4.ip_forward=1

永久生效需要编辑 /etc/sysctl.conf 文件中的相关字段。

其他主机设置

其他主机可以通过两个步骤使用透明代理:

  • 使用 TPClash 服务器 IP 作为网关。
  • 使用 TPClash 服务器 IP 作为 DNS 服务器。

使用 netplan 可以通过编辑/etc/netplan/下的配置文件设置 DNS 和默认网关:

执行sudo netplan apply生效。

客户端

clashx

可以通过 icloud 保存配置文件,方便在多个 apple 终端同步同步。Settings->Use iCloud to store config files

使用下面的配置文件:

启动 enhanced-mode,生效如下:

clashx-tune

clash for windows

CFW 是 Clash 的 Windows/macOS/Linux 图形客户端,相比 clashx,更具跨平台性,也更加可配置。

配置说明

CFW 启动的过程会使用到两个配置文件,分别是:

  • ${Home}/config.yaml 该文件是 Clash 的启动文件,如果此文件有错,则 Clash 核心将无法启动。
  • ${Home}/profiles/xxxx.yaml,该目录下的文件均由用户导入,CFW 统一生成的,一般命名为时间戳。该目录下的文件不建议添加 tun/dns/hosts 等字段。

配置加载过程参见 官方说明

参考