谷姐:我们都是谷歌迷
We are all Google fans

【开源】你们要的一键脚本部署naiveproxy-在7楼

Rate this post

基于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 支持, 谢谢

申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。

未经谷姐允许不得转载:谷姐靓号网 » 【开源】你们要的一键脚本部署naiveproxy-在7楼
分享到: 生成海报

热门文章

评论 抢沙发

评论前必须登录!

立即登录   注册

买Google Voice认准【谷姐靓号网】

Google Voice靓号列表Google Voice自助购买
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活