跳转至

04 - 代理与VPN:网络访问加速与隐私保护

代理与VPN

本章核心: 理解代理和VPN的工作原理,掌握Clash等工具的配置和使用


📖 章节导航

前序章节: 03-服务器与SSH.md 后续章节: 05-网络模式详解.md 快速参考: 网络工具箱.md 第1章 故障排查: 故障排查手册.md 第3章


📚 引言:为什么需要代理和VPN

作为程序员或开发者,你可能经常遇到以下情况:

  • 🚫 访问限制:想访问Google、GitHub、Stack Overflow等网站,但无法打开
  • 🐌 访问速度慢:访问国外网站时加载缓慢,影响开发效率
  • 🔒 隐私担忧:担心上网行为被追踪,IP地址泄露
  • 🌍 地理限制:某些服务只允许特定地区访问

代理和VPN就是解决这些问题的工具!

实际场景举例

Python
# 场景1: 访问GitHub下载代码
# 直接访问: 连接超时 ❌
# 使用代理: 秒速下载 ✅

# 场景2: 学习国外技术文档
# 直接访问: 无法打开 ❌
# 使用代理: 正常访问 ✅

# 场景3: 使用Google搜索技术问题
# 直接访问: 无法使用 ❌
# 使用代理: 正常搜索 ✅

本节学习目标

✅ 理解代理和VPN的工作原理 ✅ 掌握Clash代理工具的使用 ✅ 学会配置系统代理 ✅ 了解代理的安全与隐私问题 ✅ 能够解决常见的代理问题


🔄 代理服务器(Proxy)

什么是代理服务器?

代理服务器是位于你和目标服务器之间的中间服务器。当你访问网站时,请求先发送到代理服务器,再由代理服务器转发给目标服务器。

Text Only
传统访问方式:
你的电脑 ───────────────────────> 目标网站
         (直接连接,IP暴露)

使用代理:
你的电脑 ───> 代理服务器 ───> 目标网站
              (隐藏你的IP)

工作原理

Text Only
┌─────────────┐                  ┌─────────────┐                  ┌─────────────┐
│   你的电脑   │                  │  代理服务器   │                  │  目标网站    │
│             │                  │             │                  │             │
│ IP: 1.2.3.4 │                  │ IP: 5.6.7.8 │                  │ IP: 9.9.9.9 │
│             │                  │             │                  │             │
│  请求:      │ ──────────────> │             │ ──────────────> │             │
│  GET /page  │  1. 你的请求    │  转发请求    │  2. 转发请求    │  处理请求    │
│             │                  │             │                  │             │
│             │ <────────────── │             │ <────────────── │             │
│  响应:      │  4. 返回响应    │  转发响应    │  3. 返回响应    │  返回数据    │
│  HTML内容   │                  │             │                  │             │
└─────────────┘                  └─────────────┘                  └─────────────┘

目标网站看到的是代理服务器的IP (5.6.7.8),而不是你的真实IP (1.2.3.4)

正向代理 vs 反向代理

正向代理(Forward Proxy)

正向代理代表客户端向服务器发起请求,隐藏客户端身份。

Text Only
客户端 ──> 正向代理 ──> 服务器
      代表客户端

应用场景:
- 访问受限网站
- 隐藏客户端IP
- 缓存加速
- 内容过滤

实际例子:

Bash
# 浏览器配置正向代理
代理地址: 127.0.0.1
端口: 7890

# 使用curl通过代理访问
curl -x http://127.0.0.1:7890 https://www.google.com

反向代理(Reverse Proxy)

反向代理代表服务器接收客户端请求,隐藏服务器身份。

Text Only
客户端 ──> 反向代理 ──> 服务器(集群)
      代表服务器

应用场景:
- 负载均衡
- 安全防护
- 缓存加速
- SSL终止

实际例子:

Nginx Configuration File
# Nginx反向代理配置
server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;  # 转发到本地Node.js服务
        proxy_set_header Host $host;
    }
}

# 客户端访问 example.com
# 实际请求被转发到 127.0.0.1:3000

HTTP代理 vs SOCKS代理

HTTP代理

HTTP代理专门处理HTTP/HTTPS协议,工作在应用层。

Text Only
特点:
✅ 支持HTTP/HTTPS协议
✅ 可以缓存网页内容
✅ 支持内容过滤
❌ 只能代理HTTP流量

使用场景:
- 浏览器网页访问
- API请求代理

配置示例:

Python
import requests

# 使用HTTP代理
proxies = {
    'http': 'http://127.0.0.1:7890',
    'https': 'http://127.0.0.1:7890'
}

response = requests.get('https://www.google.com', proxies=proxies)
print(response.status_code)

SOCKS代理

SOCKS代理工作在会话层,可以代理任意TCP/UDP流量。

Text Only
特点:
✅ 支持所有TCP/UDP协议
✅ 不解析应用层协议
✅ 更灵活、更通用
❌ 不支持缓存

使用场景:
- SSH代理
- 游戏加速
- P2P下载

