Loading... <div class="tip inlineBlock warning simple"> 🤖 本博客内容使用 GPT-4 技术进行润色 </div> > Clash 是一个开源的多协议代理客户端,用于在网络上实现科学上网。Clash 内核支持各种 Unix 平台的各个架构;还支持各种代理协议,像 Trojan、Vmess、Shadowsocks 等等;以及强大的分流规则,可以非常方便地自定义各种规则。 本文介绍如何利用 `Raspberry Pi 4B` 来简单搭建 Clash 作为透明代理。通过将 `Raspberry Pi` 设置为透明代理,只需将连接到局域网的设备的网关和 DNS 设置为 `Raspberry Pi` 的 IP 地址,就可以在用户和网络之间提供透明连接,使用户的网络请求被代理服务器处理。 为了高效运行,我们选择了 Raspberry PiOS Lite (64-bit) 系统版本,即仅包含精简的命令行界面(CLI)的版本,专注于提供稳定的代理服务。您可以参考相关文章进行系统的安装和配置: <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://www.huarzone.com/archives/10/" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://www.huarzone.com/usr/uploads/images/top-images/10-top.png);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">树莓派安装系统详解及相关配置</p> <div class="inster-summary text-muted"> Raspberry Pi 是开发用于促进教育和学习的廉价低成本单板计算机,作为一个 Linux 主机,它能够运行相... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> ## 一、下载安装 Clash 内核 <div class="tip inlineBlock error"> emmm,Clash 内核作者已经删库,不确定什么时候恢复 </div> 你可以到 GitHub 下载 [Clash 内核](https://github.com/Dreamacro/clash/releases),并根据安装的系统选择合适版本的二进制文件。`Raspberry Pi 4B` 为 ARMv8 架构(可以通过 `arch` 命令查看),则对应选择 `clash-linux-armv8` 版本,选择文件 [clash-linux-armv8-v1.11.8.gz](https://github.com/Dreamacro/clash/releases/download/v1.11.8/clash-linux-armv8-v1.11.8.gz)。 下载完成后解压文件,然后移动到 `/usr/local/bin/clash` 位置,同时给该文件以执行的权限: ```bash wget https://github.com/Dreamacro/clash/releases/download/v1.11.8/clash-linux-armv8-v1.11.8.gz gunzip clash-linux-armv8-v1.11.8.gz sudo mv clash-linux-armv8-v1.11.8 /usr/local/bin/clash sudo chmod +x /usr/local/bin/clash sudo clash ``` 执行一次 `clash` 命令,Clash 会自动创建 `~/.config/clash/` 配置目录,并生成默认配置文件 `config.yaml` 以及名为 `Country.mmdb` 的 GeoIP 数据库。 `Country.mmdb` 是一个全球IP数据库,用于解析IP信息和地理定位。没有这个文件,Clash 将无法正常运行。您可以从[GitHub](https://github.com/SukkaW/Koolshare-Clash/blob/master/koolclash/koolclash/config/Country.mmdb)下载该文件,并将其放置在默认路径 `~/.config/clash` 下。 要验证 Clash 是否成功安装,可以运行以下命令: ```shell sudo clash -v ``` 如果返回类似于以下信息,则说明安装成功: ``` Clash v1.11.8 linux arm64 with go1.19 Fri Aug 26 13:20:31 UTC 2022 ``` ## 二、设置 Clash 相关配置 接下来,您需要编辑 `config.yaml` 配置文件以适应您的需求。以下是一个示例配置,供您参考: ``` port: 8888 socks-port: 8889 redir-port: 8890 allow-lan: true mode: Rule log-level: info # external-controller: 0.0.0.0:9000 # external-ui: clash-dashboard # secret: "your-secret-passphrase" experimental: ignore-resolve-fail: false dns: enable: true ipv6: false listen: 0.0.0.0:53 enhanced-mode: redir-host nameserver: - https://dns.alidns.com/dns-query # DNS-over-HTTPS hosts: "dns.alidns.com": 223.5.5.5 proxies: ... proxy-groups: ... rules: ... GEOIP,DIRECT MATCH,Proxy ``` * `allow-lan: true` 表示允许 `clash` 处理来自局域网内其他设备的流量。 * `port: 8888` 声明了用作 HTTP / HTTPS 代理的端口。 * `socks-port: 8889` 声明了用作 SOCKS5 代理的端口。 * `redir-port: 8890` 意味着 `clash` 将会监听 8890 端口以处理局域网内其他设备所转发的流量。 * `mode: Rule` 表示代理模式为规则模式(Rule Mode)。 * Global 模式:在 Global 模式下,所有的网络流量都会经过代理服务器。这意味着所有的网络请求都会通过代理服务器发送和接收数据。 * Rule 模式:在 Rule 模式下,网络流量会根据用户定义的规则进行处理。这些规则可以根据目标地址、域名或其他网络流量属性决定是否经过代理服务器。 * Direct 模式:在 Direct 模式下,所有的网络流量都会直接连接到目标服务器,而不经过代理。这个模式可以用于绕过代理服务器,直接连接到需要访问的网站或应用程序。 * Script 模式:在 Script 模式下,可以使用自定义脚本来控制网络流量的走向。用户可以编写脚本,根据特定的条件来决定是否经过代理服务器。 * `dns` 中需要配置 `enable: true` 允许 `clash` 用作 DNS 服务器,配置 `enhanced-mode: redir-host`以用于透明代理,并声明`listen: 0.0.0.0:53`以监听 53 端口(低位端口须用`root` 用户)。 * `dns` 中的 `nameserver` 配置,可以使用常用的公共 DNS 如 114.114.114.114、8.8.8.8 等,也可以配置 DNS-over-HTTPS。 * 本文使用 `https://dns.alidns.com/dns-query` 即阿里 DNS 的 DoH,并且增加了一条 `hosts` 配置 `"dns.alidns.com": 223.5.5.5`,避免再对 dns.alidns.com 进行解析。 `proxies`、`proxy-groups` 以及 `rules` 的配置,则可以根据需要自行编辑。 ## 三、创建 Clash 守护进程 在 Linux 系统中,为了确保 Clash 持续稳定运行,并避免终端关闭后服务中断,我们可以将其配置为守护进程。我们可以考虑很多解决方案,例如 systemd、pm2、screen等。 其中,systemd 是一种广泛采用且功能强大的进程管理工具,本文推荐使用 systemd 来管理系统中的进程、服务和设备,以及对它们的启动、停止和监控操作。通过运行 `sudo vim /lib/systemd/system/clash.service` 命令,我们可以创建一个新的 systemd 服务配置文件,用于管理 Clash 进程。在该配置文件中,我们将定义 Clash 服务的各项属性,包括服务描述、依赖关系、执行命令等。 ``` [Unit] Description=A rule based proxy in Go. After=network.target [Service] Type=simple User=nobody Restart=on-abort ExecStart=/usr/local/bin/clash [Install] WantedBy=multi-user.target ``` 在配置好服务文件后,我们就可以使用 systemctl 命令来管理服务了,下面提供简要的 systemd 操作的相关命令: ```bash # 启动clash.service服务 sudo systemctl start clash.service # 停止clash.service服务 sudo systemctl stop clash.service # 重新启动clash.service服务 sudo systemctl restart clash.service # 开机自启动clash.service服务 sudo systemctl enable clash.service # 查看clash.service服务日志 sudo systemctl status clash.service # 重新加载 systemd 模块 systemctl daemon-reload ``` ## 四、配置终端代理 在配置了 Clash 守护进程后,我们需要为终端设置代理,以便让终端的网络请求经过 Clash 代理服务器,这通常可以通过编辑环境变量来实现。在该树莓派上,我们可以通过命令 `sudo vim /etc/environment` 编辑环境变量,在其中增加以下内容: ``` export http_proxy="127.0.0.1:7890" export https_proxy="127.0.0.1:7890" ``` 在树莓派等 Linux 设备上,我们可以通过直接执行下面命令,轻松实现连接 Clash 代理服务器: <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-9c3aedab172826a3d5fb9d50b125516420" aria-expanded="true"><div class="accordion-toggle"><span style="">Linux 设置http/https代理</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-9c3aedab172826a3d5fb9d50b125516420" class="collapse in collapse-content"><p></p> ```bash export https_proxy="127.0.0.1:7890" export http_proxy="127.0.0.1:7890" ``` <p></p></div></div></div> </br> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-ecbc3dd42d57b54853ac9b3c41c5982a83" aria-expanded="true"><div class="accordion-toggle"><span style="">对于存在密码的情况</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-ecbc3dd42d57b54853ac9b3c41c5982a83" class="collapse collapse-content"><p></p> ```bash export http_proxy_user=username export http_proxy_pass=password ``` <p></p></div></div></div> </br> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-c9267cc0e2d7180c270dc0cceeada24b99" aria-expanded="true"><div class="accordion-toggle"><span style="">Linux 测试 http/https 代理</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-c9267cc0e2d7180c270dc0cceeada24b99" class="collapse collapse-content"><p></p> ```bash curl http://www.google.com curl https://www.google.com ``` <p></p></div></div></div> </br> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-fb2d5399ca591276c4a2d82bc1e9bf196" aria-expanded="true"><div class="accordion-toggle"><span style="">Linux 取消 http/https 代理</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-fb2d5399ca591276c4a2d82bc1e9bf196" class="collapse collapse-content"><p></p> ```bash unset http_proxy unset https_proxy ``` <p></p></div></div></div> </br> 因为 `clash` 使用一个端口同时代理 `http` 和 `https`,故系统变量的 `https_proxy`的代理地址和`http_proxy` 的代理地址是相同的。同时,我们还可以设置 `no_proxy` 环境变量来指定哪些域名或 IP 地址不需要经过代理: ```bash export no_proxy="localhost, 127.0.0.1, *edu.cn" ``` 除了为终端设备设置系统代理,我们还可以为单独的应用程序设置代理。如有需要可以自行参考相关文档进行配置,本文不做过多展开。 ## 五、配置控制面板 为了更直观地监控和管理 Clash 代理服务,我们可以配置 Clash Dashboard 控制面板。Clash Dashboard 是一个基于 Web 的界面,可以展示代理服务的运行状态、流量统计等信息。 首先,我们需要从 GitHub 上克隆 Clash Dashboard 的代码库到本地。在终端中执行以下命令: ```bash cd ~/.config/clash git clone https://github.com/Dreamacro/clash-dashboard.git cd ~/.config/clash/clash-dashboard git checkout -b gh-pages origin/gh-pages ``` 同时,我们需要修改 Clash 的配置文件 `config.yaml`,确保 `external-controller`、`external-ui` 和 `secret` 选项已取消注释,并配置好访问 Dashboard 的口令(secret),然后,Clash 就可以接受来自 Dashboard 的控制请求了。 最后,启动 Clash 服务后,在浏览器中输入 `http://树莓派IP地址:9000/ui`(将 `树莓派IP地址` 替换为实际的 IP 地址),就可以访问 Clash Dashboard 控制面板了。在面板中,我们可以看到代理服务的实时状态、流量图表、规则管理等功能,方便我们进行监控和管理。 Last modification:March 1, 2024 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏
One comment
测试OωO