本文最后更新于 2025-04-01T15:31:43+08:00
本文将详细介绍如何在 Linux 环境下配置 Clash,以实现全局网络代理。
同时使用 proxy-group 与 rule-providers,来实现机场链接和规则的自动订阅。
下载 Clash
从以下备份库下载 Clash Premium,由于 Clash Premium 的主库已被删除,我们将使用备份库来获取: Clash-premium-backup。如果备份库失效则可以百度搜索clash for linux 进行下载
解压 Clash
解压下载的文件:
1 2 3
| gzip -d clash-linux-amd64-n2023-09-05-gdcc8d87.gz chmod +x clash-linux-amd64 mv clash-linux-amd64 clash
|
创建配置文件 config.yaml,并编辑配置:
确保替换掉 <这里替换为你机场的订阅链接> 为你的实际订阅链接。
这里我们用了 proxy-groups 和 rule-providers
当然也可以使用原机场提供的配置文件,但是需要自己手动订阅节点和规则。
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
| port: 7890 socks-port: 7891 redir-port: 7892 mixed-port: 7893 allow-lan: false mode: rule log-level: info ipv6: false external-controller: 127.0.0.1:9091 clash-for-android: append-system-dns: false profile: tracing: true experimental: sniff-tls-sni: true
tun: enable: true stack: system dns-hijack: - any:53 auto-route: true auto-detect-interface: true
dns: enable: true enhanced-mode: fake-ip listen: :53 default-nameserver: - 210.5.56.145 nameserver: - 114.114.114.114 fallback: - https://8888.google/dns-query - https://1.0.0.1/dns-query - https://dns.twnic.tw/dns-query - https://doh.opendns.com/dns-query - https://dns-nyc.aaflalo.me/dns-query - https://dns.aa.net.uk/dns-query - https://sg.adhole.org/dns-query - https://kaitain.restena.lu/dns-query - https://hydra.plan9-ns1.com/dns-query - https://jp.tiar.app/dns-query - https://doh.asia.dnswarden.com/adblock fallback-filter: geoip: true geoip-code: CN
proxy-providers: Exemple: type: http path: ./example.yaml url: <这里替换为你机场的订阅链接> interval: 3600 health-check: enable: true url: http://www.gstatic.com/generate_204 interval: 300
proxy-groups: - name: PROXY type: select url: http://www.gstatic.com/generate_204 interval: 3600 use: - Exemple
rule-providers: reject: type: http behavior: domain url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt" path: ./ruleset/reject.yaml interval: 86400
icloud: type: http behavior: domain url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt" path: ./ruleset/icloud.yaml interval: 86400
apple: type: http behavior: domain url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt" path: ./ruleset/apple.yaml interval: 86400
google: type: http behavior: domain url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt" path: ./ruleset/google.yaml interval: 86400
proxy: type: http behavior: domain url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt" path: ./ruleset/proxy.yaml interval: 86400
direct: type: http behavior: domain url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt" path: ./ruleset/direct.yaml interval: 86400
private: type: http behavior: domain url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt" path: ./ruleset/private.yaml interval: 86400
gfw: type: http behavior: domain url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt" path: ./ruleset/gfw.yaml interval: 86400
tld-not-cn: type: http behavior: domain url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/tld-not-cn.txt" path: ./ruleset/tld-not-cn.yaml interval: 86400
telegramcidr: type: http behavior: ipcidr url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt" path: ./ruleset/telegramcidr.yaml interval: 86400
cncidr: type: http behavior: ipcidr url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt" path: ./ruleset/cncidr.yaml interval: 86400
lancidr: type: http behavior: ipcidr url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt" path: ./ruleset/lancidr.yaml interval: 86400
applications: type: http behavior: classical url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt" path: ./ruleset/applications.yaml interval: 86400
rules: - RULE-SET,applications,DIRECT - DOMAIN,clash.razord.top,DIRECT - DOMAIN,yacd.haishan.me,DIRECT - RULE-SET,private,DIRECT - RULE-SET,reject,REJECT - RULE-SET,tld-not-cn,PROXY - RULE-SET,gfw,PROXY - RULE-SET,google,PROXY - RULE-SET,telegramcidr,PROXY - MATCH,DIRECT
|
运行 Clash:
1 2
| clash -f /path/to/your/config.yaml 注意:请替换 /path/to/your/config.yaml 为你的实际配置文件路径。
|
配置 systemd 服务
创建一个 systemd 服务文件,例如 /etc/systemd/system/clash.service,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Unit] Description=Clash Service After=network.target
[Service] Type=simple User=<你的用户名> WorkingDirectory=<Clash配置文件目录> ExecStart=<Clash执行文件路径> -f <Clash配置文件路径> Restart=on-failure
[Install] WantedBy=multi-user.target
|
[注意] 需要替换 <你的用户名>、<Clash 配置文件目录 >、<Clash 执行文件路径 > 和 < Clash 配置文件路径 > 为你的实际信息。
重新加载 systemd 管理器配置,并启用 Clash 服务:
1 2 3
| sudo systemctl daemon-reload sudo systemctl enable --now clash.service systemctl status clash.service
|
启动需要设置,如果 http 不需要走代理,就只需要设置 https_proxy 即可
1 2
| export http_proxy="http://127.0.0.1:7890" export https_proxy="http://127.0.0.1:7890"
|
此时,clash 基本安装完毕,但是可能还是无法访问外网,因为 clash 默认配置是 DIRECT 直连,需要修改配置文件,将direct直连修改为proxy代理
切换配置
安装jq工具,用于解析JSON字符串
利用curl命令,打印当前配置文件
1 2
| curl --request GET --url http://127.0.0.1:9091/proxies
|
配置文件信息太长,只看节点选择策略组选中的节点
1
| curl --request GET --url http://127.0.0.1:9091/proxies | jq '.proxies."🚀 节点选择".now'
|
第一次输出结果应该为 DIRECT 直连,此状态下无法翻墙,拼接为以下 curl 命令,其中 proxies 后面是你要操作的策略组转义字符串,data 内的 name 对应需要操作的完整节点名,由于🚀 节点选择这个策略组包含emoji和中文,所以需要进行转义,使用如下在线网站进行转义。
转义网站:https://tool.oschina.net/encode?type=4
拼接为以下 curl 命令,其中 proxies 后面是你要操作的策略组转义字符串,data 内的 name 对应需要操作的完整节点名
1
| curl --request PUT --url "http://127.0.0.1:9091/proxies/%F0%9F%9A%80%20%E8%8A%82%E7%82%B9%E9%80%89%E6%8B%A9" --header "Content-Type: text/plain" --data "{\"name\": \"<替换为你想要选择的节点>\"}"
|
正常操作完不会有返回值,此时我们再次调用命令查看,可看到输出修改的节点。
1
| curl --request GET --url http://127.0.0.1:9091/proxies | jq '.proxies."🚀 节点选择".now'
|
参考链接
如有不懂可自行查阅:此链接