浏览器 → NaiveProxy客户端 ⟶ GFW ⟶ 常用前端(Caddy/HAProxy等) → NaiveProxy服务端 ⟶ 互联网
使用Chrome的网络堆栈,GFW审查截获的流量行为与Chrome和标准前端(如 Caddy、HAProxy)之间的常规 HTTP/2 流量完全相同。前端还会将未经身份验证的用户和活动探测器重新路由到后端HTTP服务器,从而使得无法检测到代理的存在,比如像这样:探查⟶常用前端⟶网站页面。
https://github.com/klzgrad/naiveproxy
0. 安装Go开发环境
下载
cd ~/
wget "https://go.dev/dl/$(curl https://go.dev/VERSION?m=text).linux-amd64.tar.gz"
解压缩
tar xvaf go1.19.3.linux-amd64.tar.gz
mv go golang
mkdir go
配置环境变量
export GOROOT=$HOME/golang
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$GOBIN:$GOROOT/bin:$PATH
1. 安装编译caddy
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
~/go/bin/xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive
或
~/go/bin/xcaddy build --with github.com/caddyserver/forwardproxy=github.com/klzgrad/forwardproxy@naive
编译成功后,可以看到当前目录中存在一个名为caddy的文件。
https://github.com/klzgrad/naiveproxy/wiki/%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87 中介绍的方法有点过时
2. 配置caddy
创建一个 config.json
:443, softs.im
tls email@softs.im
route {
forward_proxy {
basic_auth username passwd
hide_ip
hide_via
probe_resistance
}
file_server {
root /home/softsim/www
}
}
更好一点的配置
{
order forward_proxy before file_server
}
:443, nr5g.softs.im {
tls /home/softsim/ssl/softsim.cer /home/softsim/ssl/softsim.key
forward_proxy {
basic_auth myuser mypasswd
hide_ip
hide_via
probe_resistance
}
root * /home/softsim/nr5g
encode gzip
php_fastcgi unix//run/php/php8.1-fpm.sock
file_server
}
lte.softs.im {
tls /home/softsim/ssl/softsim.cer /home/softsim/ssl/softsim.key
file_server {
root /var/lib/transmission-daemon/downloads
}
}
注意:
(1) 用您的实际电子邮件地址替换 email@softs.im 用来接收 Let’s Encrypt 通知
或者用 文件配置 已经申请好的证书
tls /path/example.com.crt /path/example.com.key
将其格式化
caddy fmt --overwrite /etc/caddy/Caddyfile
注意:不格式化,caddy运行会报错
并且,还得用 /etc/caddy/Caddyfile 这个名字, 用别的文件名会出错
如果想建立多用户版Naive,可以将 forward_proxy 模块复制。将basic_auth中的用户密码修改成另外一个就可以了。
运行
# 以后台的方式启动 caddy
caddy start --config /etc/caddy/Caddyfile
# 以前台的方式启动 caddy
caddy run --config /etc/caddy/Caddyfile
caddy stop
3. 编译naiveproxy客户端
git clone --depth 1 https://github.com/klzgrad/naiveproxy.git
cd naiveproxy/src/
./get-clang.sh
./build.sh
编译出的文件为 out/Release/naive
配置naiveproxy 客户端
{
"listen": "socks://127.0.0.1:1080",
"proxy": "https://username:passwd@softs.im"
}
保存为np.json
运行
./naive np.json
4. 配置浏览器的 SmartProxy或者SwitchyOmega 来自动匹配要代理的网站
…..
5. 让caddy以systemd 的守护进程运行
mv caddy /usr/bin/
setcap cap_net_bind_service=+ep /usr/bin/caddy
添加 /etc/systemd/system/caddy.service 文件,内容如下
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target
[Service]
User=www-data
Group=www-data
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
启用服务
systemctl daemon-reload
systemctl enable caddy
systemctl start caddy
6. 支持一般PHP的配置
root * /home/softsim/simpleforum
php_fastcgi unix//run/php/php7.4-fpm.sock
file_server