04 - 代理与VPN:网络访问加速与隐私保护¶
本章核心: 理解代理和VPN的工作原理,掌握Clash等工具的配置和使用
📖 章节导航¶
前序章节: 03-服务器与SSH.md 后续章节: 05-网络模式详解.md 快速参考: 网络工具箱.md 第1章 故障排查: 故障排查手册.md 第3章
📚 引言:为什么需要代理和VPN¶
作为程序员或开发者,你可能经常遇到以下情况:
- 🚫 访问限制:想访问Google、GitHub、Stack Overflow等网站,但无法打开
- 🐌 访问速度慢:访问国外网站时加载缓慢,影响开发效率
- 🔒 隐私担忧:担心上网行为被追踪,IP地址泄露
- 🌍 地理限制:某些服务只允许特定地区访问
代理和VPN就是解决这些问题的工具!
实际场景举例¶
# 场景1: 访问GitHub下载代码
# 直接访问: 连接超时 ❌
# 使用代理: 秒速下载 ✅
# 场景2: 学习国外技术文档
# 直接访问: 无法打开 ❌
# 使用代理: 正常访问 ✅
# 场景3: 使用Google搜索技术问题
# 直接访问: 无法使用 ❌
# 使用代理: 正常搜索 ✅
本节学习目标¶
✅ 理解代理和VPN的工作原理 ✅ 掌握Clash代理工具的使用 ✅ 学会配置系统代理 ✅ 了解代理的安全与隐私问题 ✅ 能够解决常见的代理问题
🔄 代理服务器(Proxy)¶
什么是代理服务器?¶
代理服务器是位于你和目标服务器之间的中间服务器。当你访问网站时,请求先发送到代理服务器,再由代理服务器转发给目标服务器。
传统访问方式:
你的电脑 ───────────────────────> 目标网站
(直接连接,IP暴露)
使用代理:
你的电脑 ───> 代理服务器 ───> 目标网站
(隐藏你的IP)
工作原理¶
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 你的电脑 │ │ 代理服务器 │ │ 目标网站 │
│ │ │ │ │ │
│ 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)¶
正向代理代表客户端向服务器发起请求,隐藏客户端身份。
实际例子:
# 浏览器配置正向代理
代理地址: 127.0.0.1
端口: 7890
# 使用curl通过代理访问
curl -x http://127.0.0.1:7890 https://www.google.com
反向代理(Reverse Proxy)¶
反向代理代表服务器接收客户端请求,隐藏服务器身份。
实际例子:
# 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协议,工作在应用层。
配置示例:
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流量。
SOCKS版本对比: | 版本 | 特点 | 支持协议 | |------|------|----------| | SOCKS4 | 只支持TCP,不支持认证 | TCP | | SOCKS5 | 支持TCP/UDP,支持认证 | TCP、UDP |
配置示例:
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. 缓存加速¶
代理服务器缓存常用资源,减少重复请求。
第一次访问:
你的电脑 ──> 代理 ──> 目标网站
└──> 缓存: index.html
第二次访问:
你的电脑 ──> 代理 ──> (从缓存返回)
└──> 已缓存: index.html
实际应用: - 公司内部代理服务器缓存常用网站 - CDN(Content Delivery Network)本质是分布式代理
2. 匿名访问¶
隐藏真实IP地址,保护隐私。
不使用代理:
你的电脑(IP: 1.2.3.4) ──> 目标网站
看到你的真实IP
使用代理:
你的电脑(IP: 1.2.3.4) ──> 代理(IP: 5.6.7.8) ──> 目标网站
看到代理IP
3. 内容过滤¶
代理服务器可以过滤特定内容。
实际应用: - 公司网络限制访问娱乐网站 - 家长控制软件 - 广告拦截器
🔐 VPN(虚拟专用网络)¶
什么是VPN?¶
VPN(Virtual Private Network)通过在公共网络上建立加密隧道,创建安全的虚拟专用网络。
不使用VPN:
你的电脑 ───────────────────────> 互联网
(数据明文传输,可被监听)
使用VPN:
你的电脑 ──> VPN加密隧道 ──> VPN服务器 ──> 互联网
(数据加密传输,安全)
VPN工作原理¶
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 你的电脑 │ │ 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请求 | 远程办公、隐私保护 |
VPN协议类型¶
1. PPTP(Point-to-Point Tunneling Protocol)¶
2. L2TP/IPsec(Layer 2 Tunneling Protocol)¶
3. OpenVPN¶
4. WireGuard¶
特点:
✅ 代码简洁(4000行 vs OpenVPN的10万行)
✅ 速度快
✅ 安全性高
✅ 配置简单
❌ 相对较新
❌ 平台支持有限
适用场景:
- 现代VPN首选
- 性能要求高
- 技术用户
VPN的应用场景¶
1. 远程办公¶
实际应用: - 访问公司内部系统 - 连接公司数据库 - 使用公司内部工具
2. 隐私保护¶
不使用VPN:
你的电脑 ──> ISP ──> 互联网
(ISP可以看到你的所有流量)
使用VPN:
你的电脑 ──> VPN加密隧道 ──> VPN服务器 ──> 互联网
(ISP只能看到加密流量,无法解密)
3. 绕过地理限制¶
实际应用: - 访问国外流媒体(Netflix、YouTube) - 使用国外服务 - 获取地区性优惠
⚡ Clash详解¶
Clash是什么?¶
Clash是一个基于规则的代理工具,支持多种代理协议,使用Go语言编写,跨平台支持。
核心特点:
✅ 支持多种协议(Shadowsocks、V2Ray、Trojan等)
✅ 基于规则的智能分流
✅ 支持策略组
✅ 跨平台(Windows、macOS、Linux、Android、iOS)
✅ 开源免费
Clash的核心概念¶
1. 代理节点(Proxy)¶
代理节点是实际的代理服务器配置。
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)¶
规则决定流量如何路由。
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)¶
策略组允许选择多个代理节点,并设置选择策略。
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)¶
完整配置示例:
# 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)¶
规则模式根据规则表决定流量路由。
┌─────────────┐
│ 你的电脑 │
│ │
│ 访问请求 │
│ │
└──────┬──────┘
│
↓
┌─────────────────┐
│ Clash规则表 │
│ │
│ google.com ──> 代理
│ baidu.com ──> 直连
│ github.com ──> 代理
│ │
└──────┬──────────┘
│
↓
┌─────────────────┐
│ 路由决策 │
│ (代理/直连) │
└─────────────────┘
适用场景: - 浏览器代理 - 需要精细控制 - 应用级代理
TUN模式(TUN Mode)¶
TUN模式创建虚拟网卡,接管系统所有流量。
不使用TUN:
应用1 ──> 系统网络 ──> 互联网
应用2 ──> 系统网络 ──> 互联网
应用3 ──> 系统网络 ──> 互联网
使用TUN:
应用1 ──> TUN虚拟网卡 ──> Clash ──> 互联网
应用2 ──> TUN虚拟网卡 ──> Clash ──> 互联网
应用3 ──> TUN虚拟网卡 ──> Clash ──> 互联网
适用场景: - 系统级代理 - 不支持代理的应用 - 命令行工具代理
配置示例:
# config.yaml
tun:
enable: true
stack: system
dns-hijack:
- any:53
auto-route: true
auto-detect-interface: true
📊 代理模式对比¶
全局代理 vs PAC规则代理¶
全局代理(Global Proxy)¶
所有流量都通过代理服务器。
全局代理:
你的电脑 ──> 代理服务器 ──> 互联网
(所有流量)
优点:
✅ 配置简单
✅ 不需要规则
缺点:
❌ 国内网站也走代理,速度慢
❌ 浪费代理流量
❌ 可能被国内网站检测
PAC规则代理(PAC Proxy)¶
根据PAC(Proxy Auto-Config)规则决定是否使用代理。
PAC规则代理:
访问google.com ──> 代理
访问baidu.com ──> 直连
访问github.com ──> 代理
访问taobao.com ──> 直连
优点:
✅ 智能分流,速度快
✅ 节省代理流量
✅ 国内网站直连
缺点:
❌ 配置复杂
❌ 规则需要维护
PAC文件示例:
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) | 直接拒绝连接,不发送请求 | 广告、恶意网站 |
访问示例:
访问 baidu.com ──> DIRECT ──> 直连
访问 google.com ──> PROXY ──> 代理
访问 ads.com ──> REJECT ──> 拒绝连接
如何选择合适的代理策略¶
根据网络环境选择¶
根据应用类型选择¶
浏览器:
- 使用PAC规则代理
- 智能分流
命令行工具:
- 使用环境变量
- export http_proxy=http://127.0.0.1:7890
游戏:
- 直连(延迟最低)
- 或使用游戏加速器
下载工具:
- 大文件下载: 代理
- 小文件下载: 直连
根据速度需求选择¶
🛠️ 实战配置¶
配置系统代理(Windows)¶
方法1: 通过设置界面¶
- 打开"设置" → "网络和Internet" → "代理"
- 在"手动设置代理"中:
- 开启"使用代理服务器"
- 地址:
127.0.0.1 - 端口:
7890 - 点击"保存"
Windows代理设置:
┌─────────────────────────────┐
│ 使用代理服务器 │
│ ┌─────────────────────┐ │
│ │ 地址: 127.0.0.1 │ │
│ │ 端口: 7890 │ │
│ └─────────────────────┘ │
│ │
│ [ ] 跳过本地地址的代理 │
│ │
│ [保存] │
└─────────────────────────────┘
方法2: 通过命令行¶
# 设置代理
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¶
# 设置代理
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: 通过系统设置¶
- 打开"系统设置" → "网络" → 选择网络连接
- 点击"详细信息" → "代理"
- 勾选"HTTP代理"和"HTTPS代理":
- 服务器:
127.0.0.1 - 端口:
7890 - 点击"好"
macOS代理设置:
┌─────────────────────────────┐
│ 代理 │
│ │
│ ☑ HTTP代理 │
│ 服务器: 127.0.0.1 │
│ 端口: 7890 │
│ │
│ ☑ HTTPS代理 │
│ 服务器: 127.0.0.1 │
│ 端口: 7890 │
│ │
│ [好] │
└─────────────────────────────┘
方法2: 通过命令行¶
# 设置代理
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: 通过环境变量¶
# 临时设置(当前终端有效)
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)¶
# 使用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¶
安装¶
- 下载Clash for Windows: https://github.com/Fndroid/clash_for_windows_pkg/releases
- 解压并运行
Clash for Windows.exe
配置订阅¶
- 启动Clash for Windows
- 点击"配置文件(Profiles)" → "新建(New)"
- 输入订阅URL,点击"下载"
- 选择配置文件,点击"选择(Select)"
Clash for Windows界面:
┌─────────────────────────────────────┐
│ 配置文件(Profiles) │
│ │
│ ┌─────────────────────────────┐ │
│ │ 配置1 [选择] │ │
│ │ 配置2 │ │
│ │ 配置3 │ │
│ └─────────────────────────────┘ │
│ │
│ [新建] [更新] [编辑] │
└─────────────────────────────────────┘
启用系统代理¶
- 点击"常规(General)"选项卡
- 开启"系统代理(System Proxy)"
- 开启"允许局域网连接(Allow LAN)"
常规设置:
┌─────────────────────────────────────┐
│ 端口 │
│ HTTP: 7890 │
│ SOCKS5: 7891 │
│ │
│ 系统代理 │
│ [开启] │
│ │
│ 允许局域网连接 │
│ [开启] │
└─────────────────────────────────────┘
选择代理节点¶
- 点击"代理(Proxies)"选项卡
- 选择策略组和节点
代理设置:
┌─────────────────────────────────────┐
│ 策略组 │
│ │
│ 🚀 节点选择 │
│ ⚡ 自动选择 [日本-东京-01] │
│ 🎯 全球直连 │
│ │
│ ⚡ 自动选择 │
│ [日本-东京-01] 50ms │
│ [美国-洛杉矶-01] 120ms │
└─────────────────────────────────────┘
使用Clash for Mac¶
安装¶
# 使用Homebrew安装
brew install --cask clashx
# 或下载安装包
# https://github.com/yichengchen/clashX/releases
配置¶
- 启动ClashX
- 点击菜单栏图标 → "配置" → "管理配置文件"
- 添加订阅URL或手动导入配置文件
启用代理¶
- 点击菜单栏图标
- 选择"设置为系统代理"
配置PAC规则¶
方法1: 使用Clash内置PAC¶
Clash会自动生成PAC规则,在浏览器中使用:
方法2: 自定义PAC文件¶
创建自定义PAC文件:
// 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:
Chrome:
设置 → 系统 → 打开代理设置 → 使用自动配置脚本
脚本地址: file:///path/to/custom.pac
Firefox:
设置 → 网络设置 → 自动代理配置URL
URL: file:///path/to/custom.pac
测试代理是否生效¶
方法1: 查看IP地址¶
# 不使用代理
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: 测试网站访问¶
# 测试访问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
方法4: 使用Wireshark抓包¶
- 启动Wireshark
- 选择网卡
- 设置过滤器:
ip.addr == 代理服务器IP - 查看流量是否经过代理
🔒 安全与隐私¶
代理和VPN的安全性分析¶
代理的安全性¶
HTTP代理:
❌ 数据明文传输,可被监听
❌ 代理服务器可以看到你的所有请求
❌ 恶意代理可以窃取数据
✅ 适合访问公开内容
HTTPS代理:
⚠️ HTTPS流量加密,代理无法解密
⚠️ 但代理可以看到访问的域名
✅ 相对安全
SOCKS代理:
⚠️ 代理服务器可以看到所有流量
❌ 如果不加密,数据可被监听
✅ 灵活性高
VPN的安全性¶
VPN:
✅ 所有流量加密
✅ VPN服务器无法解密(端到端加密)
✅ 防止ISP监听
✅ 防止公共WiFi窃听
⚠️ VPN提供商可以看到你的流量(除非端到端加密)
⚠️ VPN日志可能泄露隐私
如何选择可信的代理服务¶
评估标准¶
- 隐私政策
- 是否承诺不记录日志
- 日志保留时间
-
数据共享政策
-
安全性
- 加密协议强度
- 是否支持完美前向保密(PFS)
-
是否经过安全审计
-
透明度
- 开源代码
- 定期发布透明度报告
-
独立安全审计
-
可靠性
- 服务器稳定性
- 速度表现
- 客服支持
推荐的VPN服务¶
开源免费:
- ProtonVPN(免费版)
- Windscribe(免费版)
- Mullvad VPN(注重隐私)
付费服务:
- ExpressVPN(速度快)
- NordVPN(功能全)
- Surfshark(性价比高)
自建代理服务器¶
# 使用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服务器,导致你的真实位置暴露。
正常情况:
你的电脑 ──> VPN ──> VPN的DNS ──> 互联网
(所有流量都走VPN)
DNS泄露:
你的电脑 ──> VPN ──> 互联网
└──> ISP的DNS(泄露!)
检测DNS泄露¶
访问以下网站检测: - https://dnsleaktest.com - https://ipleak.net - https://www.dnsleak.com
预防DNS泄露¶
- 使用VPN的DNS服务器
# 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
- 强制DNS通过代理
# 修改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
- 使用DNS over HTTPS/TLS
# Clash配置DoH
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
nameserver:
- https://dns.google/dns-query
- https://cloudflare-dns.com/dns-query
日志和隐私保护¶
代理/VPN日志类型¶
连接日志:
- 连接时间
- 源IP地址
- 目标IP地址
- 使用的协议
- 流量大小
使用日志:
- 访问的网站
- 搜索关键词
- 下载的文件
- 上传的内容
错误日志:
- 连接失败
- 超时错误
- 认证错误
如何保护隐私¶
- 选择不记录日志的服务
- 使用匿名支付
- 定期更换IP
# Clash配置自动切换
proxy-groups:
- name: "自动选择"
type: url-test
proxies:
- "节点1"
- "节点2"
- "节点3"
url: http://www.gstatic.com/generate_204
interval: 300 # 每5分钟测试一次
- 使用隐私浏览器
❓ 常见问题¶
Q1: 代理连接失败怎么办?¶
问题诊断¶
# 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: 代理服务未启动
原因2: 端口被占用
# 查找占用端口的进程
# Windows
netstat -ano | findstr :7890
taskkill /PID <进程ID> /F
# Linux/Mac
lsof -i :7890
kill -9 <进程ID>
原因3: 防火墙阻止
原因4: 代理节点失效
Q2: 为什么有些网站无法通过代理访问?¶
常见原因¶
原因1: 网站检测代理
原因2: 代理IP被封锁
原因3: DNS解析问题
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证书问题
Q3: 如何判断流量是否走代理?¶
方法1: 查看IP地址¶
方法2: 使用traceroute¶
# Windows
tracert www.google.com
# Linux/Mac
traceroute www.google.com
# 查看路由路径
# 如果经过代理服务器,说明流量走代理
方法3: 使用Wireshark抓包¶
1. 启动Wireshark
2. 选择网卡
3. 开始抓包
4. 访问目标网站
5. 查看数据包目标IP
预期结果:
- 直接访问: 目标IP是网站服务器IP
- 代理访问: 目标IP是代理服务器IP
方法4: 使用浏览器开发者工具¶
Q4: 代理速度慢怎么办?¶
诊断问题¶
# 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: 切换到更快的节点
# 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: 使用更快的代理协议
协议速度对比(从快到慢):
1. Shadowsocks
2. Trojan
3. V2Ray
4. OpenVPN
建议:
- 优先使用Shadowsocks
- 或使用Trojan
方法3: 优化网络设置
# 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加速
# Clash配置使用CDN节点
proxies:
- name: "CDN节点"
type: ss
server: cdn.example.com # CDN域名
port: 443
cipher: aes-256-gcm
password: "your-password"
方法5: 减少代理规则
📝 总结¶
核心知识点回顾¶
- 代理服务器
- 正向代理 vs 反向代理
- HTTP代理 vs SOCKS代理
-
应用场景: 缓存、匿名、过滤
-
VPN
- 工作原理: 加密隧道
- 协议类型: PPTP、L2TP、OpenVPN、WireGuard
-
应用场景: 远程办公、隐私保护、绕过限制
-
Clash
- 核心概念: 代理节点、规则、策略组
- 配置文件: config.yaml
-
工作模式: 规则模式、TUN模式
-
代理模式
- 全局代理 vs PAC规则代理
- 直连、代理、拒绝的区别
-
根据场景选择合适的策略
-
实战配置
- 系统代理配置(Windows、macOS、Linux)
- Clash for Windows/Mac使用
- PAC规则配置
-
代理测试方法
-
安全与隐私
- 代理和VPN的安全性分析
- DNS泄露及预防
- 日志和隐私保护
学习建议¶
📚 循序渐进: 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是重要的网络工具,合理使用可以提升开发效率、保护隐私安全! 🚀