SOCKS版本对比: | 版本 | 特点 | 支持协议 | |------|------|----------| | SOCKS4 | 只支持TCP,不支持认证 | TCP | | SOCKS5 | 支持TCP/UDP,支持认证 | TCP、UDP |

配置示例:

Python
import requests

# 使用SOCKS5代理(需要安装requests[socks])
proxies = {
    'http': 'socks5://127.0.0.1:7891',
    'https': 'socks5://127.0.0.1:7891'
}

response = requests.get('https://www.google.com', proxies=proxies)
print(response.status_code)

代理的应用场景

1. 缓存加速

代理服务器缓存常用资源,减少重复请求。

Text Only
第一次访问:
你的电脑 ──> 代理 ──> 目标网站
            └──> 缓存: index.html

第二次访问:
你的电脑 ──> 代理 ──> (从缓存返回)
            └──> 已缓存: index.html

实际应用: - 公司内部代理服务器缓存常用网站 - CDN(Content Delivery Network)本质是分布式代理

2. 匿名访问

隐藏真实IP地址,保护隐私。

Text Only
不使用代理:
你的电脑(IP: 1.2.3.4) ──> 目标网站
                           看到你的真实IP

使用代理:
你的电脑(IP: 1.2.3.4) ──> 代理(IP: 5.6.7.8) ──> 目标网站
                                            看到代理IP

3. 内容过滤

代理服务器可以过滤特定内容。

Text Only
你的电脑 ──> 代理(过滤规则) ──> 目标网站
            - 拦截广告
            - 阻止恶意网站
            - 过滤成人内容

实际应用: - 公司网络限制访问娱乐网站 - 家长控制软件 - 广告拦截器


🔐 VPN(虚拟专用网络)

什么是VPN?

VPN(Virtual Private Network)通过在公共网络上建立加密隧道,创建安全的虚拟专用网络。

Text Only
不使用VPN:
你的电脑 ───────────────────────> 互联网
         (数据明文传输,可被监听)

使用VPN:
你的电脑 ──> VPN加密隧道 ──> VPN服务器 ──> 互联网
         (数据加密传输,安全)

VPN工作原理

Text Only
┌─────────────┐                  ┌─────────────┐                  ┌─────────────┐
│   你的电脑   │                  │  VPN服务器   │                  │  目标网站    │
│             │                  │             │                  │             │
│ IP: 1.2.3.4 │                  │ IP: 5.6.7.8 │                  │ IP: 9.9.9.9 │
│             │                  │             │                  │             │
│  原始数据:   │                  │             │                  │             │
│  "Hello"    │                  │             │                  │             │
│      ↓      │                  │             │                  │             │
│  加密数据:   │ ──────────────> │             │                  │             │
│  "Xy7@#mK"  │  1. 加密隧道    │  解密数据    │  2. 转发请求    │  处理请求    │
│             │                  │  "Hello"    │                  │             │
│             │ <────────────── │             │ <────────────── │             │
│  解密数据:   │  4. 返回加密    │  加密响应    │  3. 返回响应    │  返回数据    │
│  "World"    │                  │  "AbC@9$z"  │                  │             │
└─────────────┘                  └─────────────┘                  └─────────────┘

整个传输过程都是加密的,即使被监听也无法解密

VPN vs 代理

特性 代理 VPN
工作层级 应用层 网络层/传输层
加密 通常不加密 全程加密
覆盖范围 只代理特定应用 系统级所有流量
速度 较快 较慢(加密开销)
配置 应用级配置 系统级配置
安全性 较低
适用场景 浏览器代理、API请求 远程办公、隐私保护
Text Only
代理:
浏览器 ──> 代理 ──> 互联网
其他应用 ──> 直接 ──> 互联网

VPN:
所有应用 ──> VPN隧道 ──> 互联网

VPN协议类型

1. PPTP(Point-to-Point Tunneling Protocol)

Text Only
特点:
✅ 配置简单
✅ 速度快
❌ 安全性低(已被破解)
❌ 容易被防火墙拦截

适用场景:
- 临时使用
- 对安全性要求不高

2. L2TP/IPsec(Layer 2 Tunneling Protocol)

Text Only
特点:
✅ 安全性高(IPsec加密)
✅ 广泛支持
❌ 速度较慢(双重封装)
❌ 容易被防火墙拦截

适用场景:
- 企业VPN
- 需要高安全性

3. OpenVPN

Text Only
特点:
✅ 开源免费
✅ 安全性高
✅ 可配置性强
✅ 难以被检测
❌ 配置复杂
❌ 速度一般

适用场景:
- 个人使用
- 技术用户
- 需要高安全性

4. WireGuard

Text Only
特点:
✅ 代码简洁(4000行 vs OpenVPN的10万行)
✅ 速度快
✅ 安全性高
✅ 配置简单
❌ 相对较新
❌ 平台支持有限

适用场景:
- 现代VPN首选
- 性能要求高
- 技术用户

VPN的应用场景

1. 远程办公

Text Only
公司网络(内网) ──> VPN服务器 <─┐
员工在家 ──> VPN隧道 ──> ────┘

