Caddy下的Trojan和NaiveProxy配置.md
之前我一直使用的是vless和NaiveProxy 两种方式进行翻墙,这几年一直没有什么问题,但是犹豫xray升级之后,不再支持vless,这就导致了我只能使用NaiveProxy 进行翻墙,但是NaiveProxy 得手机客户端没几个好用的,很多都是需要使用插件外置的,于是就产生了升级和重新配置得想法。
首先,先说下我得环境,我得服务端用的是Caddy v2,简单方便得自动管理SSL证书,应用后端我之前比较喜欢用的是x-ui进行配置,然后再通过反代到对应docker的端口去。
于是我的选型方案就是优先能够实现这些功能,正好在GitHub找到对应的案例应用,所以就开始了升级之路。
修改dockerfile
之前我的caddy是直接使用官方推荐的方式,自己编译插件,毕竟要实现Trojan和NaiveProxy还需要两个特定的插件forwardproxy和Trojan-Go。这个导致的问题是每次编译都需要很长时间,有时候长达10分钟和处理器能力相关。如果是瓦工的机器,早就给我封锁了。
1 | FROM caddy:builder-alpine AS builder |
正好GitHub它会每次拉取最新的Caddy版本并进行编译,加上实现案例必须的插件。而且我看了,对方应该设置了git action,更新的很及时,跟官方同步。于是我修改了下官方的dockerfile文件:
1 | FROM alpine:latest # 使用最新版本 |
如果你有需要直接复制粘贴即可。需要注意这个是Linux版本的,他会测试系统型号,然后下载对应的包。这个执行起来就快多了,不用再次编译。
使用json文件替换原来的Caddyfile
之前使用的是Caddyfile文件进行配置,好处是简单,但是现在涉及一些比较精细的操作Caddyfile文件就比较难以实现,比如
这种复杂的功能在握手之前就要判断出是否正确的HTTPS协议,这样可以避免一些主动探测,增强安全性。而这个功能Caddyfile就无法实现。其次是json文件Caddy v2的升级必备,你使用的Caddyfile文件其实是系统后台转换成json文件后执行的。
Caddy也提供了一个转换命令
docker exec 容器 caddy caddy adapt --config /etc/caddy/Caddyfile --adapter caddyfile
复制下来之后,格式化一下就行,会有一些小瑕疵,但是保证可以运行。
这边提供一个json文件并且解释一下对应:
PS:json文件无法注释,所以如果要用,复制后删除掉注释部分。
1 | { |
从json文件可以看出,它可以实现十分细致的协议判断。这边由于我只有一个网站,所以比较简便,如果多个网站共存,需要在routes里面增加match匹配让它根据进来的不同域名分别方向代理到不同的docker端口去。
客户端配置及优化
NaiveProxy
NaiveProxy官方有几种调优方式这块可以看对应的服务器优化,这里主要说的是使用Quic协议进行访问。具体可以查看两者区别:
quic://user:[email protected]
简单说这个协议握手次数更短,建议使用,另外还有一些参数,可以自行进行调整。NaiveProxy的配置文件是JSON格式的
1 | { |
写好之后,在V2rayNG里面调用即可
Trojan
这个就要简单了,直接新增配置即可。
总结
至此,所有的配置结束。总结下就是在研究的过程中,发现现在内核都在不断更新,无论是协议还是客户端。这次也算是完成了自己一直想要做的一件事吧。每次手机上网翻墙都不是很方便。
而且这么更新之后,后续对服务器的占用会更少,只需要一个Trojan和NaiveProxy即可满足大部分需求,至于安全性,一个是因为DMIT支持免费换IP,还有就是NaiveProxy这么多年用下来没有任何问题。