浏览器 → 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