员工可以安全访问公司内网资源

实际应用: - 访问公司内部系统 - 连接公司数据库 - 使用公司内部工具

2. 隐私保护

Text Only
不使用VPN:
你的电脑 ──> ISP ──> 互联网
         (ISP可以看到你的所有流量)

使用VPN:
你的电脑 ──> VPN加密隧道 ──> VPN服务器 ──> 互联网
         (ISP只能看到加密流量,无法解密)

3. 绕过地理限制

Text Only
你在国内 ──> VPN服务器(美国) ──> Netflix(美国)
                                      (可以访问)

你在国内 ──> 直接 ──> Netflix(美国)
                         (无法访问,地理限制)

实际应用: - 访问国外流媒体(Netflix、YouTube) - 使用国外服务 - 获取地区性优惠


⚡ Clash详解

Clash是什么?

Clash是一个基于规则的代理工具,支持多种代理协议,使用Go语言编写,跨平台支持。

Text Only
核心特点:
✅ 支持多种协议(Shadowsocks、V2Ray、Trojan等)
✅ 基于规则的智能分流
✅ 支持策略组
✅ 跨平台(Windows、macOS、Linux、Android、iOS)
✅ 开源免费

Clash的核心概念

1. 代理节点(Proxy)

代理节点是实际的代理服务器配置。

YAML
proxies:
  - name: "节点1-日本"
    type: ss
    server: jp.example.com
    port: 8388
    cipher: aes-256-gcm
    password: "your-password"

  - name: "节点2-美国"
    type: vmess
    server: us.example.com
    port: 443
    uuid: "your-uuid"
    alterId: 0
    cipher: auto

2. 规则(Rules)

规则决定流量如何路由。

YAML
rules:
  # 域名规则
  - DOMAIN-SUFFIX,google.com,Proxy
  - DOMAIN-SUFFIX,github.com,Proxy

  # IP规则
  - IP-CIDR,1.1.1.1/32,Proxy

  # 关键字规则
  - DOMAIN-KEYWORD,google,Proxy

  # GEOIP规则
  - GEOIP,CN,Direct

  # 最终规则
  - MATCH,Direct

3. 策略组(Proxy Groups)

策略组允许选择多个代理节点,并设置选择策略。

YAML
proxy-groups:
  - name: "自动选择"
    type: url-test
    proxies:
      - "节点1-日本"
      - "节点2-美国"
    url: http://www.gstatic.com/generate_204
    interval: 300

  - name: "手动选择"
    type: select
    proxies:
      - "自动选择"
      - "节点1-日本"
      - "节点2-美国"
      - DIRECT

Clash配置文件解析(config.yaml)

完整配置示例:

YAML
# Clash配置文件示例

# 混合端口(HTTP和SOCKS5共用)
mixed-port: 7890

# 允许局域网连接
allow-lan: true

# 日志级别
log-level: info

# 模式: Rule(规则)、Global(全局)、Direct(直连)
mode: Rule

# 外部控制接口
external-controller: 127.0.0.1:9090

# DNS配置
dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - 8.8.8.8
    - 1.1.1.1

# 代理节点
proxies:
  - name: "日本-东京-01"
    type: ss
    server: jp1.example.com
    port: 8388
    cipher: aes-256-gcm
    password: "your-password"

  - name: "美国-洛杉矶-01"
    type: vmess
    server: us1.example.com
    port: 443
    uuid: "your-uuid"
    alterId: 0
    cipher: auto
    network: ws
    ws-opts:
      path: /path
      headers:
        Host: us1.example.com
    tls: true

# 策略组
proxy-groups:
  - name: "🚀 节点选择"
    type: select
    proxies:
      - "⚡ 自动选择"
      - "日本-东京-01"
      - "美国-洛杉矶-01"
      - DIRECT

  - name: "⚡ 自动选择"
    type: url-test
    proxies:
      - "日本-东京-01"
      - "美国-洛杉矶-01"
    url: http://www.gstatic.com/generate_204
    interval: 300

  - name: "🎯 全球直连"
    type: select
    proxies:
      - DIRECT
      - "🚀 节点选择"

  - name: "🛑 广告拦截"
    type: select
    proxies:
      - REJECT
      - DIRECT

# 规则
rules:
  # 局域网直连
  - IP-CIDR,192.168.0.0/16,🎯 全球直连
  - IP-CIDR,10.0.0.0/8,🎯 全球直连
  - IP-CIDR,172.16.0.0/12,🎯 全球直连
  - IP-CIDR,127.0.0.0/8,🎯 全球直连

  # 广告拦截
  - DOMAIN-SUFFIX,googleadservices.com,🛑 广告拦截
  - DOMAIN-SUFFIX,googlesyndication.com,🛑 广告拦截

  # 常用国外网站
  - DOMAIN-SUFFIX,google.com,🚀 节点选择
  - DOMAIN-SUFFIX,googleapis.com,🚀 节点选择
  - DOMAIN-SUFFIX,googleusercontent.com,🚀 节点选择
  - DOMAIN-SUFFIX,github.com,🚀 节点选择
  - DOMAIN-SUFFIX,githubusercontent.com,🚀 节点选择
  - DOMAIN-SUFFIX,youtube.com,🚀 节点选择
  - DOMAIN-SUFFIX,facebook.com,🚀 节点选择
  - DOMAIN-SUFFIX,twitter.com,🚀 节点选择

  # 国内网站直连
  - GEOIP,CN,🎯 全球直连

  # 默认规则
  - MATCH,🚀 节点选择

