naive节点的服务端消除了服务端tls指纹和科学上网特征并伪装成了正常网站,同时naive还消除了客户端的tls指纹和tls-in-tls特征,再http2的加持下自带多路复用,相比于ws需要频繁握手,可以获得更低的延迟(仅对比直连情况,naiveproxy不能使用CDN加速)。NaiveProxy的客户端使用了chrome浏览器内核作为网络协议栈,将代理完全模拟成了正常的使用谷歌浏览器访问正常的网站。
VPS一台:已安装docker和nginx(nginx需要stream模块,可以使用docker安装,只要保证nginx容器与naive容器位于同一docker网络之上就行)、域名一个并做好域名解析(不要使用CDN)
PS:如果这个VPS只部署NaiveProxy节点,可以不安装docker和nginx,直接在VPS上部署,推荐使用ubuntu系统。但为了是多种科学上网协议都能走443端口,推荐使用nginx做sin分流
本教程使用的VPS:(便宜美区VPS-月付不到6元 购买链接)
docker安装教程:Linux系统Docker安装教程
购买域名:namesilo ;优惠码:c34aq98i
设置Nameservers教程:使用namesilo注册域名修改名称服务器Nameservers教程
视频演示:https://youtu.be/b-i8pfuTws0
① 创建一个docker网络:这里创建了一个anqiqii的网络,创建网络是为了给容器一个固定IP
docker network create --subnet 192.168.18.0/24 --gateway 192.168.18.1 anqiqii
② 创建一个ubuntu容器,我们将在这个容器中部署naive并通过nginx复用443端口。对于直接在VPS中部署naive,推荐使用ubuntu系统。
docker run -it --network=anqiqii --ip 192.168.18.66 --name naive -v /home/naiveproxy:/root ubuntu /bin/bash
③ 进入容器后,进入/root目录:cd ~ ;然后执行如下命令编译安装 caddy+naive
apt update
apt install golang-go
apt install ca-certificates
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
~/go/bin/xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive
④ 在编译好的caddy程序的同级目录下创建一个Caddyfile文件:(由于做了挂载,这个目录对应了宿主机的 /home/naiveproxy 目录)
:443, naive.caq98i.top #监听的端口和部署naiveproxy的域名
tls [email protected] #邮箱,真实的邮箱or虚假的邮箱均可
route {
forward_proxy {
basic_auth user password #用户名和密码
hide_ip
hide_via
probe_resistance
}
#多用户支持
forward_proxy {
basic_auth user2 password2 #第二个用户的用户名和密码
hide_ip
hide_via
probe_resistance
}
reverse_proxy https://www.bing.com { #反代一个网站用于伪装
header_up Host {upstream_hostport}
header_up X-Forwarded-Host {host}
}
}
配置nginx用于多节点的sin分流实现443端口复用同时也将80端口配置给容器便于caddy自动申请证书
⑤ nginx的stream配置如下:
stream {
map $ssl_preread_server_name $sni_name {
www.reality.com reality; # reality节点的伪装域名
naive.caq98i.top naive; # naive节点的域名
default blog; # 其他未匹配的域名走blog标注的上游服务器
}
# 配置不同的上游服务,转交数据包
upstream reality {
server 192.168.18.99:47869; # 部署reality的容器的ip和监听的端口
}
upstream naive {
server 192.168.18.66:443; #naive容器的ip和监听的端口
}
upstream blog {
server 127.0.0.1:8443; #其他,这里是转到了本机的8443端口;http块中可以配置不同的server监听8443端口实现各种定制功能
}
server {
# 复用443端口配置
listen 443 reuseport;
# 根据sni分流到不同的上游服务器
proxy_pass $sni_name;
# 用于获取TLS握手信息,也就是可以获取SNI的信息用于分流
ssl_preread on;
}
}
⑥ 在HTTP块中添加一个server,这个在caddy申请证书是用到
server
{
listen 80;
server_name naive.caq98i.top; # naive节点的域名
location / {
proxy_pass http://192.168.18.66/; # naive容器的IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
⑦ 回到naive容器,执行:./caddy start ;caddy会自动申请证书并启动naiveproxy的服务端;最后,使用 CTRL+P+Q 保持当前的进程并退出容器
注:只要正常开放了80和443端口,caddy就能正常自动获取证书。在本例中,caddy部署在了docker容器中(ip地址为192.168.18.66)并可以监听80和443端口,但这是内网IP,并不是公网IP,申请证书时,caddy需要通过公网IP的80和443端口和CA机构通讯以便获得证书的签发。本教程中,公网IP的80和443端口被nginx监听,通过配置nginx将关于域名maive.caq98i.top的数据包转交给caddy所在的容器。
caddy常用命令:
前台运行caddy:./caddy run
后台运行caddy:./caddy start
停止caddy:./caddy stop
重载配置:./caddy reload
⑧ 新建一个.json文件,配置如下:
{
"listen": "socks://127.0.0.1:1080",
"proxy": "https://user:[email protected]"
}
配置了监听端口,proxy中配置了用户名,密码和naive节点的域名
⑨ 在V2rayN中添加一个自定义配置服务器:

如果对V2rayN客户端不熟悉,可以参考:v2ray 系列教程
阅读完毕,来看看我们推荐的好工具吧!🦀🦀