加载中...
加载中...
在日常使用中,我们经常需要让终端、图形界面以及各种应用程序都能访问任意网络,同时又要尽可能节省代理流量。传统的全局代理模式虽然能保证所有流量都走代理,但会消耗大量流量,特别是访问国内网站时也会走代理,不仅浪费流量,还可能影响访问速度。
本文将详细介绍如何通过 Clash 客户端(Clash Verge 或 Clash Party)配置一个既省流量又能让所有应用访问任意网络的解决方案。核心思路是:使用规则模式实现智能分流,结合 TUN 模式确保所有应用都能使用代理。
要实现省流量且全局可用的代理配置,需要同时满足以下两个条件:
方案一:TUN 模式 + 规则模式(推荐)
方案二:系统代理 + 规则模式 + 终端环境变量
TUN 模式是实现全局代理的最佳方案,它通过在系统层面创建虚拟网络接口,接管所有系统流量,确保包括终端在内的所有应用都能使用代理。
Clash Verge 启用步骤
Clash Party 启用步骤
在配置文件中可以详细设置 TUN 模式的参数:
tun:
enable: true
stack: system # 或 gvisor,system 使用系统网络栈,性能更好
dns-hijack:
- any:53 # 劫持所有 DNS 查询
auto-route: true # 自动路由
auto-detect-interface: true # 自动检测网络接口
参数说明
enable:是否启用 TUN 模式stack:网络栈类型system:使用系统网络栈,性能更好,推荐gvisor:使用 gVisor,更安全但性能略低dns-hijack:DNS 劫持设置,确保 DNS 查询也走代理auto-route:自动路由设置,自动配置路由规则auto-detect-interface:自动检测网络接口,适应网络变化启用 TUN 模式后,可以通过以下方式验证:
1. 检查虚拟网卡
ifconfig 或 ip addr 查看是否有新的网络接口(通常名为 utun 或 clash)2. 测试终端访问
在终端中测试访问被限制的网站:
# 测试访问 Google
curl https://www.google.com
# 测试访问 GitHub
curl https://www.github.com
# 查看当前 IP(应该显示代理服务器的 IP)
curl https://ip.sb
3. 检查 DNS 解析
# 测试 DNS 解析
nslookup google.com
# 或
dig google.com
如果 TUN 模式正常工作,所有网络请求都会通过代理,包括终端命令。
规则模式是实现省流量的关键,它根据预设规则智能分流,让国内流量直连,国外流量走代理。
一个典型的省流量规则配置如下:
mode: rule # 使用规则模式
rules:
# 1. 内网地址直连
- IP-CIDR,192.168.0.0/16,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
# 2. 国内域名直连(节省流量)
- DOMAIN-SUFFIX,cn,DIRECT
- DOMAIN-SUFFIX,com.cn,DIRECT
- DOMAIN-SUFFIX,net.cn,DIRECT
- DOMAIN-SUFFIX,org.cn,DIRECT
# 3. 常用国内网站直连
- DOMAIN-SUFFIX,baidu.com,DIRECT
- DOMAIN-SUFFIX,qq.com,DIRECT
- DOMAIN-SUFFIX,taobao.com,DIRECT
- DOMAIN-SUFFIX,tmall.com,DIRECT
- DOMAIN-SUFFIX,alipay.com,DIRECT
- DOMAIN-SUFFIX,weibo.com,DIRECT
- DOMAIN-SUFFIX,zhihu.com,DIRECT
- DOMAIN-SUFFIX,bilibili.com,DIRECT
# 4. 国外网站走代理
- DOMAIN-SUFFIX,google.com,PROXY
- DOMAIN-SUFFIX,github.com,PROXY
- DOMAIN-SUFFIX,youtube.com,PROXY
- DOMAIN-SUFFIX,twitter.com,PROXY
- DOMAIN-SUFFIX,facebook.com,PROXY
# 5. 地理位置规则:中国 IP 直连
- GEOIP,CN,DIRECT
# 6. 默认规则:其他流量走代理
- MATCH,PROXY
规则按照配置顺序从上到下匹配,先匹配的规则优先生效。因此规则顺序非常重要:
Clash Party 提供了 Smart Core 规则覆写功能,可以一键应用优化的分流规则:
Smart Core 规则会自动包含:
1. 将常用规则放在前面
将访问频率高的域名规则放在前面,可以提高匹配效率:
rules:
# 最常用的网站放在最前面
- DOMAIN-SUFFIX,github.com,PROXY
- DOMAIN-SUFFIX,google.com,PROXY
- DOMAIN-SUFFIX,stackoverflow.com,PROXY
2. 使用域名规则而非 IP 规则
域名规则更精确,也更容易维护:
# 推荐:使用域名规则
- DOMAIN-SUFFIX,example.com,PROXY
# 不推荐:使用 IP 规则(IP 可能变化)
- IP-CIDR,1.2.3.4/32,PROXY
3. 合理使用 GEOIP 规则
GEOIP 规则可以大幅减少规则数量,但要注意放在合适的位置:
rules:
# 先匹配具体规则
- DOMAIN-SUFFIX,google.com,PROXY
# 再匹配地理位置规则
- GEOIP,CN,DIRECT
# 最后是默认规则
- MATCH,PROXY
DNS 配置对于代理的稳定性和性能至关重要,正确的 DNS 配置可以确保域名解析正确,同时提升访问速度。
dns:
enable: true
listen: 0.0.0.0:53
enhanced-mode: fake-ip # 或 redir-host
fake-ip-range: 198.18.0.1/16
nameserver:
- 223.5.5.5 # 阿里 DNS
- 119.29.29.29 # 腾讯 DNS
- 114.114.114.114 # 114 DNS
fallback:
- 8.8.8.8 # Google DNS
- 1.1.1.1 # Cloudflare DNS
- 8.8.4.4 # Google DNS 备用
fallback-filter:
geoip: true
geoip-code: CN
ipcidr:
- 240.0.0.0/4
fake-ip 模式(推荐)
redir-host 模式
DNS 分流可以确保国内域名使用国内 DNS,国外域名使用国外 DNS:
dns:
enable: true
enhanced-mode: fake-ip
nameserver:
- 223.5.5.5 # 国内 DNS
- 119.29.29.29
fallback:
- 8.8.8.8 # 国外 DNS
- 1.1.1.1
fallback-filter:
geoip: true
geoip-code: CN # 中国 IP 使用 nameserver
ipcidr:
- 240.0.0.0/4 # 保留 IP 段使用 fallback
如果无法使用 TUN 模式(例如没有 root 权限),可以通过配置环境变量让终端使用代理。
# HTTP/HTTPS 代理
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
# SOCKS5 代理
export all_proxy=socks5://127.0.0.1:7891
# 不使用代理的地址(可选)
export no_proxy=localhost,127.0.0.1,::1
方法一:修改 shell 配置文件
根据使用的 shell,编辑对应的配置文件:
Bash(~/.bashrc 或 ~/.bash_profile):
# 添加到文件末尾
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7891
export no_proxy=localhost,127.0.0.1,::1
Zsh(~/.zshrc):
# 添加到文件末尾
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7891
export no_proxy=localhost,127.0.0.1,::1
Fish(~/.config/fish/config.fish):
# 添加到文件末尾
set -gx http_proxy http://127.0.0.1:7890
set -gx https_proxy http://127.0.0.1:7890
set -gx all_proxy socks5://127.0.0.1:7891
set -gx no_proxy localhost,127.0.0.1,::1
方法二:创建代理开关脚本
创建一个便捷的代理开关脚本:
#!/bin/bash
# 文件名:proxy.sh
# 启用代理
proxy_on() {
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7891
export no_proxy=localhost,127.0.0.1,::1
echo "代理已启用"
}
# 禁用代理
proxy_off() {
unset http_proxy
unset https_proxy
unset all_proxy
unset no_proxy
echo "代理已禁用"
}
# 显示代理状态
proxy_status() {
if [ -n "$http_proxy" ]; then
echo "代理状态:已启用"
echo "HTTP 代理:$http_proxy"
echo "HTTPS 代理:$https_proxy"
echo "SOCKS5 代理:$all_proxy"
else
echo "代理状态:已禁用"
fi
}
# 根据参数执行相应操作
case "$1" in
on)
proxy_on
;;
off)
proxy_off
;;
status)
proxy_status
;;
*)
echo "用法: $0 {on|off|status}"
exit 1
;;
esac
使用方法:
# 添加执行权限
chmod +x proxy.sh
# 启用代理
source proxy.sh on
# 禁用代理
source proxy.sh off
# 查看状态
source proxy.sh status
# 测试访问被限制的网站
curl https://www.google.com
# 查看当前 IP
curl https://ip.sb
# 测试 Git(如果配置了 Git 代理)
git clone https://github.com/example/repo.git
对于图形界面应用,需要配置系统代理设置。
Clash 客户端通常会自动配置系统代理,也可以手动设置:
127.0.0.1:7890127.0.0.1:7890127.0.0.1:7891127.0.0.1:7890127.0.0.1:7890127.0.0.1:7891GNOME 桌面环境:
KDE 桌面环境:
命令行配置(适用于所有桌面环境):
# 设置系统代理环境变量(全局)
sudo tee /etc/environment << EOF
http_proxy=http://127.0.0.1:7890
https_proxy=http://127.0.0.1:7890
all_proxy=socks5://127.0.0.1:7891
no_proxy=localhost,127.0.0.1,::1
EOF
以下是一个完整的配置文件示例,结合了 TUN 模式、规则模式和 DNS 优化:
# 端口配置
port: 7890
socks-port: 7891
mixed-port: 7890
allow-lan: false
# 模式:规则模式(省流量)
mode: rule
# 日志级别
log-level: info
# 外部控制器
external-controller: 127.0.0.1:9090
# TUN 模式配置(全局代理)
tun:
enable: true
stack: system
dns-hijack:
- any:53
auto-route: true
auto-detect-interface: true
# DNS 配置
dns:
enable: true
listen: 0.0.0.0:53
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 223.5.5.5
- 119.29.29.29
- 114.114.114.114
fallback:
- 8.8.8.8
- 1.1.1.1
- 8.8.4.4
fallback-filter:
geoip: true
geoip-code: CN
ipcidr:
- 240.0.0.0/4
# 代理节点(从订阅获取)
proxies:
# 节点会从订阅自动获取
# 代理组
proxy-groups:
- name: '手动选择'
type: select
proxies:
- '自动选择'
- '节点1'
- '节点2'
- DIRECT
- name: '自动选择'
type: url-test
proxies:
- '节点1'
- '节点2'
- '节点3'
url: 'http://www.gstatic.com/generate_204'
interval: 300
tolerance: 50
# 规则配置(省流量核心)
rules:
# 内网地址直连
- IP-CIDR,192.168.0.0/16,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
# 国内域名直连
- DOMAIN-SUFFIX,cn,DIRECT
- DOMAIN-SUFFIX,com.cn,DIRECT
# 常用国内网站直连
- DOMAIN-SUFFIX,baidu.com,DIRECT
- DOMAIN-SUFFIX,qq.com,DIRECT
- DOMAIN-SUFFIX,taobao.com,DIRECT
- DOMAIN-SUFFIX,weibo.com,DIRECT
- DOMAIN-SUFFIX,zhihu.com,DIRECT
- DOMAIN-SUFFIX,bilibili.com,DIRECT
# 国外网站走代理
- DOMAIN-SUFFIX,google.com,手动选择
- DOMAIN-SUFFIX,github.com,手动选择
- DOMAIN-SUFFIX,youtube.com,手动选择
- DOMAIN-SUFFIX,twitter.com,手动选择
# 地理位置规则:中国 IP 直连
- GEOIP,CN,DIRECT
# 默认规则:其他流量走代理
- MATCH,手动选择
症状:图形界面应用可以访问,但终端命令(如 curl、git)无法访问被限制的网站。
解决方案:
症状:即使启用了 TUN 模式,某些应用仍然无法访问网络。
解决方案:
症状:国内网站访问速度变慢,甚至无法访问。
解决方案:
DIRECTGEOIP,CN,DIRECT 规则在正确的位置症状:尝试启用 TUN 模式时提示权限不足或失败。
解决方案:
sudo 运行或配置 sudo 权限症状:代理流量消耗过快,超出预期。
解决方案:
TUN 模式是最彻底的全局代理方案,推荐优先使用。只有在无法使用 TUN 模式的情况下,才考虑使用系统代理 + 环境变量的方案。
始终使用规则模式而非全局模式,通过智能分流节省流量:
合理配置 DNS 可以提升访问速度和稳定性:
规则列表需要定期更新以保持准确性:
定期查看流量统计,了解流量消耗情况:
定期备份配置文件,防止配置丢失:
通过合理配置 Clash 客户端,我们可以实现既省流量又能让所有应用访问任意网络的完美方案:
关键是要理解各个组件的作用和配置方法,根据实际需求选择合适的方案。TUN 模式 + 规则模式是最推荐的组合,既能保证全局可用,又能最大程度节省流量。
希望本文能够帮助您配置一个既省流量又能让所有应用访问任意网络的代理环境。如有问题,欢迎参考常见问题部分或查阅 Clash 官方文档。
在使用 TUN 模式时,可能会遇到 Git push 到 GitHub 失败的问题,而使用系统代理时却能成功。这是一个常见但容易被忽视的问题,本节将详细分析原因并提供解决方案。
典型症状:
git push 可以成功推送到 GitHubgit push 失败,出现连接超时或网络错误curl)在 TUN 模式下正常工作git clone 可能也失败1. DNS 解析问题
TUN 模式下使用 fake-ip 模式时,DNS 查询会返回假 IP 地址(如 198.18.x.x),然后根据规则决定是否连接。某些 Git 操作可能无法正确处理这种假 IP,导致连接失败。
2. Git 协议选择问题
Git 可以使用两种协议连接 GitHub:
https://github.com/user/repo.gitgit@github.com:user/repo.git两种协议在 TUN 模式下的行为可能不同:
3. 规则路由问题
如果规则配置不当,GitHub 的流量可能被错误路由:
4. 网络接口优先级问题
TUN 模式创建的虚拟网卡可能与其他网络接口存在路由优先级冲突,导致流量没有正确通过虚拟网卡。
如果使用 fake-ip 模式导致问题,可以尝试切换到 redir-host 模式:
dns:
enable: true
enhanced-mode: redir-host # 从 fake-ip 改为 redir-host
nameserver:
- 223.5.5.5
- 119.29.29.29
fallback:
- 8.8.8.8
- 1.1.1.1
fallback-filter:
geoip: true
geoip-code: CN
注意事项:
redir-host 模式会先解析真实 IP,再根据规则路由,兼容性更好fake-ip 模式,但对于 Git 操作影响不大确保 GitHub 相关的域名和 IP 正确走代理:
rules:
# ... 其他规则 ...
# GitHub 相关域名强制走代理
- DOMAIN-SUFFIX,github.com,手动选择
- DOMAIN-SUFFIX,githubusercontent.com,手动选择
- DOMAIN-SUFFIX,github.io,手动选择
- DOMAIN-SUFFIX,githubapp.com,手动选择
# GitHub 的 IP 段(如果知道的话)
# 注意:GitHub 的 IP 可能变化,建议使用域名规则
# 地理位置规则:中国 IP 直连
- GEOIP,CN,DIRECT
# 默认规则:其他流量走代理
- MATCH,手动选择
关键点:
DOMAIN-SUFFIX 匹配所有 GitHub 子域名如果 TUN 模式仍有问题,可以为 Git 单独配置代理:
配置 Git HTTP/HTTPS 代理:
# 全局配置
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
# 仅针对 GitHub 配置
git config --global http.https://github.com.proxy http://127.0.0.1:7890
# 查看配置
git config --global --get http.proxy
git config --global --get https.proxy
取消代理配置(如果不再需要):
git config --global --unset http.proxy
git config --global --unset https.proxy
注意事项:
如果使用 SSH 协议连接 GitHub,需要确保 SSH 连接也能通过代理:
方法一:使用 SSH 的 ProxyCommand
编辑 ~/.ssh/config 文件:
# GitHub SSH 配置
Host github.com
Hostname github.com
User git
# 使用 SOCKS5 代理
ProxyCommand nc -X 5 -x 127.0.0.1:7891 %h %p
# 或者使用 HTTP 代理(需要 corkscrew 工具)
# ProxyCommand corkscrew 127.0.0.1 7890 %h %p
IdentityFile ~/.ssh/id_rsa
方法二:使用 SSH over HTTPS(端口 443)
GitHub 支持通过 HTTPS 端口(443)进行 SSH 连接,这通常更容易通过防火墙和代理:
# 编辑 ~/.ssh/config
Host github.com
Hostname ssh.github.com
Port 443
User git
IdentityFile ~/.ssh/id_rsa
测试 SSH 连接:
# 测试 SSH 连接是否正常
ssh -T git@github.com
# 如果成功,会显示:
# Hi username! You've successfully authenticated...
确保 TUN 模式配置正确:
tun:
enable: true
stack: system # 使用 system 栈,性能更好
dns-hijack:
- any:53 # 劫持所有 DNS
auto-route: true # 自动路由
auto-detect-interface: true # 自动检测接口
# 如果需要,可以指定网络接口
# interface-name: eth0
验证 TUN 模式是否正常工作:
# 检查虚拟网卡是否存在
ip addr show | grep -i tun
# 或
ifconfig | grep -i tun
# 测试 DNS 解析
nslookup github.com
dig github.com
# 测试网络连接
curl -v https://github.com
ping github.com
如果 TUN 模式问题难以解决,可以临时切换回系统代理模式:
当遇到 Git push 失败时,按以下步骤诊断:
1. 检查 Git 使用的协议
# 查看远程仓库 URL
git remote -v
# 如果是 HTTPS,会显示 https://github.com/...
# 如果是 SSH,会显示 git@github.com:...
2. 测试网络连接
# 测试 HTTPS 连接
curl -v https://github.com
# 测试 SSH 连接(如果使用 SSH)
ssh -vT git@github.com
# 查看当前 IP(应该显示代理服务器 IP)
curl https://ip.sb
3. 检查 DNS 解析
# 查看 GitHub 域名解析
nslookup github.com
dig github.com
# 检查解析的 IP 是否正确
4. 查看 Clash 日志
在 Clash 客户端中查看连接日志,了解流量是如何被路由的:
5. 测试不同的 Git 操作
# 测试 clone
git clone https://github.com/octocat/Hello-World.git
# 测试 push(如果已有仓库)
git push origin main
# 测试 fetch
git fetch origin
redir-host 模式错误 1:fatal: unable to access 'https://github.com/...': Failed to connect to github.com port 443: Connection timed out
解决方案:
github.com 走代理redir-host DNS 模式错误 2:fatal: unable to access 'https://github.com/...': Could not resolve host: github.com
解决方案:
dns-hijack 设置8.8.8.8 作为 DNS 服务器错误 3:Permission denied (publickey)(SSH 协议)
解决方案:
ssh -T git@github.com 测试 SSH 连接错误 4:fatal: The remote end hung up unexpectedly
解决方案:
git config --global http.postBuffer 524288000通过以上方案,应该能够解决 TUN 模式下 Git push 失败的问题。如果问题仍然存在,建议查看 Clash 客户端的详细日志,或考虑使用系统代理模式作为临时解决方案。
发表评论
请登录后发表评论
评论 (0)