Clash的TUN模式和规则模式

规则模式(Rule Mode)

规则模式根据规则表决定流量路由。

Text Only
┌─────────────┐
│   你的电脑   │
│             │
│  访问请求   │
│             │
└──────┬──────┘
┌─────────────────┐
│   Clash规则表   │
│                 │
│ google.com  ──> 代理
│ baidu.com   ──> 直连
│ github.com  ──> 代理
│                 │
└──────┬──────────┘
┌─────────────────┐
│   路由决策      │
│   (代理/直连)    │
└─────────────────┘

适用场景: - 浏览器代理 - 需要精细控制 - 应用级代理

TUN模式(TUN Mode)

TUN模式创建虚拟网卡,接管系统所有流量。

Text Only
不使用TUN:
应用1 ──> 系统网络 ──> 互联网
应用2 ──> 系统网络 ──> 互联网
应用3 ──> 系统网络 ──> 互联网

使用TUN:
应用1 ──> TUN虚拟网卡 ──> Clash ──> 互联网
应用2 ──> TUN虚拟网卡 ──> Clash ──> 互联网
应用3 ──> TUN虚拟网卡 ──> Clash ──> 互联网

适用场景: - 系统级代理 - 不支持代理的应用 - 命令行工具代理

配置示例:

YAML
# config.yaml
tun:
  enable: true
  stack: system
  dns-hijack:
    - any:53
  auto-route: true
  auto-detect-interface: true


📊 代理模式对比

全局代理 vs PAC规则代理

全局代理(Global Proxy)

所有流量都通过代理服务器。

Text Only
全局代理:
你的电脑 ──> 代理服务器 ──> 互联网
(所有流量)

优点:
✅ 配置简单
✅ 不需要规则

缺点:
❌ 国内网站也走代理,速度慢
❌ 浪费代理流量
❌ 可能被国内网站检测

PAC规则代理(PAC Proxy)

根据PAC(Proxy Auto-Config)规则决定是否使用代理。

Text Only
PAC规则代理:
访问google.com ──> 代理
访问baidu.com ──> 直连
访问github.com ──> 代理
访问taobao.com ──> 直连

优点:
✅ 智能分流,速度快
✅ 节省代理流量
✅ 国内网站直连

缺点:
❌ 配置复杂
❌ 规则需要维护

PAC文件示例:

JavaScript
function FindProxyForURL(url, host) {
    // 直连的域名
    var direct = [
        "*.baidu.com",
        "*.taobao.com",
        "*.qq.com"
    ];

    // 代理的域名
    var proxy = [
        "*.google.com",
        "*.github.com",
        "*.youtube.com"
    ];

    // 检查是否需要代理
    for (var i = 0; i < direct.length; i++) {
        if (shExpMatch(host, direct[i])) {
            return "DIRECT";
        }
    }

    for (var i = 0; i < proxy.length; i++) {
        if (shExpMatch(host, proxy[i])) {
            return "PROXY 127.0.0.1:7890";
        }
    }

    // 默认直连
    return "DIRECT";
}

直连、代理、拒绝的区别

模式 说明 使用场景
直连(DIRECT) 流量不经过代理,直接访问 国内网站、局域网
代理(PROXY) 流量通过代理服务器访问 国外网站、受限网站
拒绝(REJECT) 直接拒绝连接,不发送请求 广告、恶意网站
Text Only
访问示例:
访问 baidu.com     ──> DIRECT   ──> 直连
访问 google.com    ──> PROXY    ──> 代理
访问 ads.com       ──> REJECT   ──> 拒绝连接

如何选择合适的代理策略

根据网络环境选择

Text Only
国内网络:
- 国内网站: 直连
- 国外网站: 代理
- 局域网: 直连

国外网络:
- 所有网站: 直连(除非需要回国访问)
- 国内网站: 代理(回国节点)

根据应用类型选择

Text Only
浏览器:
- 使用PAC规则代理
- 智能分流

命令行工具:
- 使用环境变量
- export http_proxy=http://127.0.0.1:7890

游戏:
- 直连(延迟最低)
- 或使用游戏加速器

下载工具:
- 大文件下载: 代理
- 小文件下载: 直连

根据速度需求选择

Text Only
速度优先:
- 国内网站: 直连
- 国外网站: 选择延迟低的节点
- 使用自动选择策略组

稳定性优先:
- 使用手动选择策略组
- 固定使用稳定的节点
- 避免频繁切换

🛠️ 实战配置

