SSF0SSF0
首页
前端
  • Node
  • Go
  • Python
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
  • 开源项目
Timeline
Github
标签
分类
首页
前端
  • Node
  • Go
  • Python
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
  • 开源项目
Timeline
Github
标签
分类
  • Bash

    • Bash 获取路径在不同类型电脑的区别
  • Git

    • Git 使用 ssh 与 https 的区别
    • Git 回滚、重置与变基
    • 文件名大小写发生变化的坑
    • Git 提交信息规范解读与实践指南
    • Git 历史邮箱统一
    • Git 拉取 GitHub 失败、配置代理及 DNS 问题排查总结
    • Git 实战教程:如何使用 Cherry-pick 或直接覆盖让两个分支同步公共功能
  • Docker

    • Docker 命令大全
    • nginx 镜像部署静态文件
    • Docker 运行命令说明
    • 使用 node 镜像运行本地项目
    • 挂载和卷的区别
    • Docker 打包多平台镜像
    • Docker 使用 mysql
    • Docker 容器网络访问问题总结
    • Docker 容器绑定ip问题
  • VuePress

    • 使用 VuePress 搭建个人博客概括
  • CI/CD

    • blog 使用 Github-Actions 部署 docker 服务器
    • GitHub Actions项目部署国内服务器文件传输时间优化
  • 服务器

    • 腾讯云使用 ssh 连接服务器(Linux 实例)
    • ssl 证书安装到 docker 服务器
    • 操作系统与架构
    • ssh 连接时长问题
    • Oracle 服务器基础知识
    • OCI 专属网络拓扑图
    • 甲骨文-宝塔面板无法访问问题
    • 甲骨文服务器防火墙问题排查记录
    • 甲骨文重启后宝塔面板无法访问
  • hosts 文件指南
  • Cloudflare DNS与代理
  • 跨平台定时任务设置指南
  • Edge 浏览器连不上代理?一场由插件引发的“夺权”与 v2rayN 的深度探索
  • 二级域名访问异常排查记录
  • 软件走代理时如何抓包
  • JetBrains AI 使用
  • Clash 代理工作原理详解

Clash 代理工作原理详解

简介

Clash 是一个基于规则的代理工具,支持多种代理协议。很多用户在使用过程中对其工作原理存在疑惑,特别是系统代理开关与手动代理配置的区别。本文将详细解析 Clash 的工作机制。

Clash 的核心架构

代理端口类型

Clash 启动后会同时开启多个本地代理端口:

端口类型默认端口协议支持用途
HTTP 代理7890HTTP/HTTPS网页浏览、API 请求
SOCKS5 代理7891TCP/UDP通用代理协议
混合代理7892HTTP/HTTPS/SOCKS5自动识别协议类型

端口启动时机

# Clash 启动时的端口监听状态
$ netstat -an | grep LISTEN
tcp4  0  0  127.0.0.1.7890  *.*  LISTEN  # HTTP 代理端口
tcp4  0  0  127.0.0.1.7891  *.*  LISTEN  # SOCKS5 代理端口
tcp4  0  0  127.0.0.1.7892  *.*  LISTEN  # 混合代理端口

重要特性: 这些端口在 Clash 启动的瞬间就可用,不依赖系统代理开关状态。

系统代理 vs 手动代理配置

系统代理(System Proxy)

系统代理本质上是在操作系统级别设置代理服务器地址:

macOS 系统代理设置:

# 查看当前系统代理设置
networksetup -getwebproxy "Wi-Fi"
networksetup -getsecurewebproxy "Wi-Fi"

Windows 系统代理设置:

  • 位置:设置 → 网络和 Internet → 代理

  • 自动配置代理服务器地址

作用机制:

  • 系统告诉所有应用:"默认使用这个代理服务器"

  • 应用可以选择遵循或忽略系统代理设置

  • 影响范围:整个系统的网络请求

手动代理配置

直接在应用程序中指定代理服务器地址:

JetBrains IDE 配置示例:

Settings → Appearance & Behavior → System Settings → HTTP Proxy

Manual proxy configuration:
HTTP:
  Host name: 127.0.0.1
  Port number: 7890

SOCKS:
  Host name: 127.0.0.1
  Port number: 7891

作用机制:

  • 应用直接连接到指定的代理端口

  • 绕过系统代理设置

  • 影响范围:仅该应用的网络请求

实际应用场景

场景一:全局代理

# 开启系统代理
System Proxy: ON
Result: 所有支持系统代理的应用都走代理

场景二:精确控制

# 关闭系统代理,手动配置特定应用
System Proxy: OFF
Applications:
  - JetBrains IDE: 127.0.0.1:7890
  - Browser: 直连
  - Git: 127.0.0.1:7891

验证代理是否生效

1. 端口连通性测试

# 测试 HTTP 代理端口
curl -I -x http://127.0.0.1:7890 https://www.google.com

# 测试 SOCKS5 代理端口
curl -I --socks5 127.0.0.1:7891 https://www.google.com

2. 应用内测试

  • JetBrains IDE: 尝试下载插件或访问远程仓库

  • 浏览器: 访问被墙网站

  • Git: 执行 git clone 操作

3. Clash 日志查看

# 查看 Clash 日志
tail -f ~/.config/clash/logs/clash.log

最佳实践建议

1. 开发环境配置

推荐方案: 手动配置 + 系统代理关闭

优势:
  - 精确控制哪些应用走代理

  - 避免不必要的代理开销

  - 减少网络问题排查难度

2. 应用配置示例

Git 配置:

# HTTP 代理
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy https://127.0.0.1:7890

# SOCKS5 代理
git config --global http.proxy socks5://127.0.0.1:7891

npm 配置:

npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890

3. 常见问题解决

问题 1:代理不生效

检查步骤:

  1. 确认 Clash 运行状态

  2. 检查端口是否被占用

  3. 验证代理服务器地址配置

  4. 查看 Clash 规则匹配情况

问题 2:部分应用无法代理

可能原因:

  1. 应用不支持系统代理

  2. 应用有独立的代理设置

  3. 应用使用了自定义的网络库

总结

Clash 的工作原理可以总结为:

  1. 启动即可用:Clash 启动后立即提供多个代理端口服务

  2. 双重配置方式:支持系统代理和手动代理配置

  3. 灵活性强:可以实现全局代理或精确控制

  4. 协议丰富:支持 HTTP、HTTPS、SOCKS5 等多种代理协议

最后更新时间:
贡献者: 何风顺
上一页
JetBrains AI 使用