0%

利用 Caddy 伪装 SSR 的流量

作为一名面向 Google 编程的程序员,如何在墙内使用代理变成了一个问题。记得最初开发 Android 应用的时候,需要从网上下载 SDK 来进行开发,一开始 SS 并不流行,只能使用第三方服务商的提供的代理服务。后面开始接触搬瓦工这类 VPS 提供商,购买 VPS 并按照网上的教程进行搭建 SS 服务。后来使用 SS 的门槛越来越低,很多人使用网上的脚本便可一键部署。最近传言 SS 的流量已经能被检测出来,所以想着使用 SSR 的流量伪装功能,将代理的流量伪装成正常的 HTTPS 流量。

整体方案

为了进行伪装,我们主要的目的是让 SSR 可以接受 HTTPS 的请求,让我们的 SSR 服务看起来像一个 HTTPS 服务。之前网上有文章讲述在联通营业厅查询流量类型时,SSR 流量显示的是 HTTPS 流量,证明这个方式目前是 OK 的。整体方案如下:

安装并配置 SSR 服务

当选好 VPS 服务商之后,就可以开始使用脚本来安装 SSR 服务。我目前使用的是搬瓦工的 GIA 套餐($37.49 USD),这个套餐是搬瓦工前几次黑色星期五推出的限量版套餐,目前已经绝版,后面推出的 GIA 限量版套餐涨到快五十美刀了,不过配置会稍微高一些。其实搬瓦工的 GIA 套餐是我用过最稳定的 VPS 路线,检验一个 VPS 是否好用在晚高峰期查看丢包率就可以了,我在家使用的是移动宽带,晚高峰比阿里云国际的体验好太多了。接下来使用 SSH 登录 VPS 之后,可以使用 teddysun 提供的一键脚本安装 SSR,下面要做的是需要修改原来的 SSR 配置。

带有伪装的配置信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"server":"0.0.0.0",
"server_ipv6":"::",
"server_port":443,
"local_address":"127.0.0.1",
"local_port":1080,
"password":"填写你的密码",
"timeout":120,
"method":"none",
"protocol":"auth_chain_a",
"protocol_param":"#",
"obfs":"tls1.2_ticket_auth",
"obfs_param":"填写你需要伪装的域名",
"redirect":["*:443#127.0.0.1:2333"],
"dns_ipv6":false,
"fast_open":true,
"workers":2
}

上述配置只是提供一个模板,读者可以根据实际情况自行调整,下面简要介绍一些跟伪装相关的配置项。

  • server_port 配置 SSR 暴露的端口,因为我们伪装的是 HTTPS,所以选择 443 端口
  • obfs 该配置项配置的混淆的方式,上面配置的是 HTTPS 方式,不需要修改
  • obfs_param 配置你这台主机 IP 对应的域名,不要随便配置
  • redirect 该配置的作用是当请求是浏览发出的时候,将流量转发给本机的 2333 端口

安装并配置 Caddy 服务

上面的 SSR 配置后,443 端口就会被占用,接下来会启动 2333 端口的 Caddy 服务。至于为什么使用 Caddy,主要是利用 Caddy 提供一个 HTTPS 服务,Caddy 可以自动申请 SSL 证书,非常便捷。我目前使用的是 Centos 7 的系统,可以使用 yum 安装 Caddy,剩下只需添加配置即可。

执行 Caddy 的安装命令:

1
yum install caddy

启动 Caddy 服务:

1
systemctl start caddy

Caddy 启动之后会在 “/etc/caddy” 目录下面生成配置文件,下面需要修改 “/etc/caddy/conf.d/Caddyfile.conf” 这个配置文件,如果没有找到按路径新建一个即可。配置信息如下:

1
2
3
4
5
6
7
8
9
10
http://example.com {
redir https://example.com{url}
}
https://example.com:2333 {
gzip
tls xxx@example.com
proxy / localhost:9091 {
transparent
}
}

上面主要有两个配置项,第一个是配置项是 “example.com”,该配置项是将 HTTP 请求转为 HTTPS 请求,也就是我们在浏览器中输入的是 HTTP 链接时会自动跳转到 HTTPS 类型的链接上。第二项配置是 “example.com:2333”,其中 tls 是自动申请 SSL 证书的邮箱,随便输入一个即可,后面也不会进行验证,”proxy” 配置的是反向代理,代理的是主机 9091 端口的服务,也就是会将 “example.com:2333” 的请求转发到 “localhost:9091” 上。最后需要注意的是配置的这个域名当前指向的一定是这台主机,否者 SSL 证书会申请失败。

当配置编辑好之后,先输入命令停止 Caddy,然后启动 Caddy 并查看状态,检查 Caddy 是否配置正确。

停止命令:

1
systemctl stop caddy

查看状态命令:

1
systemctl status caddy

如果状态的信息是 “running”,就说明配置正确了,下面给出我的控制台状态信息:

1
2
3
4
5
6
7
8
● caddy.service - Caddy HTTP/2 web server
Loaded: loaded (/usr/lib/systemd/system/caddy.service; enabled; vendor preset: disabled)
Active: active (running) since 日 2019-12-15 09:03:04 EST; 3s ago
Docs: https://caddyserver.com/docs
Process: 8560 ExecStartPre=/usr/bin/caddy -conf /etc/caddy/caddy.conf -validate (code=exited, status=0/SUCCESS)
Main PID: 8564 (caddy)
CGroup: /system.slice/caddy.service
└─8564 /usr/bin/caddy -conf /etc/caddy/caddy.conf -root /tmp -agree

后面还会有你配置的域名相关的信息,这里就不给出了,当然状态有问题可以自行 Google 找出解决办法。Caddy 的配置比 Nginx 还是简单很多的,如果只需要轻量级的反向代理服务,Caddy 是一个很好的选择。

如果你需要配置 Caddy 开机自行启动,可以输入如下命令:

1
systemctl enable caddy

安装并配置 Web 服务

我在主机安装的 Web 服务是 Transmission,该服务可以下载 BT 或者 PT,可以用来挂 PT 或者国外的 BT 种子,挂载的时候需要注意主机的磁盘空间以及流量。

执行如下命令安装 Transmission:

1
yum install transmission-cli transmission-common transmission-daemon

启动并停止 Transmission:

1
2
systemctl start transmission-daemon.service
systemctl stop transmission-daemon.service

启动并停止的目的是为了生成初始的配置文件,方便后续的修改。

配置必要的 Transmission 选项:

1
2
3
4
5
6
"rpc-authentication-required": true,
"rpc-enabled": true,
"rpc-password": "mypassword",
"rpc-username": "mysuperlogin",
"rpc-whitelist-enabled": false,
"rpc-whitelist": "0.0.0.0",
  • rpc-authentication-required 开启验证,除非你想服务裸奔到外网中
  • rpc-password 登录的用户名
  • rpc-username 登录的密码
  • rpc-whitelist-enabled 允许白名单,记住要关闭,否则只能指定 IP 才能进行登录

配置好之后重新启动 Transmission,如果你想 Transmission 也能开机启动,输入如下命令:

1
systemctl enable transmission-daemon.service

Transmission 默认启用的就是 9091 端口,我们已经将 Transmission 服务反向代理到 Caddy 了。如果我们的 SSR 和 Caddy 服务正常的话,在浏览器中输入主机的域名就会弹出登录框,根据用户名和密码便可登录 Transmission 的管理页面。如果没有按照预期出现登录框,可以检查下是不是因为 VPS 防火墙的原因,防火墙一定要让 443 端口通过。

如果觉得我的文章对您有用,请查看广告(Google Ads)或扫码。您的支持将鼓励我继续创作!