配置系统代理(Windows)

方法1: 通过设置界面

  1. 打开"设置" → "网络和Internet" → "代理"
  2. 在"手动设置代理"中:
  3. 开启"使用代理服务器"
  4. 地址: 127.0.0.1
  5. 端口: 7890
  6. 点击"保存"
Text Only
Windows代理设置:
┌─────────────────────────────┐
│  使用代理服务器              │
│  ┌─────────────────────┐   │
│  │ 地址: 127.0.0.1     │   │
│  │ 端口: 7890          │   │
│  └─────────────────────┘   │
│                             │
│  [ ] 跳过本地地址的代理     │
│                             │
│  [保存]                     │
└─────────────────────────────┘

方法2: 通过命令行

Text Only
# 设置代理
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d "127.0.0.1:7890" /f

# 取消代理
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f

方法3: 通过PowerShell

PowerShell
# 设置代理
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyEnable -Value 1
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyServer -Value "127.0.0.1:7890"

# 取消代理
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyEnable -Value 0

配置系统代理(macOS)

方法1: 通过系统设置

  1. 打开"系统设置" → "网络" → 选择网络连接
  2. 点击"详细信息" → "代理"
  3. 勾选"HTTP代理"和"HTTPS代理":
  4. 服务器: 127.0.0.1
  5. 端口: 7890
  6. 点击"好"
Text Only
macOS代理设置:
┌─────────────────────────────┐
│  代理                       │
│                             │
│  ☑ HTTP代理                 │
│     服务器: 127.0.0.1       │
│     端口: 7890              │
│                             │
│  ☑ HTTPS代理                │
│     服务器: 127.0.0.1       │
│     端口: 7890              │
│                             │
│  [好]                       │
└─────────────────────────────┘

方法2: 通过命令行

Bash
# 设置代理
sudo networksetup -setwebproxy Wi-Fi 127.0.0.1 7890
sudo networksetup -setsecurewebproxy Wi-Fi 127.0.0.1 7890

# 取消代理
sudo networksetup -setwebproxystate Wi-Fi off
sudo networksetup -setsecurewebproxystate Wi-Fi off

配置系统代理(Linux)

方法1: 通过环境变量

Bash
# 临时设置(当前终端有效)
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

# 永久设置(添加到 ~/.bashrc 或 ~/.zshrc)
echo 'export http_proxy=http://127.0.0.1:7890' >> ~/.bashrc
echo 'export https_proxy=http://127.0.0.1:7890' >> ~/.bashrc
source ~/.bashrc

方法2: 通过图形界面(GNOME)

Bash
# 使用gsettings设置代理
gsettings set org.gnome.system.proxy mode 'manual'
gsettings set org.gnome.system.proxy.http host '127.0.0.1'
gsettings set org.gnome.system.proxy.http port 7890
gsettings set org.gnome.system.proxy.https host '127.0.0.1'
gsettings set org.gnome.system.proxy.https port 7890

使用Clash for Windows

安装

  1. 下载Clash for Windows: https://github.com/Fndroid/clash_for_windows_pkg/releases
  2. 解压并运行Clash for Windows.exe

配置订阅

  1. 启动Clash for Windows
  2. 点击"配置文件(Profiles)" → "新建(New)"
  3. 输入订阅URL,点击"下载"
  4. 选择配置文件,点击"选择(Select)"
Text Only
Clash for Windows界面:
┌─────────────────────────────────────┐
│  配置文件(Profiles)                  │
│                                     │
│  ┌─────────────────────────────┐   │
│  │ 配置1 [选择]                 │   │
│  │ 配置2                        │   │
│  │ 配置3                        │   │
│  └─────────────────────────────┘   │
│                                     │
│  [新建] [更新] [编辑]               │
└─────────────────────────────────────┘

启用系统代理

  1. 点击"常规(General)"选项卡
  2. 开启"系统代理(System Proxy)"
  3. 开启"允许局域网连接(Allow LAN)"
Text Only
常规设置:
┌─────────────────────────────────────┐
│  端口                               │
│  HTTP: 7890                         │
│  SOCKS5: 7891                       │
│                                     │
│  系统代理                           │
│  [开启]                             │
│                                     │
│  允许局域网连接                     │
│  [开启]                             │
└─────────────────────────────────────┘

选择代理节点

  1. 点击"代理(Proxies)"选项卡
  2. 选择策略组和节点
Text Only
代理设置:
┌─────────────────────────────────────┐
│  策略组                             │
│                                     │
│  🚀 节点选择                        │
│    ⚡ 自动选择 [日本-东京-01]       │
│    🎯 全球直连                      │
│                                     │
│  ⚡ 自动选择                        │
│    [日本-东京-01] 50ms             │
│    [美国-洛杉矶-01] 120ms          │
└─────────────────────────────────────┘

使用Clash for Mac

安装

Bash
# 使用Homebrew安装
brew install --cask clashx

# 或下载安装包
# https://github.com/yichengchen/clashX/releases

