Naiveproxy客户端搭建指南
小心使得万年船
最近又要进入敏感时期了,所以安全得包装,22年10月份封禁了一大批。随着Xray作者提出的TLS in TLS可以被探测到。可见目前协议不是安全的,Xray提出了一个解决方案:XTLS。但是XTLS会占用服务器得443端口,需要接手服务器所有流量。对于目前得我来说并不是很方便,而且我推崇服务器只开放常规端口,做到像普通服务器一样。
几种解决方案
那么,有没有别的安全得翻墙方式么?也是有的,针对TLS in TLS,那片文章也提出了三个解决方案。
- NaiveProxy
- 原理是高度模仿HTTPS访问
- 使用的人数不多,而且客户端支持也不多,甚至文档也不多
- 魔改得shadowsocks
- 新版本得Xray支持,就是推荐的加密方式:
2022-blake3-aes-128-gcm
2022-blake3-aes-256-gcm
2022-blake3-chacha20-poly1305 - 好像不支持caddy转发,只能开放对应端口,不是很符合我尽量少开放端口得原则
- NaiveProxy说过不要自己戳密码,SS就是他举例得典型
- 新版本得Xray支持,就是推荐的加密方式:
- MITM,简单说就内部流量脱去TLS加密,由服务器进行加密。
- 原理很简单,你不是TLS in TLS,那么我内部得就明文传输,这样就是完整的TLS
- 问题也很简单,就是你翻墙访问得所有网站都会提示你证书不可信。
所以最后我选择了NaiveProxy。
部署方案
准备材料:
- 1台可以访问的VPS
- caddy v2
部署方式: - docker部署
这个很重要,请确认你的版本和我得是不是对应的,因为我这次找了很多文档,都是caddy v1的或者就是什么其他部署方式,对我来说,参考程度有限。
其次我不推崇使用一键脚本,那用起来舒服,但是对自己的服务器上有一块盲区,总归是不安全的。我推荐使用docker部署,安全和便捷兼具,我会尽量做到一步到位。如果你还没安装docker,可以翻看我之前的教程,或者去官方看教程。也是很简单的。
NaiveProxy是没有服务器软件的,直接使用包含naïve的caddy forwardproxy分支来代替单独的naïve服务端,所以我们需要一个docker安装caddy即可。
-
创建一个空文件夹,然后创建dockerfile,复制一下代码:
1
2
3
4
5
6
7FROM caddy:builder-alpine AS builder
RUN xcaddy build \
--with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive
FROM caddy:alpine
COPY --from=builder /usr/bin/caddy /usr/bin/caddy这里需要注意forwardproxy的master是caddy v1版本的,所以必须在后面写上
caddy2
,然后看文档也要注意,选择caddy2分支。两边不一样。 -
在同一个文件夹下面创建文件docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20version: "3.9" # optional since v1.27.0
services:
caddy: #caddy反向代理
container_name: caddy
build:
context: .
dockerfile: dockerfile #这里就是调用你步骤一创建的文件
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- /<你的路径>/data:/data #caddy留存的证书信息,最好保存,方便后续迁移
- /<你的路径>/caddyconfig:/etc/caddy #caddyfile的配置文件
- /<你的路径>/file:/usr/share/caddy #caddy的运行网页
ports:
- "80:80"
- "443:443"
- "443:443/udp" -
部署docker,直接使用命令(确保路径下有这个文件):
1
docker-compose up docker-compose.yml
-
在
- /<你的路径>/caddyconfig:/etc/caddy #caddyfile的配置文件
这个路径下创建Caddyfile文件:1
2
3
4
5
6
7
8
9
10
11
12:443, xxxx.xxxx.com { # 443必须的,否则无法执行,逗号后面有个空格,别忘记了。
route {
forward_proxy {
basic_auth <用户名> <密码>
hide_ip
hide_via
}
file_server {
root /usr/share/caddy/share # 可以在之前的网页路径下随便放一个index网页
}
}
} -
重启下docker就可以了。
-
打开本地电脑的客户端下的
config.json
1
2
3
4{
"listen": "socks://127.0.0.1:1080",
"proxy": "https://用户名:密码@xxxx.xxxx.com"
}端口可以改,也可以不改。
-
如果使用习惯v2rayng的话,可以:服务器——添加自定义服务器
浏览选择一下对应的config.json即可。但是测速和测延迟就失效了。
到此就可以直接使用了,最后测一下速度:
-
vless+h2+tls:
-
NavieProxy:
-
自建speedtest的测速:
最后的速度和网页测速差不多,这是晚高峰的速度,我1000M的网络跑到这个速度算是很可以了。
其他的配置说明
这里说明一下其他的可选配置:
- caddy的route功能:将一组指令按字面意思作为一个单元进行评估。路由块中包含的指令不会在内部被重新排序。所以route包围的命令就会同等对待,正常是按照先后顺序,前面的指令执行后面的指令就不会继续执行,所以使用route可以避免这种情况。
- forword的一些功能,具体的可以去看对应官方文档,反正功能挺齐全的。其中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24:443, example.com
route {
forward_proxy {
basic_auth user1 0NtCL2JPJBgPPMmlPcJ
basic_auth user2 密码 # 身份验证
ports 80 443 #端口,如果你用的是别的端口在这改
hide_ip # 推荐,防止主动探测的
hide_via #推荐,防止主动探测的
probe_resistance xxxx.com #防止主动探测的
serve_pac /secret-proxy.pac # pac文件存放,可以
dial_timeout 30
upstream https://user:[email protected] # 这个是上游的,用来配置代理链条的,即一台给另一台
acl {
allow *.caddyserver.com
deny 192.168.1.1/32 192.168.0.0/16 *.prohibitedsite.com *.localhost
allow ::1/128 8.8.8.8 github.com *.github.io
allow_file /path/to/whitelist.txt
deny_file /path/to/blacklist.txt
allow all
deny all # unreachable rule, remaining requests are matched by `allow all` above
}
}
file_server
}- hide_ip 用来删除头文件的ip和下面一样,推荐配置
- hide_via 用来删除头文件via的推荐配置,不删除的话是会显示
Via: 2.0 caddy
- probe_resistance:后面可以跟上网址,如果有人访问网址没有带用户名和密码的话,会默认弹出"407 Proxy Authentication Required" ,这样会暴露出我是代理服务器,这个配置就是你要访问这个秘密网址才会弹出,但是我们caddy使用了
route
,所以如果没有密码的话会访问到正常的网页,可以根据情况配置 - serve_pac:用来配置pac文件的,我用v2rayNg自带,所以不配置,默认pac文件位置
http:网址/proxy.pac
,你改好放那里就行 - dial_timeout:超时
- upstream:这个是用来配置代理链条的,如果你还希望再加一层,可以通过这个转发到上游去,让它继续代理。
- acl:路由规则,允许/拒绝的ip,域名甚至文件都可以
总结
综合来说:NaiveProxy的优点很明显,服务器配置简单,而且安全。缺点也很直白,客户端简陋,支持的少。
从翻墙工具的发展历史我们可以看出这场攻防战的思路在变:
一开始时SS,讲究的是一个加密,破解不了,没人知道你访问的内容,后起之秀的思路也是顺着这条,加TLS等证书加密,但是随着墙的封锁,大家发现,我们和墙并不是对等关系,墙并不需要证据就可以封锁你,只要它觉得你是在翻墙就可以。战争的思路也要随着改变,更多的人选择藏木于林,尽可能的模拟正常的网站流量和藏匿自己的服务器。现在新一代的工具主流思想就是尽可能地模拟正常的网络流量。
思路的转变并不是坏事,毕竟局势不一样了,所以我目前的思路也是,尽可能的模仿正常网站,不会乱开多余的端口。
最后,有没人愿意合租服务器,使用NaiveProxy配置,流量没限制,主要NaiveProxy也无法限制。有的话可以留言或者联系我[email protected]
参考文章:
Trojan-Killer
XTLS 深入浅出
NaïveProxy官方部署文档
forwardproxy
caddy2的route指令
caddy1-forwardproxy的中文文档