Easy Proxy | 简单的网络代理工具
引言
尽管现在有不少“一键配置代理服务器”的脚本,但我们不一定了解这到底是怎么实现的。
本文会带你了解并搭建一种借助Gost实现的 HTTPS Proxy ,知道代理服务器的工作原理。
申请 TLS 证书
这一部分介绍获取 Let’s Encrypt提供的免费 TLS 证书。
补充说明:在网络安全领域,“SSL证书”与“TLS证书”这两个术语经常被混用,但它们在实际指代上并无区别,均指代用于加密网站通信的数字证书。
- 技术迭代:SSL(安全套接层)是早期的加密协议,由于安全性问题,其后续版本已被更先进的 TLS(传输层安全性)协议所取代。因此,从严格意义上讲,当前实际使用的是 TLS 证书。
- 习惯称谓:尽管技术标准已更新,但由于“SSL证书”这一名称在行业内应用已久,已成为约定俗成的通用叫法,人们依然习惯用它来泛指各类网站加密证书。
前置条件
- 已解析到你服务器 IP 地址的域名
- 服务器开放 80/443 端口
推荐使用 certbot 自动化获取和续期。
1. 安装 certbot(Debian/Ubuntu)
1 | sudo apt update && sudo apt install snapd |
2. 申请证书
1 | sudo certbot certonly --standalone -d example.com -d www.example.com |
-d指定域名,支持多域名。standalone 模式会临时占用 80 端口。
3. 证书文件说明
1 | /etc/letsencrypt/live/example.com/ |
4. 测试自动续期
1 | sudo certbot renew --dry-run |
certbot 安装时会自动配置 systemd timer,无需手动添加 cron 任务。
Gost
下载与安装
以 v2.12.0 为例,读者可以前往 Releases 页面 获取最新版(注意选择与自己服务器平台相匹配的编译包)。
1 | wget https://github.com/ginuerzh/gost/releases/download/v2.12.0/gost_2.12.0_linux_amd64.tar.gz |
HTTPS Proxy
Gost 命令示例
1 | # 服务器端 |
Clash 配置示例
1 | - name: "Name" |
原理解析
sequenceDiagram
participant PC as PC
用户客户端
participant Proxy as Server A
(HTTPS代理)
participant Server as Server B
(网站服务器)
Note over PC,Proxy: 阶段一:建立PC-Proxy TLS隧道
PC->>Proxy: TCP三次握手
PC->>Proxy: TLS握手(PC验证Proxy证书)
Proxy-->>PC: TLS握手完成
Note over PC,Proxy: 第一层TLS隧道建立
Note over PC,Proxy: 阶段二:通过隧道发送CONNECT请求
PC->>Proxy: 第一层TLS加密后的HTTP CONNECT server-b.com:443
Proxy->>Proxy: 解密请求,解析出CONNECT目标
Proxy->>Server: TCP三次握手
Server-->>Proxy: TCP连接建立
Proxy->>PC: 第一层TLS加密后的HTTP/1.1 200 Connection Established
Note over PC,Server: 阶段三:隧道内传输PC-Server B的TLS握手
PC->>Proxy: 第一层TLS加密后的数据
(内含第二层TLS ClientHello)
Proxy->>Proxy: 解密第一层,取出第二层数据
Proxy->>Server: 转发第二层TLS ClientHello(明文TCP)
Server-->>Proxy: 第二层TLS ServerHello、证书等
Proxy->>Proxy: 将第二层响应加密为第一层TLS
Proxy-->>PC: 第一层TLS加密后的第二层TLS握手响应
Note over PC,Server: 第二层TLS握手完成(端到端加密)
Note over PC,Server: 阶段四:应用数据传输
PC->>Proxy: 第一层TLS加密后的HTTP请求
(内含第二层加密的应用数据)
Proxy->>Proxy: 解密第一层,取出第二层数据
Proxy->>Server: 转发第二层加密的HTTP请求
Server-->>Proxy: 第二层加密的HTTP响应
Proxy->>Proxy: 将第二层响应加密为第一层TLS
Proxy-->>PC: 第一层TLS加密后的HTTP响应
常见问题
Q: Certbot 申请失败?
- 检查域名是否解析到当前服务器 IP
- 确保 80 端口未被占用
- 暂时关闭 Nginx/Apache(如有)
Q: 端口被阻断?
- 检查服务器防火墙是否放行对应端口
- 部分云服务商(如阿里云、AWS)需要在安全组中开放端口