配置

  1. 启动ClashX
  2. 点击菜单栏图标 → "配置" → "管理配置文件"
  3. 添加订阅URL或手动导入配置文件

启用代理

  1. 点击菜单栏图标
  2. 选择"设置为系统代理"

配置PAC规则

方法1: 使用Clash内置PAC

Clash会自动生成PAC规则,在浏览器中使用:

Text Only
PAC地址: http://127.0.0.1:9090/pac

方法2: 自定义PAC文件

创建自定义PAC文件:

JavaScript
// custom.pac
function FindProxyForURL(url, host) {
    // 直连的域名列表
    var directHosts = [
        "*.baidu.com",
        "*.taobao.com",
        "*.qq.com",
        "*.163.com",
        "*.sina.com.cn"
    ];

    // 代理的域名列表
    var proxyHosts = [
        "*.google.com",
        "*.github.com",
        "*.youtube.com",
        "*.facebook.com",
        "*.twitter.com",
        "*.stackoverflow.com"
    ];

    // 检查是否需要直连
    for (var i = 0; i < directHosts.length; i++) {
        if (shExpMatch(host, directHosts[i])) {
            return "DIRECT";
        }
    }

    // 检查是否需要代理
    for (var i = 0; i < proxyHosts.length; i++) {
        if (shExpMatch(host, proxyHosts[i])) {
            return "PROXY 127.0.0.1:7890; SOCKS5 127.0.0.1:7891; DIRECT";
        }
    }

    // 局域网直连
    if (isPlainHostName(host) ||
        shExpMatch(host, "*.local") ||
        isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
        isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") ||
        isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0")) {
        return "DIRECT";
    }

    // 默认直连
    return "DIRECT";
}

在浏览器中使用PAC:

Text Only
Chrome:
设置 → 系统 → 打开代理设置 → 使用自动配置脚本
脚本地址: file:///path/to/custom.pac

Firefox:
设置 → 网络设置 → 自动代理配置URL
URL: file:///path/to/custom.pac

测试代理是否生效

方法1: 查看IP地址

Bash
# 不使用代理
curl ipinfo.io

# 使用代理
curl -x http://127.0.0.1:7890 ipinfo.io

# 使用SOCKS5代理
curl -x socks5://127.0.0.1:7891 ipinfo.io

方法2: 测试网站访问

Bash
# 测试访问Google
curl -I https://www.google.com

# 测试访问GitHub
curl -I https://github.com

# 测试访问国内网站
curl -I https://www.baidu.com

方法3: 使用在线工具

访问以下网站查看IP: - https://ipinfo.io - https://whatismyipaddress.com - https://ip.cn

Text Only
不使用代理:
IP: 1.2.3.4 (你的真实IP)
位置: 中国

使用代理:
IP: 5.6.7.8 (代理服务器IP)
位置: 美国/日本/其他

方法4: 使用Wireshark抓包

  1. 启动Wireshark
  2. 选择网卡
  3. 设置过滤器: ip.addr == 代理服务器IP
  4. 查看流量是否经过代理

🔒 安全与隐私

代理和VPN的安全性分析

代理的安全性

Text Only
HTTP代理:
❌ 数据明文传输,可被监听
❌ 代理服务器可以看到你的所有请求
❌ 恶意代理可以窃取数据
✅ 适合访问公开内容

HTTPS代理:
⚠️ HTTPS流量加密,代理无法解密
⚠️ 但代理可以看到访问的域名
✅ 相对安全

SOCKS代理:
⚠️ 代理服务器可以看到所有流量
❌ 如果不加密,数据可被监听
✅ 灵活性高

VPN的安全性

Text Only
VPN:
✅ 所有流量加密
✅ VPN服务器无法解密(端到端加密)
✅ 防止ISP监听
✅ 防止公共WiFi窃听
⚠️ VPN提供商可以看到你的流量(除非端到端加密)
⚠️ VPN日志可能泄露隐私

如何选择可信的代理服务

评估标准

  1. 隐私政策
  2. 是否承诺不记录日志
  3. 日志保留时间
  4. 数据共享政策

  5. 安全性

  6. 加密协议强度
  7. 是否支持完美前向保密(PFS)
  8. 是否经过安全审计

  9. 透明度

  10. 开源代码
  11. 定期发布透明度报告
  12. 独立安全审计

  13. 可靠性

  14. 服务器稳定性
  15. 速度表现
  16. 客服支持

推荐的VPN服务

Text Only
开源免费:
- ProtonVPN(免费版)
- Windscribe(免费版)
- Mullvad VPN(注重隐私)

付费服务:
- ExpressVPN(速度快)
- NordVPN(功能全)
- Surfshark(性价比高)

自建代理服务器

Bash
# 使用VPS自建Shadowsocks服务器
# 1. 购买VPS(推荐国外)
# 2. 安装Shadowsocks

# Ubuntu/Debian
sudo apt update
sudo apt install shadowsocks-libev

# 配置shadowsocks
sudo nano /etc/shadowsocks-libev/config.json

