全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 17748|回复: 98
打印 上一主题 下一主题

[经验] 【开源】你们要的一键脚本部署naiveproxy

  [复制链接]
跳转到指定楼层
1#
发表于 2023-1-7 03:32:59 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 在7楼 于 2023-1-21 13:06 编辑

基于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环境


没有docker的可以使用下面命令进行安装:


  1. curl -sSL https://get.docker.com/ | sh
  2. systemctl start docker
  3. systemctl enable docker
复制代码


不需要自己生成https证书,caddy会自动生成。

## 3. 部署服务端

一键安装脚本:

  1. # create a dir
  2. mkdir -p ./naive && cd ./naive

  3. # install
  4. bash <(curl -sSL https://raw.githubusercontent.com/RayWangQvQ/naiveproxy-docker/main/install.sh)
复制代码


当不指定参数时,该脚本是互动式的,运行后会提示输入相关配置信息,输入后回车即可。

install-interaction.png (22.96 KB, 下载次数: 4)

insatll-interaction-re.png (92.71 KB, 下载次数: 1)

当然,你也可以像下面那样,直接将参数拼接好后立即执行:

  1. # create a dir
  2. mkdir -p ./naive && cd ./naive

  3. # install
  4. 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 [email protected] -u zhangsan -p 1qaz@wsx --verbose
复制代码


install-silence.png (83.18 KB, 下载次数: 1)

参数说明:


    - `-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,你的邮箱,用于自动颁发证书,如`[email protected]`
    - `-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成功后,可以通过以下语句查看容器运行日志:

  1. docker logs -f naiveproxy
复制代码


`Ctrl + C` 可以退出日志追踪。


第一次运行会自动颁发证书,日志可能会先ERROR飘红,别慌,等一会。

如果最后日志出现`certificate obtained successfully`字样,就是颁发成功了,可以去部署客户端了。

cert-suc.png (35.43 KB, 下载次数: 2)

如果颁发证书一直不成功,请检查80端口和443端口是否开放、是否被占用。

部署成功后,浏览器访问域名,会展示伪装站点:

web.png (59.36 KB, 下载次数: 2)

## 4. 客户端

很多教程,就不说了。

|  平台   | 客户端  |
| :----:  | :----: |
|  Win    | V2RayN/Nekoray |
| Linux   | Nekoray |
| MacOS   | Nekoray |
| Android | SagerNet |
| iOS     | Shadowrocket |

## 5. 自定义配置

Caddy的配置文件`Caddyfile`已被挂载到宿主机的[./data/Caddyfile](data/Caddyfile),想要自定义配置,比如:

- 添加多用户
- 修改proxy的用户名和密码
- 更改端口
- 修改伪装站点的host

等等,都可以直接在宿主机修改该文件:

  1. vim ./data/Caddyfile
复制代码


修改完成并保存成功后,让Caddy热加载配置就可以了:

  1. docker exec -it naiveproxy /app/caddy reload --config /data/Caddyfile
复制代码




举个栗子,多用户可以直接添加`forward_proxy`,像这样:

  1. :443, demo.test.tk #你的域名
  2. tls [email protected] #你的邮箱
  3. route {
  4.         forward_proxy {
  5.                 basic_auth zhangsan 1qaz@wsx #用户名和密码
  6.                 hide_ip
  7.                 hide_via
  8.                 probe_resistance
  9.         }
  10.         forward_proxy {
  11.                 basic_auth lisi 1234 #用户名和密码
  12.                 hide_ip
  13.                 hide_via
  14.                 probe_resistance
  15.         }
  16.         reverse_proxy you.want.com {
  17.                 #伪装网址
  18.                 header_up Host {upstream_hostport}
  19.         }
  20. }
复制代码


详细的配置语法可以参考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端口了。
2#
 楼主| 发表于 2023-1-7 09:21:13 | 显示全部楼层
ndwuming 发表于 2023-1-7 08:04
比hysteria好用吗?

naive主要解决指纹的问题,让流量完全符合chrome浏览器的特征。Hysteria还没研究过,抽空去看看。
3#
 楼主| 发表于 2023-1-7 10:50:20 | 显示全部楼层
往事不如风 发表于 2023-1-7 10:35
Error response from daemon: No such container: naiveproxy

已修复,感谢反馈
4#
 楼主| 发表于 2023-1-7 11:25:39 | 显示全部楼层
Erik 发表于 2023-1-7 09:53
多谢大佬分享,能自定义更改伪装站么

可以的。

如果只是部署时单纯想修改伪装站点,可以在部署脚本最后加上参数-f或--fake-host:

  1. mkdir -p ./naive && cd ./naive && curl -sSL -f -o ./install.sh https://raw.githubusercontent.com/RayWangQvQ/naiveproxy-docker/main/install.sh && chmod +x ./install.sh && ./install.sh -f you.want.com
复制代码


因为参数有点多,我就没把伪装站放到互动式里让用户输入,但是可以通过参数直接指定。

如果是已经部署好了,或者是想修改其他配置(比如多用户、账号、密码等),可以去修改宿主机下的./data/Caddyfile配置文件,改好后
  1. docker exec -it naiveproxy /app/caddy reload --config /data/Caddyfile
复制代码

就可以了,详请已更新到一楼说明。
5#
 楼主| 发表于 2023-1-7 12:15:24 | 显示全部楼层
本帖最后由 在7楼 于 2023-1-8 11:12 编辑
qqcool8 发表于 2023-1-7 12:07
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,所以不会自己退出去。
6#
 楼主| 发表于 2023-1-7 18:48:25 | 显示全部楼层
hanjibin 发表于 2023-1-7 15:17
手动启动docker,申请成功证书,但是节点无法连接
工具:小火箭
协议:https 和 http2都试了

你的日志挺正常地,建议从客户端找找问题,不像服务端问题。

另外,

1. 客户端连接proxy的时候,docker logs -f naiveproxy会有新日志产生的,你可以看下连接时有没有新日志产生
2. 客户端也有自己的日志的,看下客户端日志说什么
7#
 楼主| 发表于 2023-1-7 22:24:56 | 显示全部楼层
本帖最后由 在7楼 于 2023-1-14 11:52 编辑
全局管理员 发表于 2023-1-7 20:42
已手撸,就是个加了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环境的需求)。
8#
 楼主| 发表于 2023-1-9 15:35:45 | 显示全部楼层
HKCPC 发表于 2023-1-9 15:30
Formate the Caddyfile
Start server
2023/01/09 07:29:25.635        INFO        using provided configuration        {"confi ...

Caddyfile异常,在jjpssl附近,可以检查下是不是输入了什么异常字符
9#
 楼主| 发表于 2023-1-10 00:24:54 | 显示全部楼层
HKCPC 发表于 2023-1-9 22:35
可以使用了,但是
使用v2RayN   连接
大概1分钟不到就会掉线,断了重新连接又可以了。但是1分钟又会断。

换个socks端口试试看,我用1080好像容易出问题
10#
 楼主| 发表于 2023-1-18 14:10:23 | 显示全部楼层

嗯,我是用的是官方版的naiveproxy,不支持upd的(作者明确表示不会支持upd:https://github.com/klzgrad/naiveproxy/issues/425)。

当然有些三方的仓库自己扩展了udp功能,比如singbox。

这一版我计划就保持最忠于原版、保持最简单,就不扩展upd了。

如果确实需要,可以考虑使用sing-box(但它不支持伪装站点功能)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-12 06:21 , Processed in 0.166461 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表