Easy Proxy | 简单的网络代理工具
Astralyn

引言

尽管现在有不少“一键配置代理服务器”的脚本,但我们不一定了解这到底是怎么实现的。

本文会带你了解并搭建一种借助Gost实现的 HTTPS Proxy ,知道代理服务器的工作原理。


申请 TLS 证书

这一部分介绍获取 Let’s Encrypt提供的免费 TLS 证书。

补充说明:在网络安全领域,“SSL证书”与“TLS证书”这两个术语经常被混用,但它们在实际指代上并无区别,均指代用于加密网站通信的数字证书。

  • 技术迭代:SSL(安全套接层)是早期的加密协议,由于安全性问题,其后续版本已被更先进的 TLS(传输层安全性)协议所取代。因此,从严格意义上讲,当前实际使用的是 TLS 证书。
  • 习惯称谓:尽管技术标准已更新,但由于“SSL证书”这一名称在行业内应用已久,已成为约定俗成的通用叫法,人们依然习惯用它来泛指各类网站加密证书。

前置条件

  • 已解析到你服务器 IP 地址的域名
  • 服务器开放 80/443 端口

推荐使用 certbot 自动化获取和续期。

1. 安装 certbot(Debian/Ubuntu)

1
2
3
sudo apt update && sudo apt install snapd
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

2. 申请证书

1
sudo certbot certonly --standalone -d example.com -d www.example.com

-d 指定域名,支持多域名。standalone 模式会临时占用 80 端口。

3. 证书文件说明

1
2
3
/etc/letsencrypt/live/example.com/
├── fullchain.pem # 完整证书链(Nginx/Apache 需要)
└── privkey.pem # 私钥

4. 测试自动续期

1
sudo certbot renew --dry-run

certbot 安装时会自动配置 systemd timer,无需手动添加 cron 任务。


Gost

下载与安装

v2.12.0 为例,读者可以前往 Releases 页面 获取最新版(注意选择与自己服务器平台相匹配的编译包)。

1
2
3
wget https://github.com/ginuerzh/gost/releases/download/v2.12.0/gost_2.12.0_linux_amd64.tar.gz
tar -xzf gost_2.12.0_linux_amd64.tar.gz && rm gost_2.12.0_linux_amd64.tar.gz
chmod +x gost

HTTPS Proxy

Gost 命令示例

1
2
3
4
5
# 服务器端
./gost -L="https://username:password@:443?probe_resist=code:404&cert=/path/to/your/cert/file&key=/path/to/your/key/file"

# 客户端
./gost -L="socks://:1080" -F="https://username:password@example.com:443"

Clash 配置示例

1
2
3
4
5
6
7
- name: "Name"
server: example.com
port: 443
type: http
username: "username"
password: "password"
tls: true

原理解析

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)需要在安全组中开放端口