{
    "server":"0.0.0.0",
    "server_port":8388,
    "password":"your-password",
    "timeout":60,
    "method":"aes-256-gcm"
}

# 启动服务
sudo systemctl start shadowsocks-libev
sudo systemctl enable shadowsocks-libev

DNS泄露问题及预防

什么是DNS泄露?

DNS泄露是指DNS查询没有通过VPN/代理,直接发送到ISP的DNS服务器,导致你的真实位置暴露。

Text Only
正常情况:
你的电脑 ──> VPN ──> VPN的DNS ──> 互联网
(所有流量都走VPN)

DNS泄露:
你的电脑 ──> VPN ──> 互联网
         └──> ISP的DNS(泄露!)

检测DNS泄露

访问以下网站检测: - https://dnsleaktest.com - https://ipleak.net - https://www.dnsleak.com

预防DNS泄露

  1. 使用VPN的DNS服务器
YAML
# Clash配置
dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - 8.8.8.8
    - 1.1.1.1
  1. 强制DNS通过代理
Bash
# 修改DNS设置
# Windows: 设置 → 网络和Internet → 更改适配器选项
# 右键网络连接 → 属性 → Internet协议版本4(TCP/IPv4)
# 使用下面的DNS服务器地址: 8.8.8.8, 8.8.4.4

# macOS: 系统设置 → 网络 → 高级 → DNS
# 添加DNS服务器: 8.8.8.8

# Linux: 编辑 /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
  1. 使用DNS over HTTPS/TLS
YAML
# Clash配置DoH
dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  nameserver:
    - https://dns.google/dns-query
    - https://cloudflare-dns.com/dns-query

日志和隐私保护

代理/VPN日志类型

Text Only
连接日志:
- 连接时间
- 源IP地址
- 目标IP地址
- 使用的协议
- 流量大小

使用日志:
- 访问的网站
- 搜索关键词
- 下载的文件
- 上传的内容

错误日志:
- 连接失败
- 超时错误
- 认证错误

如何保护隐私

  1. 选择不记录日志的服务
Text Only
推荐:
- Mullvad VPN(不记录任何日志)
- ProtonVPN(不记录浏览日志)
- ExpressVPN(不记录活动日志)
  1. 使用匿名支付
Text Only
推荐支付方式:
- 加密货币(BTC、ETH)
- 礼品卡
- 现金(如果支持)
  1. 定期更换IP
YAML
# Clash配置自动切换
proxy-groups:
  - name: "自动选择"
    type: url-test
    proxies:
      - "节点1"
      - "节点2"
      - "节点3"
    url: http://www.gstatic.com/generate_204
    interval: 300  # 每5分钟测试一次
  1. 使用隐私浏览器
Text Only
推荐浏览器:
- Tor Browser(最大隐私保护)
- Brave(注重隐私)
- Firefox(可配置隐私设置)

❓ 常见问题

Q1: 代理连接失败怎么办?

问题诊断

Bash
# 1. 检查代理服务是否运行
# Windows
netstat -ano | findstr :7890

# Linux/Mac
netstat -tuln | grep :7890  # grep文本搜索:按模式匹配行
# 或
ss -tuln | grep :7890

# 2. 测试代理连接
curl -v -x http://127.0.0.1:7890 https://www.google.com

# 3. 查看代理日志
# Clash日志位置:
# Windows: %USERPROFILE%\.config\clash\logs\
# Mac: ~/.config/clash/logs/
# Linux: ~/.config/clash/logs/

常见原因及解决方法

原因1: 代理服务未启动

Text Only
解决方法:
1. 启动Clash/代理软件
2. 检查服务状态
3. 重启代理软件

原因2: 端口被占用

Bash
# 查找占用端口的进程
# Windows
netstat -ano | findstr :7890
taskkill /PID <进程ID> /F

# Linux/Mac
lsof -i :7890
kill -9 <进程ID>

原因3: 防火墙阻止

Text Only
解决方法:
1. 添加防火墙例外
2. 允许代理软件通过防火墙
3. 关闭防火墙测试

原因4: 代理节点失效

Text Only
解决方法:
1. 更新订阅
2. 切换到其他节点
3. 联系服务提供商

Q2: 为什么有些网站无法通过代理访问?

常见原因

原因1: 网站检测代理

Text Only
某些网站会检测代理IP并拒绝访问:
- 银行网站
- 支付网站
- 部分游戏网站

解决方法:
1. 使用住宅代理
2. 使用VPN替代代理
3. 直连访问

原因2: 代理IP被封锁

Text Only
某些网站封锁了代理服务器的IP:
- Google
- Netflix
- Amazon

解决方法:
1. 切换到其他节点
2. 使用专用IP
3. 联系服务提供商

原因3: DNS解析问题

Text Only
DNS解析失败导致无法访问:
- DNS服务器配置错误
- DNS污染

解决方法:
1. 更换DNS服务器
2. 使用DNS over HTTPS
3. 清除DNS缓存

# 清除DNS缓存
# Windows
ipconfig /flushdns

# Mac
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

# Linux
sudo systemd-resolve --flush-caches

