%%
# 纲要
> 主干纲要、Hint/线索/路标
# Q&A
#### 已明确
#### 待明确
> 当下仍存有的疑惑
**❓<font color="#c0504d"> 有什么问题?</font>**
%%
# SOCKS 代理协议
SOCKS(Socket Secure)是一种 **==代理协议==**,用于在客户端和服务器之间 **中继网络数据包**,支持**代理转发所有 TCP 和 UDP 流量**。
**SOCKS 不解析应用层数据**,能够**转发所有 TCP/UDP 流量**,可支持 HTTP、HTTPS、FTP 、P2P 等各种应用层协议。
工作原理:
1. SOCKS 客户端与 SOCKS 代理服务器 **建立 "==SOCKS 连接=="**(通过 SOCKS 协议定义的握手方式,确定 SOCKS 协议版本、认证方式等)
2. SOCKS 客户端向 SOCKS 代理服务器发送 "**SOCKS 报文**,传达"**目标地址请求**"(包含目标地址类型、目标地址 IP or 域名、端口号等信息)
3. SOCKS 代理服务器与 "**目标服务器**" 建立连接,然后向客户端**返回响应状态**(是否成功建立连接)
4. 若成功建立连接,则用户的后续网络请求,**由 SOCKS 客户端发往 SOCKS 代理服务器**,**代理服务器==转发请求==**、获取**响应数据包**后回发给客户端。
> [!example] 浏览器中 SOCKS 代理的工作原理
>
> 例如,在浏览器中设置了 SOCKS5 代理后,**当用户访问网站时**,浏览器**不会直接 "目标服务器" 发出请求**。
>
> - 浏览器将于代理服务器建立 TCP 连接,在此基础上,**通过 SOCKS 握手,建立 SOCKS 连接。**
> - 浏览器将用户想要访问的目标地址,**发送给 SOCKS 代理服务器**(即发送 "目标地址请求")
> - **由 "SOCKS 代理服务器" 与 "目标服务器" 建立连接 & 发送请求**,充当中介进行数据包转发。
>
SOCKS 协议有两个常见版本:
| | 代理范围 | 身份验证 | 远程域名解析 |
| ---------------- | ------------------- | ---- | ------------------- |
| SOCKS4 | 仅支持 TCP 代理,不支持 UDP | ❌ | ❌(必须由客户端解析出 IP 地址) |
| **SOCKS5**(当前主流) | 支持 **TCP & UDP 代理** | ✔️ | ✔️(DNS 解析可由代理服务器完成) |
缺点:
- **==无加密机制==**,数据明文传输。
- **流量特征明显**,容易被检测和封锁;
<br><br>
# "协议伪装" 与 "数据混淆"
"**协议伪装**" 与 "**数据混淆**" 是用于**降低==代理流量==的 "可识别性"** 的手段,防止**协议识别**和**流量特征检测**,旨在提高抗封锁能力。
| | 作用 | 实现方式 |
| ---- | ------------------------------------------------------- | ------------------------------------------ |
| 协议伪装 | 将 **代理流量** 伪装成 **其他普通协议的流量** (如 HTTPS、WebSocket、QUIC 等) | 使用 **TLS、WebSocket、gRPC** 等协议封装代理流量,模拟合法通信 |
| 流量混淆 | 使**数据包的大小、时序**等变得**随机、不规则**,防止特征检测 | 随机包长度(**随机拆包**、**随机数据填充**)、动态端口 |
> [!info] 深度包检测
>
> 许多国际或机构会使用**深度包检测**技术(DPI,Deep Packet Inspection) 来 **==检测和封锁代理流量==**。
> 如果 **代理流量的==特征==** 过于明显,则可**被防火墙直接识别并阻止**。
<br><br><br>
# 代理工具总结
- SS/SSR
- V2Ray
- Clash
- Tarjon
# Shadowsocks / ShadowsocksR 工具(SS/SSR)
**Shadowsocks(SS)** 和 **ShadowsocksR(SSR)** 是两个基于 **==SOCKS5 代理协议==** 的 **==加密==代理工具**。
| 加密代理工具 | 说明 |
| ----------------- | ----------------------------------------------------------- |
| Shadowsocks(SS) | 基于 SOCKS5 协议实现,增加了 "**加密**" 功能,支持 AEAD、Chacha20 等**强加密算法** |
| ShadowsocksR(SSR) | SS 的改进版本,增加了 **协议伪装**、**流量混淆**功能,提高抗封锁能力 |
> [!NOTE] SOCKS 协议本身没有 "加密" 机制,是明文传输。这两个工具以 SOCKS5 为基础,**引入了==加密==功能**。
> [!NOTE] SS 与 SSR 目前已被 V2Ray 取代,推荐使用 V2Ray 或 Trojan
>
> - SS 由 clowwindy 采用 Python 开发,原作者仓库已于 2015 年删除。
> - SSR 由 breakwa11 开发,原作者仓库已于 2017 年删除。
>
> 两个工具都是开源项目,但原作者已删库不再维护,仍存有社区维护版本,例如:
>
> - [shadowsocks-libev](https://github.com/shadowsocks/shadowsocks-libev) ,SS 的 C 语言实现,轻量高效
> - [shadowsocks-windows](https://github.com/shadowsocks/shadowsocks-windows) , Windows GUI 客户端
> - [shadowsocks-android](https://github.com/shadowsocks/shadowsocks-android),Android 客户端版本
>
### SS/SSR 工作流程
SS/SSR **工作流程**:(下面统称 SS)
1. **SS 客户端** 与 **SS 服务器** 建立加密通信隧道(TLS 或 UDP 加密隧道)。
2. **SS 客户端** 监听本地 **==SOCKS5 端口==**(如 `127.0.0.1:1080`),等待**浏览器/应用**向该端口发送 "**目标地址请求**"。
3. 当 **==浏览器/应用==** 需访问目标地址时,不自行请求,而是向其配置的 **SOCKS5 代理端口** 发送 "**==目标地址请求==**"(通过 **SOCKS5 报文**)。
4. **SS 客户端接收目标地址请求,并将其==加密==后发送给 SS 服务器**,由其**解密后转发至目标网站**。
5. **目标服务器** 返回数据 -> **SS 服务器**,后者 **==加密==** 后传回给 SS 客户端。
6. **SS 客户端** 解密数据,获取**原始数据包**,转发给 **==浏览器或应用==**(通过 **SOCKS5 报文**)
<br><br>
# V2Ray 工具
V2Ray 是一个当下常用的代理工具,其支持 **==自有代理协议==**,支持**更多协议伪装和流量混淆方式**,相较于 SS/SSR 而言提供了更强大的代理功能和抗封锁能力。
V2Ray 主要特性:
- **多协议支持**:
- **==VMess==**(V2Ray 自有协议)
- **==VLESS==**(轻量化的 VMess,去掉了身份认证机制)
- Shadowsocks
- **SOCKS5**(兼容传统代理,可用作为 SS/SSR 客户端或服务器)
- **HTTP 代理**
- mKCP(UDP 传输,可伪装为视频流)
- QUIC(UDP 传输)
- gRPC(企业级伪装,使其表现为像云 API 调用)
- **多协议伪装**
- **TLS 伪装**(让流量看起来像正常 HTTPS 访问)
- **WebSocket 伪装**(流量通过 WebSocket)
- **XTLS**(更高效的 TLS 传输,减少延迟)
- **mKCP 伪装**(流量看起来像 UDP 视频流)
- **流量混淆**
- **动态端口**(端口随机变化,防止封锁)
- **流量填充**(随机数据,防止特征检测)
- **==路由规则配置== & 流量分流**
- 可根据 **域名、IP、用户 ID、协议** 等设置 **==路由规则==**,例如:**国内网站走直连,国际流量走代理**
- **多出口支持**
- 可配置多个代理节点,自动选择最快的线路
- 负载均衡,提高可靠性
- **DNS 配置**
- 支持 **DOH(DNS over HTTPS)和 DOT(DNS over TLS)**
- 避免 DNS 污染,防止泄露访问记录
- **反向代理**
- 类似于 **Nginx 反向代理**,支持穿透防火墙访问内网资源
- **跨平台支持**
- 支持 **Windows、Linux、macOS、Android、iOS**
> [!tip] 推荐的 V2Ray 混淆方案:「VMess + TSL + WebSocket」
>
> - 所有数据经过 TLS 传输,TLS 伪装使流量表现为**正常 HTTPS 流量**,而难以被判断出是代理流量;
> - WebSocket 流量可以**被 CDN 转发**,进一步**隐藏代理服务器 IP**(而只可见 CDN 的 IP),降低被封的风险。
>
> 缺点:
>
> - 代理服务器需要 **TLS 证书**;
> - **WebSocket 增加了一定的延迟**:相比于 TCP 直连(如 VMess + TCP),**WebSocket 需要额外的封装和握手过程**,会增加一定的延迟。
> - CDN 本身可能会检测代理流量。
### V2Ray 工作流程
V2Ray 工作流程与 SS/SSR 类同:
1. **V2Ray 客户端** 与 **V2Ray 服务器**建立**加密通信隧道**;
3. **V2Ray 客户端** 在本地运行,**监听代理端口**(SOCKS5、HTTP 等)。
4. **浏览器 / 其他应用** 通过本地 V2Ray 代理连接目标网站。
5. **V2Ray 客户端** 将流量加密,并通过 **VMess、VLESS、SOCKS5** 等协议发送到 V2Ray 服务器。
6. **V2Ray 服务器** 解密数据,并与目标网站通信,获取数据。
7. **V2Ray 服务器** 再次加密数据,返回给客户端。
8. **V2Ray 客户端** 解密后,将数据转发给浏览器,最终完成网页加载。
<br><br><br>
# Clash 工具
Clash 是一个当下常用的跨平台代理工具,支持多种代理协议。
- **多协议支持**:
- V2Ray 的 VMess、VLESS;
- Trojan 工具的协议
- SOCKS5(兼容传统代理,可用作为 SS/SSR 客户端或服务器)
- HTTP/HTTPS 代理
- **进阶混淆和伪装**
- 支持 TLS 伪装
- 支持 WebSocket 伪装
- 支持 Cloudflare CDN 代理
- **==路由规则配置== & 流量分流**
- 可根据 **域名、IP、端口、协议** 等设置 **==路由规则==**,对流量进行分流。例如:**国内网站走直连,国际流量走代理**
- 支持 **GEOIP 规则**,自动判断 IP 归属地,并选择最佳线路。
- **负载均衡和自动测速**
- Clash 支持多个代理节点,并可以根据 **Ping 值、延迟、带宽** 自动选择最快的节点。
- 支持 **URL 测速**,定期检测代理的可用性。
- **DNS 代理(防止 DNS 污染)**
- **支持 DoH(DNS over HTTPS)和 DoT(DNS over TLS)**,避免 DNS 泄露。
- **自定义 DNS 解析**,可以强制特定域名解析到某些 IP(如屏蔽广告)。
- **支持==全局代理==**
- 可将整个设备的流量(包括系统应用)通过代理,而**不仅仅是发往 SOCKS、HTTP 监听端口的流量**。
## clash 版本
clash 作为开源项目,有多个不同的分支和 **GUI 版本**:
| **版本** | **适用平台** | **特点** |
| --------------------- | ------------------- | -------------------------- |
| **Clash (Core)** | macOS/Linux/Windows | **纯命令行**,需要手动配置 |
| **Clash for Windows** | Windows | 提供 GUI 界面 |
| **ClashX** | macOS | 提供 GUI 界面 |
| **Clash for Android** | Android | 提供 GUI 界面 |
| **Clash Verge** | 多平台 | 支持更强大的协议(Reality、Hysteria) |
| **Clash Meta** | 多平台 | 进阶版 Clash,支持更好的混淆和流量优化 |
## clash 配置文件
Clash 使用 **YAML 配置文件**(`config.yaml`)来定义代理规则,字段如下:
- `ort: 7890` → HTTP 代理端口
- `socks-port: 7891` → SOCKS5 代理端口
- `mode: Rule` → 采用规则模式
- `proxies:` → 代理服务器列表(支持 VMess、Shadowsocks、Trojan 等)
- `proxy-groups:` → 自动测速,选择最快的代理
- `rules:` → 规则匹配(国内直连,国外走代理)
```yaml
port: 7890
socks-port: 7891
allow-lan: false
mode: Rule
proxies:
- name: "日本节点"
type: vmess
server: jp.example.com
port: 443
uuid: "your-uuid"
alterId: 0
cipher: auto
tls: true
network: ws
ws-path: "/ws"
ws-headers:
Host: "jp.example.com"
proxy-groups:
- name: "自动选择"
type: url-test
proxies:
- "日本节点"
url: "https://www.google.com"
interval: 300
rules:
- GEOIP,CN,DIRECT
- MATCH,自动选择
```
<br>
## clash 工作流程
Clash 开启后:
1. 其将作为 "**代理协议的客户端**" 与 "**代理服务器**"(所选节点) 建立连接;
2. 同时**监听本机的 `127.0.0.1:7890` 端口**(可自定义端口),等待流量进入;
3. 所有发往 `127.0.0.1:7890` 端口的流量,将**由 Clash 充当客户端,根据==规则匹配==,==直连目标服务器==或==转发给代理服务器==**。
4. 若转发给代理服务器,则**再由代理服务器发往 "目标服务器"**,待其获取目标服务器的 "**响应报文**" 后,回发给 Clash,再**由 Clash 传回给应用程序**。
> [!info] Chrome 的 Switch Omega 插件
>
> SwitchOmega 提供了为浏览器 **==配置== & ==切换==不同代理服务器**的功能。
>
> ![[_attachment/02-开发笔记/07-计算机网络/应用层/虚拟私人网络 VPN.assets/IMG-虚拟私人网络 VPN-31C87C205BEB4C4C1A60BA99B852D2A0.png|176]]
>
> - `Direct`:直连,浏览器的所有 Web 请求直接发往**目标服务器**。
> - `System Proxy`:系统代理,浏览器的所有 Web 请求将发往 "**操作系统**" 上所配置的 "**代理服务器 IP 及端口**"(要求 **==系统代理开启==**)
> - **自定义代理**:例如上图中的 `clash`,配置为 `127.0.0.1:7890`(即 Clash 的监听端口),即是**让浏览器将所有 Web 请求发往 `127.0.0.1:7890`**。
<br>
## clash 代理模式
即 Proxies 页面下的 **4 种模式**:
- **全局**(Global):监听到的所有请求**全部发往代理服务器**;
- **规则**(Rule):监听到的所有请求**根据==配置文件规则==进行分流**,仅将对配置中网站发起的访问请求走代理。
- 直连(Direct):监听到的所有请求**直接发往目的地址**,即不走代理
- 脚本(Script):未知。
> ![[_attachment/02-开发笔记/07-计算机网络/应用层/虚拟私人网络 VPN.assets/IMG-虚拟私人网络 VPN-E0E3C861048B565506713F2825B4EF14.png|658]]
<br>
## System Proxy 系统代理
在 **系统层面** 设置 **全局的 HTTP/HTTPS/SOCKS 代理服务器**。
开启系统代理后:
- 部分软件(如**浏览器**、Telegram)会**自动识别** "系统代理" 中设置的**代理 IP 地址及端口**,将软件流量发往该 IP 地址及端口。
- 部分软件不会自动识别系统代理,但提供了设置选项,则**可在软件设置中手动配置**。
> [!example] Windows 系统代理
>
> Clash for Windows 中的 "**System Proxy**" 选项实际上即是打开 **Windows 的系统代理**。
>
> ![[_attachment/02-开发笔记/07-计算机网络/应用层/虚拟私人网络 VPN.assets/IMG-虚拟私人网络 VPN-992CAA7A19F2B6EB5474EE93C2E621C9.png|488]]
>
> 如下所示:
> ![[_attachment/02-开发笔记/07-计算机网络/应用层/虚拟私人网络 VPN.assets/IMG-虚拟私人网络 VPN-37FBE73B4F893129C3422FAAD5E6086A.png|499]]
>
>
<br>
## Tun 模式
Tun Mode 开启后,Clash 将会创建一个**虚拟网卡**,拦截**整个系统的 TCP/UDP 流量**,并发送到 Clash 代理。
<br><br><br>
# Buffer
## 闪念
> sudden idea
## 候选资料
> Read it later
# ♾️参考资料
# Footnotes