Linux Server 使用 Clash TUN 模式实现透明代理(Clash + Yacd 管理界面)保姆级教程

已有更加优雅的实现,详见 clash-for-linux-install

引言

在使用 Linux 服务器的过程中,常常遇到这样的问题:在 Clash 启动后还要为各种应用或服务设置系统代理,还可能遇到一些无法设置代理的软件导致无法访问,所以我们可以通过 Clash 的 TUN 模式 实现系统级的透明代理,让所有应用无需单独配置代理即可直接访问外网。再配合 Yacd 可视化管理面板,我们就能非常直观地管理和切换节点,大大提升使用体验。

开始前准备

  • 安装脚本依赖
    • git
    • iproute
    • nftables
  • Yacd 依赖
    • docker

安装 Clash-TUN

安装 clash-tun

  1. 克隆项目

    git clone https://github.com/blue7wings/clash-tun
    # 连不上 github 可使用反代
    # 如: git clone https://gh.llkk.cc/https://github.com/blue7wings/clash-tun
    cd clash-tun
  2. 配置设置

    sudo mkdir /srv/clash/
    sudo mv config.yaml Country.mmdb /srv/clash/
    sudo mv clash /usr/bin/

安装 clash-core

  1. 下载 Clash Core 并解压

    # AMD64 架构为例
    wget https://downloads.clash.wiki/ClashPremium/clash-linux-amd64-2023.08.17.gz
    # 使用 gunzip 解压
    gunzip clash-linux-amd64-2023.08.17.gz
  2. 安装 Clash 并设置权限

    sudo mv clash-linux-amd64-2023.08.17 /usr/bin/clash
    sudo chmod 775 /usr/bin/clash

完成安装

sudo ./installer.sh install

安装 Yacd

docker run -p 1234:80 -d --name yacd ghcr.io/haishanh/yacd:master

安装后可通过 http://hostip:1234 访问


修改 config.yaml 以开启 Tun 和 Web 管理

通过 vim 修改配置 文件

sudo vim /srv/clash/config.yaml

向配置文件中修改以下选项

# 主机修改为 0.0.0.0 以支持外部访问
# 端口号修改为 9091 以避免与 web 管理冲突
external-controller: "0.0.0.0:9091"
# 启用tun
tun:
enable: true

修改后的配置文件示例

mixed-port: 7890
allow-lan: true
bind-address: "*"
mode: rule
log-level: info
external-controller: "0.0.0.0:9091"
tun:
enable: true
dns:
enable: true
ipv6: true
default-nameserver: [223.5.5.5, 119.29.29.29]
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
use-hosts: true
nameserver: [223.5.5.5, 119.29.29.29, 8.8.8.8, 1.1.1.1]
fallback:
[8.8.4.4, 1.0.0.1, "https://dns.twnic.tw/dns-query", "tls://8.8.4.4:853"]
fallback-filter: { geoip: true, ipcidr: [240.0.0.0/4, 0.0.0.0/32] }
proxies:

修改后就能通过 web 管理选择连接节点了


最终效果

clash服务

yacd控制台


服务管理

  • 设置开机自启(如有需要)

    sudo systemctl enable clash
  • 启动 clash

    sudo systemctl start clash
  • 查看服务状态

    sudo systemctl status clash

一些疑难杂症

yacd 无法连接到 clash 解决方案

  • 方法一:放行 external-controller 端口
    sudo firewall-cmd --add-port=9091/tcp
  • 方法二:关闭防火墙

    尽量不要关闭防火墙,这样会使你的服务器更易受到攻击

    sudo systemctl stop firewalld.service