原因4: SSL证书问题

Text Only
HTTPS证书验证失败:
- 代理使用了自签名证书
- 证书过期

解决方法:
1. 更新代理软件
2. 禁用SSL验证(不推荐)
3. 使用系统代理而非手动代理

Q3: 如何判断流量是否走代理?

方法1: 查看IP地址

Bash
# 查看当前IP
curl ipinfo.io

# 预期结果:
# 不使用代理: 显示你的真实IP
# 使用代理: 显示代理服务器的IP

方法2: 使用traceroute

Bash
# Windows
tracert www.google.com

# Linux/Mac
traceroute www.google.com

# 查看路由路径
# 如果经过代理服务器,说明流量走代理

方法3: 使用Wireshark抓包

Text Only
1. 启动Wireshark
2. 选择网卡
3. 开始抓包
4. 访问目标网站
5. 查看数据包目标IP

预期结果:
- 直接访问: 目标IP是网站服务器IP
- 代理访问: 目标IP是代理服务器IP

方法4: 使用浏览器开发者工具

Text Only
1. 打开浏览器开发者工具(F12)
2. 切换到"网络(Network)"标签
3. 访问目标网站
4. 查看请求详情

预期结果:
- 查看请求头中是否有代理信息

Q4: 代理速度慢怎么办?

诊断问题

Bash
# 1. 测试代理延迟
# 使用Clash的url-test功能
# 或手动测试

# 2. 测试直连速度
ping www.google.com

# 3. 测试代理速度
curl -o /dev/null -s -w "%{time_total}\n" -x http://127.0.0.1:7890 https://www.google.com

优化方法

方法1: 切换到更快的节点

YAML
# Clash配置自动选择
proxy-groups:
  - name: "自动选择"
    type: url-test
    proxies:
      - "节点1"
      - "节点2"
      - "节点3"
    url: http://www.gstatic.com/generate_204
    interval: 300  # 每5分钟测试一次
    tolerance: 50  # 延迟差超过50ms才切换

方法2: 使用更快的代理协议

Text Only
协议速度对比(从快到慢):
1. Shadowsocks
2. Trojan
3. V2Ray
4. OpenVPN

建议:
- 优先使用Shadowsocks
- 或使用Trojan

方法3: 优化网络设置

Bash
# 1. 启用TCP快速打开
# Linux
echo 3 | sudo tee /proc/sys/net/ipv4/tcp_fastopen  # |管道:将前一命令的输出作为后一命令的输入

# 2. 调整TCP窗口大小
# Linux
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"

方法4: 使用CDN加速

YAML
# Clash配置使用CDN节点
proxies:
  - name: "CDN节点"
    type: ss
    server: cdn.example.com  # CDN域名
    port: 443
    cipher: aes-256-gcm
    password: "your-password"

方法5: 减少代理规则

YAML
# 简化规则,提高匹配速度
rules:
  # 使用GEOIP规则代替大量域名规则
  - GEOIP,CN,Direct
  - MATCH,Proxy

📝 总结

核心知识点回顾

  1. 代理服务器
  2. 正向代理 vs 反向代理
  3. HTTP代理 vs SOCKS代理
  4. 应用场景: 缓存、匿名、过滤

  5. VPN

  6. 工作原理: 加密隧道
  7. 协议类型: PPTP、L2TP、OpenVPN、WireGuard
  8. 应用场景: 远程办公、隐私保护、绕过限制

  9. Clash

  10. 核心概念: 代理节点、规则、策略组
  11. 配置文件: config.yaml
  12. 工作模式: 规则模式、TUN模式

  13. 代理模式

  14. 全局代理 vs PAC规则代理
  15. 直连、代理、拒绝的区别
  16. 根据场景选择合适的策略

  17. 实战配置

  18. 系统代理配置(Windows、macOS、Linux)
  19. Clash for Windows/Mac使用
  20. PAC规则配置
  21. 代理测试方法

  22. 安全与隐私

  23. 代理和VPN的安全性分析
  24. DNS泄露及预防
  25. 日志和隐私保护

学习建议

📚 循序渐进: 1. 先理解代理和VPN的基本概念 2. 学会配置系统代理 3. 掌握Clash的基本使用 4. 学习规则配置和优化 5. 了解安全和隐私问题

🛠️ 动手实践: - 配置系统代理 - 安装和使用Clash - 测试代理是否生效 - 优化代理速度 - 检测DNS泄露

📖 进阶学习: - 自建代理服务器 - 学习代理协议原理 - 深入理解网络安全 - 研究隐私保护技术

推荐资源

📖 文档: - Mihomo文档(原Clash Meta,Clash已停止维护) - Shadowsocks文档 — 官方GitHub仓库 - WireGuard文档

🌐 在线资源: - DNS泄露测试 - IP检测工具 - Wireshark官网

🎯 工具推荐: - Clash for Windows/Mac - V2RayN - Shadowsocks - WireGuard


记住: 代理和VPN是重要的网络工具,合理使用可以提升开发效率、保护隐私安全! 🚀