基于docker的naiveproxy一键部署脚本
GitHub: https://github.com/RayWangQvQ/naiveproxy-docker
AMD/Debian我自己测试通过,没有ARM小鸡,有的朋友可以帮忙测试下。
- [1. 说明](#1-说明)
- [2. 预备工作](#2-预备工作)
- [3. 部署服务端](#3-部署服务端)
- [4. 客户端](#4-客户端)
- [5. 自定义配置](#5-自定义配置)
- [6. 版本变更](#6-版本变更)
- [7. 常见问题](#7-常见问题)
- [7.1. 端口可以自定义吗](#71-端口可以自定义吗)
## 1. 说明
镜像使用官方代码生成,利用`GitHub Actions`构建并上传到`DockerHub`。
Dockerfile:[Dockerfile](Dockerfile)
DockerHub: https://hub.docker.com/repository/docker/zai7lou/naiveproxy-docker/general
## 2. 预备工作
一个域名域名已DNS到当前服务器ip服务器安装好docker环境
不需要自己生成https证书,caddy会自动生成。
## 3. 部署服务端
一键安装脚本:
- # create a dir
mkdir -p ./naive && cd ./naive
# install
bash <(curl -sSL https://raw.githubusercontent.com/RayWangQvQ/naiveproxy-docker/main/install.sh)
当不指定参数时,该脚本是互动式的,运行后会提示输入相关配置信息,输入后回车即可。
当然,你也可以像下面那样,直接将参数拼接好后立即执行:
- # create a dir
mkdir -p ./naive && cd ./naive
# install
curl -sSL -f -o ./install.sh https://raw.githubusercontent.com/RayWangQvQ/naiveproxy-docker/main/install.sh && chmod +x ./install.sh && ./install.sh -t demo.test.tk -m zhangsan@qq.com -u zhangsan -p 1qaz@wsx --verbose
参数说明:
- `-t`:host,你的域名,如`demo.test.tk`
- `-o`: cert-mode,证书模式,1为Caddy自动颁发,2为自己指定现有证书
- `-c`: cert-file,证书文件绝对路径,如`/certs/test2.zai7lou.ml.crt`
- `-k`, cert-key-file,证书key文件绝对路径,如`/certs/test2.zai7lou.ml.key`
- `-m`:mail,你的邮箱,用于自动颁发证书,如`zhangsan@qq.com`
- `-w`: http-port,http端口,默认80
- `-s`: https-port,https端口,默认443
- `-u`:user,proxy的用户名
- `-p`:pwd,proxy的密码
- `-f`:fakeHost,伪装域名,默认`https://demo.cloudreve.org`
- `--verbose`,输出详细日志
- `-h`:help,查看参数信息
容器run成功后,可以通过以下语句查看容器运行日志:
- docker logs -f naiveproxy
`Ctrl + C` 可以退出日志追踪。
第一次运行会自动颁发证书,日志可能会先ERROR飘红,别慌,等一会。
如果最后日志出现`certificate obtained successfully`字样,就是颁发成功了,可以去部署客户端了。
如果颁发证书一直不成功,请检查80端口和443端口是否开放、是否被占用。
部署成功后,浏览器访问域名,会展示伪装站点:
## 4. 客户端
很多教程,就不说了。
|平台 | 客户端|
| :----:| :----: |
|Win | V2RayN/Nekoray |
| Linux | Nekoray |
| MacOS | Nekoray |
| Android | SagerNet |
| iOS | Shadowrocket |
## 5. 自定义配置
Caddy的配置文件`Caddyfile`已被挂载到宿主机的[./data/Caddyfile](data/Caddyfile),想要自定义配置,比如:
- 添加多用户
- 修改proxy的用户名和密码
- 更改端口
- 修改伪装站点的host
等等,都可以直接在宿主机修改该文件:
- vim ./data/Caddyfile
修改完成并保存成功后,让Caddy热加载配置就可以了:
- docker exec -it naiveproxy /app/caddy reload --config /data/Caddyfile
举个栗子,多用户可以直接添加`forward_proxy`,像这样:
- :443, demo.test.tk #你的域名
tls zhangsan@qq.com #你的邮箱
route {
forward_proxy {
basic_auth zhangsan 1qaz@wsx #用户名和密码
hide_ip
hide_via
probe_resistance
}
forward_proxy {
basic_auth lisi 1234 #用户名和密码
hide_ip
hide_via
probe_resistance
}
reverse_proxy you.want.com {
#伪装网址
header_up Host {upstream_hostport}
}
}
详细的配置语法可以参考Caddy的官方文档:https://caddyserver.com/docs/
P.S.我发现naiveproxy插件版地caddy,Caddyfile里不支持`demo.test.tk:443`的格式,必须像上面那样端口在域名前面,否则会报错。应该是适配有问题,需要注意下。
## 6. 版本变更
[CHANGELOG](CHANGELOG.md)## 7. 常见问题
### 7.1. 端口可以自定义吗
如果使用现有证书,可以自定义;如果要Caddy自动颁发,必须占有80端口。
Caddy默认会占用80和443端口,用来管理证书,当前官方镜像并不支持更改默认端口,也就是一定需要占用80端口。
安装脚本可以选择证书模式,选择2使用现有证书,就可以不占用80和443端口了。
热议
推荐楼 qqcool8 2023-1-7 12:26:02
这就已经成功了老哥,直接Ctrl+C退出就行,客户端可以连了。
你往上面一行看,是不是有“certificate ob ...
非常感谢,很好用!
2楼 表弟 2023-1-7 03:34:26
火前留名
3楼 loonyjoy 2023-1-7 03:43:56
刘明
4楼 惜为伊人醉 2023-1-7 03:59:55
支持技术贴1感谢分享
5楼 aihoom 2023-1-7 04:17:24
技术贴不错,可惜是docker
6楼 ytt 2023-1-7 05:16:10
感谢大佬的付出
7楼 eudx 2023-1-7 06:12:34
刘铭 试试好用不
8楼 a4425656 2023-1-7 07:00:47
技术贴 火钳刘明
9楼 whiler 2023-1-7 07:09:46
感谢大佬的分享
10楼 伴之则安 2023-1-7 07:28:00
为什么要用docker,一是费劲,二是感觉里边可能掺沙子
12楼 沙龙 2023-1-7 08:16:20
好贴子
13楼 hkvip8 2023-1-7 08:18:45
支持
14楼 在7楼 2023-1-7 09:21:13
比hysteria好用吗?
naive主要解决指纹的问题,让流量完全符合chrome浏览器的特征。Hysteria还没研究过,抽空去看看。
15楼 ndwuming 2023-1-7 09:47:29
naive主要解决指纹的问题,让流量完全符合chrome浏览器的特征。Hysteria还没研究过,抽空去看看。 ...
多谢老哥
16楼 hanjibin 2023-1-7 09:48:32
能自定义端口吗,80443不方便
17楼 Erik 2023-1-7 09:53:25
多谢大佬分享,能自定义更改伪装站么
18楼 城里的月光 2023-1-7 10:09:34
先收藏一波
19楼 往事不如风 2023-1-7 10:35:11
Error response from daemon: No such container: naiveproxy
20楼 探针 2023-1-7 10:47:23
马克 感谢大佬的分享
22楼 qqcool8 2023-1-7 11:25:29
mark一下
因为参数有点多,我就没把伪装站放到互动式里让用户输入,但是可以通过参数直接指定。
如果是已经部署好了,或者是想修改其他配置(比如多用户、账号、密码等),可以去修改宿主机下的./data/Caddyfile配置文件,改好后
- docker exec -it naiveproxy /app/caddy reload --config /data/Caddyfile
就可以了,详请已更新到一楼说明。
24楼 tycu 2023-1-7 11:38:12
技术贴 火钳刘明
25楼 lspro 2023-1-7 11:39:55
技术贴绑定
26楼 Squidward 2023-1-7 11:47:38
谢谢大佬,先留个名,看以后能用不
27楼 qqcool8 2023-1-7 12:07:40
2023/01/07 04:06:44.692 INFO tls.obtain releasing lock{"identifier": "eso.japaneast.cloudapp.azure.com"}
每次到这步没反应
28楼 在7楼 2023-1-7 12:15:24
2023/01/07 04:06:44.692 INFO tls.obtain releasing lock{"identifier": "eso.japaneast.clouda ...
这就已经成功了老哥,直接Ctrl+C退出就行,客户端可以连了。
你往上面一行看,是不是有“certificate obtained successfully”,就说明证书颁发成功了。
之所以停在这,是因为docker logs -f naiveproxy,会以追踪模式查看log,所以不会自己退出去。
29楼 qqcool8 2023-1-7 12:26:02
这就已经成功了老哥,直接Ctrl+C退出就行,客户端可以连了。
你往上面一行看,是不是有“certificate ob ...
非常感谢,很好用!
30楼 groots 2023-1-7 12:54:05
马一下,大佬厉害
32楼 Erik 2023-1-7 13:18:11
可以的。
如果只是部署时单纯想修改伪装站点,可以在部署脚本最后加上参数-f或--fake-host:
多谢大佬
33楼 b66667777 2023-1-7 13:19:30
支持一下
34楼 joshuabu 2023-1-7 13:21:01
666
35楼 cici9911 2023-1-7 14:09:31
这个岂不是会占用80和443?
36楼 hanjibin 2023-1-7 15:14:07
环境:ovhubuntu22.04
已知:
root@vps-f5e18458:~/naive# docker -v && docker-compose -v
Docker version 20.10.22, build 3a2c30b
docker-compose version 1.29.2, build 5becea4c
问题:
docker: 'compose' is not a docker command.
See 'docker --help'
37楼 hanjibin 2023-1-7 15:17:31
手动启动docker,申请成功证书,但是节点无法连接
工具:小火箭
协议:https 和 http2都试了
docker日志:
root@vps-f5e18458:~/naive# docker-compose logs -f
Attaching to naiveproxy
naiveproxy | 2023/01/07 07:20:51.301 INFO using provided configuration {"config_file": "/data/Caddyfile", "config_adapter": ""}
naiveproxy | 2023/01/07 07:20:51.305 WARN Caddyfile input is not formatted; run the 'caddy fmt' command to fix inconsistencies {"adapter": "caddyfile", "file": "/data/Caddyfile", "line": 4}
naiveproxy | 2023/01/07 07:20:51.311 INFO admin admin endpoint started{"address": "localhost:2019", "enforce_origin": false, "origins": ["//localhost:2019", "//[::1]:2019", "//127.0.0.1:2019"]}
naiveproxy | 2023/01/07 07:20:51.317 INFO http server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS {"server_name": "srv1", "https_port": 443}
naiveproxy | 2023/01/07 07:20:51.318 INFO http enabling automatic HTTP->HTTPS redirects {"server_name": "srv1"}
naiveproxy | 2023/01/07 07:20:51.326 INFO http.log server running{"name": "srv0", "protocols": ["h1", "h2", "h3"]}
naiveproxy | 2023/01/07 07:20:51.333 INFO http enabling HTTP/3 listener {"addr": ":443"}
naiveproxy | 2023/01/07 07:20:51.334 INFO failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB). See https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-Buffer-Size for details.
naiveproxy | 2023/01/07 07:20:51.335 INFO http.log server running{"name": "srv1", "protocols": ["h1", "h2", "h3"]}
naiveproxy | 2023/01/07 07:20:51.341 INFO http.log server running{"name": "remaining_auto_https_redirects", "protocols": ["h1", "h2", "h3"]}
naiveproxy | 2023/01/07 07:20:51.341 INFO http enabling automatic TLS certificate management {"domains": ["ovh.cclcdq.ga"]}
naiveproxy | 2023/01/07 07:20:51.343 INFO autosaved config (load with --resume flag) {"file": "/root/.config/caddy/autosave.json"}
naiveproxy | 2023/01/07 07:20:51.348 INFO serving initial configuration
naiveproxy | 2023/01/07 07:20:51.344 INFO tls.obtain acquiring lock{"identifier": "ovh.cclcdq.ga"}
naiveproxy | 2023/01/07 07:20:51.332 INFO tls cleaning storage unit {"description": "FileStorage:/root/.local/share/caddy"}
naiveproxy | 2023/01/07 07:20:51.350 INFO tls finished cleaning storage units
naiveproxy | 2023/01/07 07:20:51.324 INFO tls.cache.maintenance started background certificate maintenance {"cache": "0xc00026d3b0"}
naiveproxy | Successfully started Caddy (pid=11) - Caddy is running in the background
naiveproxy | tail: 2023/01/07 07:20:51.357 INFO tls.obtain lock acquired {"identifier": "ovh.cclcdq.ga"}
naiveproxy | 2023/01/07 07:20:51.358 INFO tls.obtain obtaining certificate {"identifier": "ovh.cclcdq.ga"}
naiveproxy | cannot open 'tail' for reading: No such file or directory
naiveproxy | ==> /dev/null <==
naiveproxy | 2023/01/07 07:20:51.584 INFO http waiting on internal rate limiter {"identifiers": ["ovh.cclcdq.ga"], "ca": "https://acme-v02.api.letsencrypt.org/directory", "account": "chentanwan@qq.com"}
naiveproxy | 2023/01/07 07:20:51.585 INFO http done waiting on internal rate limiter {"identifiers": ["ovh.cclcdq.ga"], "ca": "https://acme-v02.api.letsencrypt.org/directory", "account": "chentanwan@qq.com"}
naiveproxy | 2023/01/07 07:20:51.689 INFO http.acme_client trying to solve challenge {"identifier": "ovh.cclcdq.ga", "challenge_type": "http-01", "ca": "https://acme-v02.api.letsencrypt.org/directory"}
naiveproxy | 2023/01/07 07:20:51.921 INFO http served key authentication {"identifier": "ovh.cclcdq.ga", "challenge": "http-01", "remote": "54.218.60.222:56178", "distributed": false}
naiveproxy | 2023/01/07 07:20:51.938 INFO http served key authentication {"identifier": "ovh.cclcdq.ga", "challenge": "http-01", "remote": "23.178.112.103:27854", "distributed": false}
naiveproxy | 2023/01/07 07:20:51.982 INFO http served key authentication {"identifier": "ovh.cclcdq.ga", "challenge": "http-01", "remote": "18.217.58.150:38158", "distributed": false}
naiveproxy | 2023/01/07 07:20:52.329 INFO http.acme_client authorization finalized {"identifier": "ovh.cclcdq.ga", "authz_status": "valid"}
naiveproxy | 2023/01/07 07:20:52.330 INFO http.acme_client validations succeeded; finalizing order {"order": "https://acme-v02.api.letsencrypt.org/acme/order/905462177/157371397887"}
naiveproxy | 2023/01/07 07:20:53.119 INFO http.acme_client successfully downloaded available certificate chains {"count": 2, "first_url": "https://acme-v02.api.letsencrypt.org/acme/cert/039da2610aa7ca288bb7a7e24fb4e11e9f87"}
naiveproxy | 2023/01/07 07:20:53.121 INFO tls.obtain certificate obtained successfully {"identifier": "ovh.cclcdq.ga"}
naiveproxy | 2023/01/07 07:20:53.122 INFO tls.obtain releasing lock{"identifier": "ovh.cclcdq.ga"}
38楼 makizhang 2023-1-7 15:22:01
先收藏一波顺便点个星星
39楼 kukuyan 2023-1-7 16:12:45
感谢分享收藏了
40楼 hanjibin 2023-1-7 16:46:48
伪装站点正常,配置域名用户名密码正确,修复好了我重装看看
42楼 在7楼 2023-1-7 18:48:25
手动启动docker,申请成功证书,但是节点无法连接
工具:小火箭
协议:https 和 http2都试了
你的日志挺正常地,建议从客户端找找问题,不像服务端问题。
另外,
1. 客户端连接proxy的时候,docker logs -f naiveproxy会有新日志产生的,你可以看下连接时有没有新日志产生
2. 客户端也有自己的日志的,看下客户端日志说什么
43楼 naohjohn 2023-1-7 19:56:05
不错,挺好的,自动申请证书的话没问题。
但是已经有网站在运行占用443端口的话,Caddyfile里tls设置成网站那边复制过来的证书不起效果,还是会去重复申请证书然后失败
44楼 qrk 2023-1-7 19:57:37
马克,感谢分享
45楼 hanjibin 2023-1-7 20:31:02
你的日志挺正常地,建议从客户端找找问题,不像服务端问题。
另外,
服务端没有连接日志产生,客户端直接显示无法连接服务器
46楼 haoxiujie 2023-1-7 20:33:55
先马克一下
47楼 全局管理员 2023-1-7 20:42:38
已手撸,就是个加了naive插件的caddy,,安装go环境编译出来,编辑个配置文件就运行了.
48楼 stonesnake123 2023-1-7 21:02:24
感谢大佬分享
49楼 tianya2002 2023-1-7 21:22:29
技术贴,感谢分享,收藏备用!
50楼 在7楼 2023-1-7 22:24:56
已手撸,就是个加了naive插件的caddy,,安装go环境编译出来,编辑个配置文件就运行了. ...
是的,naiveproxy其实就是使用naive插件编译出的Caddy,为Caddy添加了forward_proxy功能。
但有个注意点就是,go其实只在编译阶段有用,运行Caddy时跟它就没关系了。所以我打镜像逻辑是先依托于go的官方镜像,安装xcaddy,然后用xcaddy编译出带naive插件的caddy,最后把这个caddy文件拷贝到debian的官方镜像上,发布最后的debian镜像。
如果不这样,也就是安装go和最后运行caddy都放一起的话,也不做清理,要占用1G左右的资源,docker镜像只需要65M(基于debian,如果基于alphine还能更小)。
这也是为啥不推荐在宿主机直接手撸的原因(除非宿主机本来就有使用go环境的需求)。
52楼 mianfeizhujiwu2 2023-1-7 23:22:34
收藏了。~
53楼 HKCPC 2023-1-9 15:30:15
Formate the Caddyfile
Start server
2023/01/09 07:29:25.635 INFO using provided configuration {"config_file": "/data/Caddyfile", "config_adapter": ""}
Error: adapting config using caddyfile: parsing caddyfile tokens for 'route': /data/Caddyfile:14 - Error during parsing: parsing caddyfile tokens for 'forward_proxy': /data/Caddyfile:5 - Error during parsing: Wrong argument count or unexpected line ending after 'jjpssl'
Error: caddy process exited with error: exit status 1
什么问题。
54楼 Minsk 2023-1-9 15:33:40
马克,备用
55楼 在7楼 2023-1-9 15:35:45
Formate the Caddyfile
Start server
2023/01/09 07:29:25.635 INFO using provided configuration {"confi ...
Caddyfile异常,在jjpssl附近,可以检查下是不是输入了什么异常字符
56楼 HKCPC 2023-1-9 22:35:02
可以使用了,但是
使用v2RayN 连接
大概1分钟不到就会掉线,断了重新连接又可以了。但是1分钟又会断。
2023/01/09 22:23:53 [Warning] core: Xray 1.7.0 started
2023/01/09 22:28:13 [Warning] [2244166683] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1867->127.0.0.1:1080: i/o timeout
2023/01/09 22:28:15 [Warning] [221933857] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1869->127.0.0.1:1080: i/o timeout
2023/01/09 22:28:20 [Warning] [831127675] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1872->127.0.0.1:1080: i/o timeout
2023/01/09 22:28:23 [Warning] [3006064210] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1874->127.0.0.1:1080: i/o timeout
2023/01/09 22:28:42 [Warning] [1522382230] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1878->127.0.0.1:1080: i/o timeout
2023/01/09 22:28:42 [Warning] [1522382230] proxy/http: failed to read response from www.gstatic.com > io: read/write on closed pipe
2023/01/09 22:28:46 [Warning] [4069559797] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1881->127.0.0.1:1080: i/o timeout
2023/01/09 22:28:51 [Warning] [2957544304] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1885->127.0.0.1:1080: i/o timeout
2023/01/09 22:28:52 [Warning] [4118445812] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1887->127.0.0.1:1080: i/o timeout
57楼 在7楼 2023-1-10 00:24:54
可以使用了,但是
使用v2RayN 连接
大概1分钟不到就会掉线,断了重新连接又可以了。但是1分钟又会断。
换个socks端口试试看,我用1080好像容易出问题
58楼 心上人 2023-1-10 04:19:02
技术贴绑定
59楼 HKCPC 2023-1-10 22:37:11
换个socks端口试试看,我用1080好像容易出问题
换了1090 10800一样的问题,都是只能连接一分钟左右
60楼 CHH 7天前
输入docker logs -f naiveproxy
出现 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
62楼 CHH 6天前
2023/01/13 11:37:16.926 INFO tls.obtain certificate obtained successfully {"identifier": "ccc.700005.xyz"}
2023/01/13 11:37:16.926 INFO tls.obtain releasing lock{"identifier": "=005.xyz"}
^Z
[2]+Stopped docker logs -f naiveproxy
到这就没反应了 客户端可以ping 就是不能用
63楼 noway 5天前
留名,好帖
64楼 hacn 昨天13:33
不支持udp吗
65楼 laoxong 昨天13:41
感谢!
66楼 在7楼 昨天14:10
不支持udp吗
嗯,我是用的是官方版的naiveproxy,不支持upd的(作者明确表示不会支持upd:https://github.com/klzgrad/naiveproxy/issues/425)。
当然有些三方的仓库自己扩展了udp功能,比如singbox。
这一版我计划就保持最忠于原版、保持最简单,就不扩展upd了。
如果确实需要,可以考虑使用sing-box(但它不支持伪装站点功能)。
67楼 hacn 昨天14:27
嗯,我是用的是官方版的naiveproxy,不支持upd的(作者明确表示不会支持upd:https://github.com/klzgrad ...
不支持伪装站点,意思是特征会明显很多嘛
68楼 wg58462130 昨天14:47
想要多用户管理面板
69楼 元宇宙 昨天14:57
这个不会屏蔽IP吗.
70楼 在7楼 昨天16:51
不支持伪装站点,意思是特征会明显很多嘛
伪装站点指的是,你用浏览器直接访问代理地址,显示的是一个伪装用的正常网站,看不出是proxy,用来对付墙的主动探测的。
当前并没有直接证据表明墙会根据这个特征进行疯禁,所以也不能算必要功能,不是强迫症可以不用。
72楼 joshuabu 半小时前
还是能整合到xui就好了
73楼 打包的香肠 16分钟前
能否加入 UDP 支持, 谢谢
申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。
评论前必须登录!
立即登录 注册